Home / Class/ FreezableTicker Class — netty Architecture

FreezableTicker Class — netty Architecture

Architecture documentation for the FreezableTicker class in EmbeddedEventLoop.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  28e073ef_ec3c_0a2d_cff9_961e8f9320fa["FreezableTicker"]
  4e307a37_725f_c65e_2729_80961dc4b390["EmbeddedEventLoop.java"]
  28e073ef_ec3c_0a2d_cff9_961e8f9320fa -->|defined in| 4e307a37_725f_c65e_2729_80961dc4b390
  8abd9974_413e_9132_aa3b_9d111946747d["advance()"]
  28e073ef_ec3c_0a2d_cff9_961e8f9320fa -->|method| 8abd9974_413e_9132_aa3b_9d111946747d
  2b25ceec_3bec_67a8_1d11_01cd6063c78b["nanoTime()"]
  28e073ef_ec3c_0a2d_cff9_961e8f9320fa -->|method| 2b25ceec_3bec_67a8_1d11_01cd6063c78b
  5b222009_95b3_19de_0384_b13425cf9dde["sleep()"]
  28e073ef_ec3c_0a2d_cff9_961e8f9320fa -->|method| 5b222009_95b3_19de_0384_b13425cf9dde
  c8c1b694_d39b_dec6_78bc_71b26c3ac24b["freezeTime()"]
  28e073ef_ec3c_0a2d_cff9_961e8f9320fa -->|method| c8c1b694_d39b_dec6_78bc_71b26c3ac24b
  85716b87_d8f1_5009_e8fc_268184b63ce7["unfreezeTime()"]
  28e073ef_ec3c_0a2d_cff9_961e8f9320fa -->|method| 85716b87_d8f1_5009_e8fc_268184b63ce7

Relationship Graph

Source Code

transport/src/main/java/io/netty/channel/embedded/EmbeddedEventLoop.java lines 172–230

    static final class FreezableTicker implements MockTicker {
        private final Ticker unfrozen = Ticker.systemTicker();
        /**
         * When time is not {@link #timeFrozen frozen}, the base time to subtract from {@link System#nanoTime()}. When
         * time is frozen, this variable is unused.
         */
        private long startTime;
        /**
         * When time is frozen, the timestamp returned by {@link #getCurrentTimeNanos()}. When unfrozen, this is unused.
         */
        private long frozenTimestamp;
        /**
         * Whether time is currently frozen.
         */
        private boolean timeFrozen;

        @Override
        public void advance(long amount, TimeUnit unit) {
            long nanos = unit.toNanos(amount);
            if (timeFrozen) {
                frozenTimestamp += nanos;
            } else {
                // startTime is subtracted from nanoTime, so increasing the startTime will advance
                // getCurrentTimeNanos
                startTime -= nanos;
            }
        }

        @Override
        public long nanoTime() {
            if (timeFrozen) {
                return frozenTimestamp;
            }
            return unfrozen.nanoTime() - startTime;
        }

        @Override
        public void sleep(long delay, TimeUnit unit) throws InterruptedException {
            throw new UnsupportedOperationException("Sleeping is not supported by the default ticker for " +
                    "EmbeddedEventLoop. Please use a different ticker implementation if you require sleep support.");
        }

        public void freezeTime() {
            if (!timeFrozen) {
                frozenTimestamp = nanoTime();
                timeFrozen = true;
            }
        }

        public void unfreezeTime() {
            if (timeFrozen) {
                // we want getCurrentTimeNanos to continue right where frozenTimestamp left off:
                // nanoTime = unfrozen.nanoTime - startTime = frozenTimestamp
                // then solve for startTime
                startTime = unfrozen.nanoTime() - frozenTimestamp;
                timeFrozen = false;
            }
        }
    }

Frequently Asked Questions

What is the FreezableTicker class?
FreezableTicker is a class in the netty codebase, defined in transport/src/main/java/io/netty/channel/embedded/EmbeddedEventLoop.java.
Where is FreezableTicker defined?
FreezableTicker is defined in transport/src/main/java/io/netty/channel/embedded/EmbeddedEventLoop.java at line 172.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free