Scheduler$Worker$PeriodicTask.smali
.class final Lio/reactivex/Scheduler$Worker$PeriodicTask;
.super Ljava/lang/Object;
.source "Scheduler.java"
# interfaces
.implements Ljava/lang/Runnable;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lio/reactivex/Scheduler$Worker;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x10
name = "PeriodicTask"
.end annotation
# instance fields
.field count:J
.field final decoratedRun:Ljava/lang/Runnable;
.field lastNowNanoseconds:J
.field final periodInNanoseconds:J
.field final sd:Lio/reactivex/internal/disposables/SequentialDisposable;
.field startInNanoseconds:J
.field final synthetic this$0:Lio/reactivex/Scheduler$Worker;
# direct methods
.method static constructor <clinit>()V
.registers 1
return-void
.end method
.method constructor <init>(Lio/reactivex/Scheduler$Worker;JLjava/lang/Runnable;JLio/reactivex/internal/disposables/SequentialDisposable;J)V
.registers 10
.param p1, "this$0" # Lio/reactivex/Scheduler$Worker;
.param p2, "firstStartInNanoseconds" # J
.param p4, "decoratedRun" # Ljava/lang/Runnable;
.param p5, "firstNowNanoseconds" # J
.param p7, "sd" # Lio/reactivex/internal/disposables/SequentialDisposable;
.param p8, "periodInNanoseconds" # J
.line 361
iput-object p1, p0, Lio/reactivex/Scheduler$Worker$PeriodicTask;->this$0:Lio/reactivex/Scheduler$Worker;
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 362
iput-object p4, p0, Lio/reactivex/Scheduler$Worker$PeriodicTask;->decoratedRun:Ljava/lang/Runnable;
.line 363
iput-object p7, p0, Lio/reactivex/Scheduler$Worker$PeriodicTask;->sd:Lio/reactivex/internal/disposables/SequentialDisposable;
.line 364
iput-wide p8, p0, Lio/reactivex/Scheduler$Worker$PeriodicTask;->periodInNanoseconds:J
.line 365
iput-wide p5, p0, Lio/reactivex/Scheduler$Worker$PeriodicTask;->lastNowNanoseconds:J
.line 366
iput-wide p2, p0, Lio/reactivex/Scheduler$Worker$PeriodicTask;->startInNanoseconds:J
.line 367
return-void
.end method
# virtual methods
.method public run()V
.registers 11
.line 371
iget-object v0, p0, Lio/reactivex/Scheduler$Worker$PeriodicTask;->decoratedRun:Ljava/lang/Runnable;
invoke-interface {v0}, Ljava/lang/Runnable;->run()V
.line 373
iget-object v0, p0, Lio/reactivex/Scheduler$Worker$PeriodicTask;->sd:Lio/reactivex/internal/disposables/SequentialDisposable;
invoke-virtual {v0}, Lio/reactivex/internal/disposables/SequentialDisposable;->isDisposed()Z
move-result v0
if-nez v0, :cond_59
.line 377
iget-object v0, p0, Lio/reactivex/Scheduler$Worker$PeriodicTask;->this$0:Lio/reactivex/Scheduler$Worker;
sget-object v1, Ljava/util/concurrent/TimeUnit;->NANOSECONDS:Ljava/util/concurrent/TimeUnit;
invoke-virtual {v0, v1}, Lio/reactivex/Scheduler$Worker;->now(Ljava/util/concurrent/TimeUnit;)J
move-result-wide v0
.line 379
.local v0, "nowNanoseconds":J
sget-wide v2, Lio/reactivex/Scheduler;->CLOCK_DRIFT_TOLERANCE_NANOSECONDS:J
add-long/2addr v2, v0
iget-wide v4, p0, Lio/reactivex/Scheduler$Worker$PeriodicTask;->lastNowNanoseconds:J
const-wide/16 v6, 0x1
cmp-long v8, v2, v4
if-ltz v8, :cond_38
iget-wide v2, p0, Lio/reactivex/Scheduler$Worker$PeriodicTask;->periodInNanoseconds:J
add-long/2addr v4, v2
sget-wide v2, Lio/reactivex/Scheduler;->CLOCK_DRIFT_TOLERANCE_NANOSECONDS:J
add-long/2addr v4, v2
cmp-long v2, v0, v4
if-ltz v2, :cond_2b
goto :goto_38
.line 388
:cond_2b
iget-wide v2, p0, Lio/reactivex/Scheduler$Worker$PeriodicTask;->startInNanoseconds:J
iget-wide v4, p0, Lio/reactivex/Scheduler$Worker$PeriodicTask;->count:J
add-long/2addr v4, v6
iput-wide v4, p0, Lio/reactivex/Scheduler$Worker$PeriodicTask;->count:J
iget-wide v6, p0, Lio/reactivex/Scheduler$Worker$PeriodicTask;->periodInNanoseconds:J
mul-long v4, v4, v6
add-long/2addr v2, v4
.local v2, "nextTick":J
goto :goto_48
.line 381
.end local v2 # "nextTick":J
:cond_38
:goto_38
iget-wide v2, p0, Lio/reactivex/Scheduler$Worker$PeriodicTask;->periodInNanoseconds:J
add-long v4, v0, v2
.line 386
.local v4, "nextTick":J
iget-wide v8, p0, Lio/reactivex/Scheduler$Worker$PeriodicTask;->count:J
add-long/2addr v8, v6
iput-wide v8, p0, Lio/reactivex/Scheduler$Worker$PeriodicTask;->count:J
mul-long v2, v2, v8
sub-long v2, v4, v2
iput-wide v2, p0, Lio/reactivex/Scheduler$Worker$PeriodicTask;->startInNanoseconds:J
move-wide v2, v4
.line 390
.end local v4 # "nextTick":J
.restart local v2 # "nextTick":J
:goto_48
iput-wide v0, p0, Lio/reactivex/Scheduler$Worker$PeriodicTask;->lastNowNanoseconds:J
.line 392
sub-long v4, v2, v0
.line 393
.local v4, "delay":J
iget-object v6, p0, Lio/reactivex/Scheduler$Worker$PeriodicTask;->sd:Lio/reactivex/internal/disposables/SequentialDisposable;
iget-object v7, p0, Lio/reactivex/Scheduler$Worker$PeriodicTask;->this$0:Lio/reactivex/Scheduler$Worker;
sget-object v8, Ljava/util/concurrent/TimeUnit;->NANOSECONDS:Ljava/util/concurrent/TimeUnit;
invoke-virtual {v7, p0, v4, v5, v8}, Lio/reactivex/Scheduler$Worker;->schedule(Ljava/lang/Runnable;JLjava/util/concurrent/TimeUnit;)Lio/reactivex/disposables/Disposable;
move-result-object v7
invoke-virtual {v6, v7}, Lio/reactivex/internal/disposables/SequentialDisposable;->replace(Lio/reactivex/disposables/Disposable;)Z
.line 395
.end local v0 # "nowNanoseconds":J
.end local v2 # "nextTick":J
.end local v4 # "delay":J
:cond_59
return-void
.end method