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;
}
}
}
Source
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