TestScheduler.smali
.class public final Lio/reactivex/schedulers/TestScheduler;
.super Lio/reactivex/Scheduler;
.source "TestScheduler.java"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lio/reactivex/schedulers/TestScheduler$TestWorker;,
Lio/reactivex/schedulers/TestScheduler$TimedRunnable;
}
.end annotation
# instance fields
.field counter:J
.field final queue:Ljava/util/Queue;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/Queue<",
"Lio/reactivex/schedulers/TestScheduler$TimedRunnable;",
">;"
}
.end annotation
.end field
.field volatile time:J
# direct methods
.method static constructor <clinit>()V
.registers 1
return-void
.end method
.method public constructor <init>()V
.registers 3
.line 30
invoke-direct {p0}, Lio/reactivex/Scheduler;-><init>()V
.line 32
new-instance v0, Ljava/util/concurrent/PriorityBlockingQueue;
const/16 v1, 0xb
invoke-direct {v0, v1}, Ljava/util/concurrent/PriorityBlockingQueue;-><init>(I)V
iput-object v0, p0, Lio/reactivex/schedulers/TestScheduler;->queue:Ljava/util/Queue;
return-void
.end method
.method private triggerActions(J)V
.registers 9
.param p1, "targetTimeInNanoseconds" # J
.line 105
:goto_0
iget-object v0, p0, Lio/reactivex/schedulers/TestScheduler;->queue:Ljava/util/Queue;
invoke-interface {v0}, Ljava/util/Queue;->isEmpty()Z
move-result v0
if-nez v0, :cond_37
.line 106
iget-object v0, p0, Lio/reactivex/schedulers/TestScheduler;->queue:Ljava/util/Queue;
invoke-interface {v0}, Ljava/util/Queue;->peek()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lio/reactivex/schedulers/TestScheduler$TimedRunnable;
.line 107
.local v0, "current":Lio/reactivex/schedulers/TestScheduler$TimedRunnable;
iget-wide v1, v0, Lio/reactivex/schedulers/TestScheduler$TimedRunnable;->time:J
cmp-long v3, v1, p1
if-lez v3, :cond_17
.line 108
goto :goto_37
.line 111
:cond_17
iget-wide v1, v0, Lio/reactivex/schedulers/TestScheduler$TimedRunnable;->time:J
const-wide/16 v3, 0x0
cmp-long v5, v1, v3
if-nez v5, :cond_22
iget-wide v1, p0, Lio/reactivex/schedulers/TestScheduler;->time:J
goto :goto_24
:cond_22
iget-wide v1, v0, Lio/reactivex/schedulers/TestScheduler$TimedRunnable;->time:J
:goto_24
iput-wide v1, p0, Lio/reactivex/schedulers/TestScheduler;->time:J
.line 112
iget-object v1, p0, Lio/reactivex/schedulers/TestScheduler;->queue:Ljava/util/Queue;
invoke-interface {v1}, Ljava/util/Queue;->remove()Ljava/lang/Object;
.line 115
iget-object v1, v0, Lio/reactivex/schedulers/TestScheduler$TimedRunnable;->scheduler:Lio/reactivex/schedulers/TestScheduler$TestWorker;
iget-boolean v1, v1, Lio/reactivex/schedulers/TestScheduler$TestWorker;->disposed:Z
if-nez v1, :cond_36
.line 116
iget-object v1, v0, Lio/reactivex/schedulers/TestScheduler$TimedRunnable;->run:Ljava/lang/Runnable;
invoke-interface {v1}, Ljava/lang/Runnable;->run()V
.line 118
.end local v0 # "current":Lio/reactivex/schedulers/TestScheduler$TimedRunnable;
:cond_36
goto :goto_0
.line 119
:cond_37
:goto_37
iput-wide p1, p0, Lio/reactivex/schedulers/TestScheduler;->time:J
.line 120
return-void
.end method
# virtual methods
.method public advanceTimeBy(JLjava/util/concurrent/TimeUnit;)V
.registers 8
.param p1, "delayTime" # J
.param p3, "unit" # Ljava/util/concurrent/TimeUnit;
.line 80
iget-wide v0, p0, Lio/reactivex/schedulers/TestScheduler;->time:J
invoke-virtual {p3, p1, p2}, Ljava/util/concurrent/TimeUnit;->toNanos(J)J
move-result-wide v2
add-long/2addr v0, v2
sget-object v2, Ljava/util/concurrent/TimeUnit;->NANOSECONDS:Ljava/util/concurrent/TimeUnit;
invoke-virtual {p0, v0, v1, v2}, Lio/reactivex/schedulers/TestScheduler;->advanceTimeTo(JLjava/util/concurrent/TimeUnit;)V
.line 81
return-void
.end method
.method public advanceTimeTo(JLjava/util/concurrent/TimeUnit;)V
.registers 6
.param p1, "delayTime" # J
.param p3, "unit" # Ljava/util/concurrent/TimeUnit;
.line 92
invoke-virtual {p3, p1, p2}, Ljava/util/concurrent/TimeUnit;->toNanos(J)J
move-result-wide v0
.line 93
.local v0, "targetTime":J
invoke-direct {p0, v0, v1}, Lio/reactivex/schedulers/TestScheduler;->triggerActions(J)V
.line 94
return-void
.end method
.method public createWorker()Lio/reactivex/Scheduler$Worker;
.registers 2
.line 125
new-instance v0, Lio/reactivex/schedulers/TestScheduler$TestWorker;
invoke-direct {v0, p0}, Lio/reactivex/schedulers/TestScheduler$TestWorker;-><init>(Lio/reactivex/schedulers/TestScheduler;)V
return-object v0
.end method
.method public now(Ljava/util/concurrent/TimeUnit;)J
.registers 5
.param p1, "unit" # Ljava/util/concurrent/TimeUnit;
.line 68
iget-wide v0, p0, Lio/reactivex/schedulers/TestScheduler;->time:J
sget-object v2, Ljava/util/concurrent/TimeUnit;->NANOSECONDS:Ljava/util/concurrent/TimeUnit;
invoke-virtual {p1, v0, v1, v2}, Ljava/util/concurrent/TimeUnit;->convert(JLjava/util/concurrent/TimeUnit;)J
move-result-wide v0
return-wide v0
.end method
.method public triggerActions()V
.registers 3
.line 101
iget-wide v0, p0, Lio/reactivex/schedulers/TestScheduler;->time:J
invoke-direct {p0, v0, v1}, Lio/reactivex/schedulers/TestScheduler;->triggerActions(J)V
.line 102
return-void
.end method