.class final Lio/reactivex/internal/schedulers/TrampolineScheduler$TrampolineWorker; .super Lio/reactivex/Scheduler$Worker; .source "TrampolineScheduler.java" # interfaces .implements Lio/reactivex/disposables/Disposable; # annotations .annotation system Ldalvik/annotation/EnclosingClass; value = Lio/reactivex/internal/schedulers/TrampolineScheduler; .end annotation .annotation system Ldalvik/annotation/InnerClass; accessFlags = 0x18 name = "TrampolineWorker" .end annotation # instance fields .field final counter:Ljava/util/concurrent/atomic/AtomicInteger; .field volatile disposed:Z .field final queue:Ljava/util/concurrent/PriorityBlockingQueue; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/concurrent/PriorityBlockingQueue<", "Lio/reactivex/internal/schedulers/TrampolineScheduler$TimedRunnable;", ">;" } .end annotation .end field .field private final wip:Ljava/util/concurrent/atomic/AtomicInteger; # direct methods .method constructor ()V .locals 1 .line 65 invoke-direct {p0}, Lio/reactivex/Scheduler$Worker;->()V .line 66 new-instance v0, Ljava/util/concurrent/PriorityBlockingQueue; invoke-direct {v0}, Ljava/util/concurrent/PriorityBlockingQueue;->()V iput-object v0, p0, Lio/reactivex/internal/schedulers/TrampolineScheduler$TrampolineWorker;->queue:Ljava/util/concurrent/PriorityBlockingQueue; .line 68 new-instance v0, Ljava/util/concurrent/atomic/AtomicInteger; invoke-direct {v0}, Ljava/util/concurrent/atomic/AtomicInteger;->()V iput-object v0, p0, Lio/reactivex/internal/schedulers/TrampolineScheduler$TrampolineWorker;->wip:Ljava/util/concurrent/atomic/AtomicInteger; .line 70 new-instance v0, Ljava/util/concurrent/atomic/AtomicInteger; invoke-direct {v0}, Ljava/util/concurrent/atomic/AtomicInteger;->()V iput-object v0, p0, Lio/reactivex/internal/schedulers/TrampolineScheduler$TrampolineWorker;->counter:Ljava/util/concurrent/atomic/AtomicInteger; return-void .end method # virtual methods .method public dispose()V .locals 1 const/4 v0, 0x1 .line 126 iput-boolean v0, p0, Lio/reactivex/internal/schedulers/TrampolineScheduler$TrampolineWorker;->disposed:Z return-void .end method .method enqueue(Ljava/lang/Runnable;J)Lio/reactivex/disposables/Disposable; .locals 1 .line 87 iget-boolean v0, p0, Lio/reactivex/internal/schedulers/TrampolineScheduler$TrampolineWorker;->disposed:Z if-eqz v0, :cond_0 .line 88 sget-object p1, Lio/reactivex/internal/disposables/EmptyDisposable;->INSTANCE:Lio/reactivex/internal/disposables/EmptyDisposable; return-object p1 .line 90 :cond_0 new-instance v0, Lio/reactivex/internal/schedulers/TrampolineScheduler$TimedRunnable; invoke-static {p2, p3}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object p2 iget-object p3, p0, Lio/reactivex/internal/schedulers/TrampolineScheduler$TrampolineWorker;->counter:Ljava/util/concurrent/atomic/AtomicInteger; invoke-virtual {p3}, Ljava/util/concurrent/atomic/AtomicInteger;->incrementAndGet()I move-result p3 invoke-direct {v0, p1, p2, p3}, Lio/reactivex/internal/schedulers/TrampolineScheduler$TimedRunnable;->(Ljava/lang/Runnable;Ljava/lang/Long;I)V .line 91 iget-object p1, p0, Lio/reactivex/internal/schedulers/TrampolineScheduler$TrampolineWorker;->queue:Ljava/util/concurrent/PriorityBlockingQueue; invoke-virtual {p1, v0}, Ljava/util/concurrent/PriorityBlockingQueue;->add(Ljava/lang/Object;)Z .line 93 iget-object p1, p0, Lio/reactivex/internal/schedulers/TrampolineScheduler$TrampolineWorker;->wip:Ljava/util/concurrent/atomic/AtomicInteger; invoke-virtual {p1}, Ljava/util/concurrent/atomic/AtomicInteger;->getAndIncrement()I move-result p1 if-nez p1, :cond_3 const/4 p1, 0x1 .line 97 :cond_1 :goto_0 iget-object p2, p0, Lio/reactivex/internal/schedulers/TrampolineScheduler$TrampolineWorker;->queue:Ljava/util/concurrent/PriorityBlockingQueue; invoke-virtual {p2}, Ljava/util/concurrent/PriorityBlockingQueue;->poll()Ljava/lang/Object; move-result-object p2 check-cast p2, Lio/reactivex/internal/schedulers/TrampolineScheduler$TimedRunnable; if-nez p2, :cond_2 .line 105 iget-object p2, p0, Lio/reactivex/internal/schedulers/TrampolineScheduler$TrampolineWorker;->wip:Ljava/util/concurrent/atomic/AtomicInteger; neg-int p1, p1 invoke-virtual {p2, p1}, Ljava/util/concurrent/atomic/AtomicInteger;->addAndGet(I)I move-result p1 if-nez p1, :cond_1 .line 111 sget-object p1, Lio/reactivex/internal/disposables/EmptyDisposable;->INSTANCE:Lio/reactivex/internal/disposables/EmptyDisposable; return-object p1 .line 101 :cond_2 iget-boolean p3, p2, Lio/reactivex/internal/schedulers/TrampolineScheduler$TimedRunnable;->disposed:Z if-nez p3, :cond_1 .line 102 iget-object p2, p2, Lio/reactivex/internal/schedulers/TrampolineScheduler$TimedRunnable;->run:Ljava/lang/Runnable; invoke-interface {p2}, Ljava/lang/Runnable;->run()V goto :goto_0 .line 114 :cond_3 new-instance p1, Lio/reactivex/internal/schedulers/TrampolineScheduler$TrampolineWorker$1; invoke-direct {p1, p0, v0}, Lio/reactivex/internal/schedulers/TrampolineScheduler$TrampolineWorker$1;->(Lio/reactivex/internal/schedulers/TrampolineScheduler$TrampolineWorker;Lio/reactivex/internal/schedulers/TrampolineScheduler$TimedRunnable;)V invoke-static {p1}, Lio/reactivex/disposables/Disposables;->fromRunnable(Ljava/lang/Runnable;)Lio/reactivex/disposables/Disposable; move-result-object p1 return-object p1 .end method .method public isDisposed()Z .locals 1 .line 131 iget-boolean v0, p0, Lio/reactivex/internal/schedulers/TrampolineScheduler$TrampolineWorker;->disposed:Z return v0 .end method .method public schedule(Ljava/lang/Runnable;)Lio/reactivex/disposables/Disposable; .locals 2 .line 76 sget-object v0, Ljava/util/concurrent/TimeUnit;->MILLISECONDS:Ljava/util/concurrent/TimeUnit; invoke-virtual {p0, v0}, Lio/reactivex/internal/schedulers/TrampolineScheduler$TrampolineWorker;->now(Ljava/util/concurrent/TimeUnit;)J move-result-wide v0 invoke-virtual {p0, p1, v0, v1}, Lio/reactivex/internal/schedulers/TrampolineScheduler$TrampolineWorker;->enqueue(Ljava/lang/Runnable;J)Lio/reactivex/disposables/Disposable; move-result-object p1 return-object p1 .end method .method public schedule(Ljava/lang/Runnable;JLjava/util/concurrent/TimeUnit;)Lio/reactivex/disposables/Disposable; .locals 2 .line 81 sget-object v0, Ljava/util/concurrent/TimeUnit;->MILLISECONDS:Ljava/util/concurrent/TimeUnit; invoke-virtual {p0, v0}, Lio/reactivex/internal/schedulers/TrampolineScheduler$TrampolineWorker;->now(Ljava/util/concurrent/TimeUnit;)J move-result-wide v0 invoke-virtual {p4, p2, p3}, Ljava/util/concurrent/TimeUnit;->toMillis(J)J move-result-wide p2 add-long/2addr v0, p2 .line 83 new-instance p2, Lio/reactivex/internal/schedulers/TrampolineScheduler$SleepingRunnable; invoke-direct {p2, p1, p0, v0, v1}, Lio/reactivex/internal/schedulers/TrampolineScheduler$SleepingRunnable;->(Ljava/lang/Runnable;Lio/reactivex/internal/schedulers/TrampolineScheduler$TrampolineWorker;J)V invoke-virtual {p0, p2, v0, v1}, Lio/reactivex/internal/schedulers/TrampolineScheduler$TrampolineWorker;->enqueue(Ljava/lang/Runnable;J)Lio/reactivex/disposables/Disposable; move-result-object p1 return-object p1 .end method