ExecutorScheduler.smali
.class public final Lio/reactivex/internal/schedulers/ExecutorScheduler;
.super Lio/reactivex/Scheduler;
.source "ExecutorScheduler.java"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lio/reactivex/internal/schedulers/ExecutorScheduler$DelayedDispose;,
Lio/reactivex/internal/schedulers/ExecutorScheduler$DelayedRunnable;,
Lio/reactivex/internal/schedulers/ExecutorScheduler$ExecutorWorker;
}
.end annotation
# static fields
.field static final HELPER:Lio/reactivex/Scheduler;
# instance fields
.field final executor:Ljava/util/concurrent/Executor;
# direct methods
.method static constructor <clinit>()V
.registers 1
.line 36
invoke-static {}, Lio/reactivex/schedulers/Schedulers;->single()Lio/reactivex/Scheduler;
move-result-object v0
sput-object v0, Lio/reactivex/internal/schedulers/ExecutorScheduler;->HELPER:Lio/reactivex/Scheduler;
return-void
.end method
.method public constructor <init>(Ljava/util/concurrent/Executor;)V
.registers 2
.param p1, "executor" # Ljava/util/concurrent/Executor;
.line 38
invoke-direct {p0}, Lio/reactivex/Scheduler;-><init>()V
.line 39
iput-object p1, p0, Lio/reactivex/internal/schedulers/ExecutorScheduler;->executor:Ljava/util/concurrent/Executor;
.line 40
return-void
.end method
# virtual methods
.method public createWorker()Lio/reactivex/Scheduler$Worker;
.registers 3
.line 45
new-instance v0, Lio/reactivex/internal/schedulers/ExecutorScheduler$ExecutorWorker;
iget-object v1, p0, Lio/reactivex/internal/schedulers/ExecutorScheduler;->executor:Ljava/util/concurrent/Executor;
invoke-direct {v0, v1}, Lio/reactivex/internal/schedulers/ExecutorScheduler$ExecutorWorker;-><init>(Ljava/util/concurrent/Executor;)V
return-object v0
.end method
.method public scheduleDirect(Ljava/lang/Runnable;)Lio/reactivex/disposables/Disposable;
.registers 5
.param p1, "run" # Ljava/lang/Runnable;
.line 51
invoke-static {p1}, Lio/reactivex/plugins/RxJavaPlugins;->onSchedule(Ljava/lang/Runnable;)Ljava/lang/Runnable;
move-result-object v0
.line 53
.local v0, "decoratedRun":Ljava/lang/Runnable;
:try_start_4
iget-object v1, p0, Lio/reactivex/internal/schedulers/ExecutorScheduler;->executor:Ljava/util/concurrent/Executor;
instance-of v1, v1, Ljava/util/concurrent/ExecutorService;
if-eqz v1, :cond_1b
.line 54
new-instance v1, Lio/reactivex/internal/schedulers/ScheduledDirectTask;
invoke-direct {v1, v0}, Lio/reactivex/internal/schedulers/ScheduledDirectTask;-><init>(Ljava/lang/Runnable;)V
.line 55
.local v1, "task":Lio/reactivex/internal/schedulers/ScheduledDirectTask;
iget-object v2, p0, Lio/reactivex/internal/schedulers/ExecutorScheduler;->executor:Ljava/util/concurrent/Executor;
check-cast v2, Ljava/util/concurrent/ExecutorService;
invoke-interface {v2, v1}, Ljava/util/concurrent/ExecutorService;->submit(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Future;
move-result-object v2
.line 56
.local v2, "f":Ljava/util/concurrent/Future;, "Ljava/util/concurrent/Future<*>;"
invoke-virtual {v1, v2}, Lio/reactivex/internal/schedulers/ScheduledDirectTask;->setFuture(Ljava/util/concurrent/Future;)V
.line 57
return-object v1
.line 60
.end local v1 # "task":Lio/reactivex/internal/schedulers/ScheduledDirectTask;
.end local v2 # "f":Ljava/util/concurrent/Future;, "Ljava/util/concurrent/Future<*>;"
:cond_1b
new-instance v1, Lio/reactivex/internal/schedulers/ExecutorScheduler$ExecutorWorker$BooleanRunnable;
invoke-direct {v1, v0}, Lio/reactivex/internal/schedulers/ExecutorScheduler$ExecutorWorker$BooleanRunnable;-><init>(Ljava/lang/Runnable;)V
.line 61
.local v1, "br":Lio/reactivex/internal/schedulers/ExecutorScheduler$ExecutorWorker$BooleanRunnable;
iget-object v2, p0, Lio/reactivex/internal/schedulers/ExecutorScheduler;->executor:Ljava/util/concurrent/Executor;
invoke-interface {v2, v1}, Ljava/util/concurrent/Executor;->execute(Ljava/lang/Runnable;)V
:try_end_25
.catch Ljava/util/concurrent/RejectedExecutionException; {:try_start_4 .. :try_end_25} :catch_26
.line 62
return-object v1
.line 63
.end local v1 # "br":Lio/reactivex/internal/schedulers/ExecutorScheduler$ExecutorWorker$BooleanRunnable;
:catch_26
move-exception v1
.line 64
.local v1, "ex":Ljava/util/concurrent/RejectedExecutionException;
invoke-static {v1}, Lio/reactivex/plugins/RxJavaPlugins;->onError(Ljava/lang/Throwable;)V
.line 65
sget-object v2, Lio/reactivex/internal/disposables/EmptyDisposable;->INSTANCE:Lio/reactivex/internal/disposables/EmptyDisposable;
return-object v2
.end method
.method public scheduleDirect(Ljava/lang/Runnable;JLjava/util/concurrent/TimeUnit;)Lio/reactivex/disposables/Disposable;
.registers 9
.param p1, "run" # Ljava/lang/Runnable;
.param p2, "delay" # J
.param p4, "unit" # Ljava/util/concurrent/TimeUnit;
.line 72
invoke-static {p1}, Lio/reactivex/plugins/RxJavaPlugins;->onSchedule(Ljava/lang/Runnable;)Ljava/lang/Runnable;
move-result-object v0
.line 73
.local v0, "decoratedRun":Ljava/lang/Runnable;
iget-object v1, p0, Lio/reactivex/internal/schedulers/ExecutorScheduler;->executor:Ljava/util/concurrent/Executor;
instance-of v1, v1, Ljava/util/concurrent/ScheduledExecutorService;
if-eqz v1, :cond_22
.line 75
:try_start_a
new-instance v1, Lio/reactivex/internal/schedulers/ScheduledDirectTask;
invoke-direct {v1, v0}, Lio/reactivex/internal/schedulers/ScheduledDirectTask;-><init>(Ljava/lang/Runnable;)V
.line 76
.local v1, "task":Lio/reactivex/internal/schedulers/ScheduledDirectTask;
iget-object v2, p0, Lio/reactivex/internal/schedulers/ExecutorScheduler;->executor:Ljava/util/concurrent/Executor;
check-cast v2, Ljava/util/concurrent/ScheduledExecutorService;
invoke-interface {v2, v1, p2, p3, p4}, Ljava/util/concurrent/ScheduledExecutorService;->schedule(Ljava/util/concurrent/Callable;JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
move-result-object v2
.line 77
.local v2, "f":Ljava/util/concurrent/Future;, "Ljava/util/concurrent/Future<*>;"
invoke-virtual {v1, v2}, Lio/reactivex/internal/schedulers/ScheduledDirectTask;->setFuture(Ljava/util/concurrent/Future;)V
:try_end_1a
.catch Ljava/util/concurrent/RejectedExecutionException; {:try_start_a .. :try_end_1a} :catch_1b
.line 78
return-object v1
.line 79
.end local v1 # "task":Lio/reactivex/internal/schedulers/ScheduledDirectTask;
.end local v2 # "f":Ljava/util/concurrent/Future;, "Ljava/util/concurrent/Future<*>;"
:catch_1b
move-exception v1
.line 80
.local v1, "ex":Ljava/util/concurrent/RejectedExecutionException;
invoke-static {v1}, Lio/reactivex/plugins/RxJavaPlugins;->onError(Ljava/lang/Throwable;)V
.line 81
sget-object v2, Lio/reactivex/internal/disposables/EmptyDisposable;->INSTANCE:Lio/reactivex/internal/disposables/EmptyDisposable;
return-object v2
.line 85
.end local v1 # "ex":Ljava/util/concurrent/RejectedExecutionException;
:cond_22
new-instance v1, Lio/reactivex/internal/schedulers/ExecutorScheduler$DelayedRunnable;
invoke-direct {v1, v0}, Lio/reactivex/internal/schedulers/ExecutorScheduler$DelayedRunnable;-><init>(Ljava/lang/Runnable;)V
.line 87
.local v1, "dr":Lio/reactivex/internal/schedulers/ExecutorScheduler$DelayedRunnable;
sget-object v2, Lio/reactivex/internal/schedulers/ExecutorScheduler;->HELPER:Lio/reactivex/Scheduler;
new-instance v3, Lio/reactivex/internal/schedulers/ExecutorScheduler$DelayedDispose;
invoke-direct {v3, p0, v1}, Lio/reactivex/internal/schedulers/ExecutorScheduler$DelayedDispose;-><init>(Lio/reactivex/internal/schedulers/ExecutorScheduler;Lio/reactivex/internal/schedulers/ExecutorScheduler$DelayedRunnable;)V
invoke-virtual {v2, v3, p2, p3, p4}, Lio/reactivex/Scheduler;->scheduleDirect(Ljava/lang/Runnable;JLjava/util/concurrent/TimeUnit;)Lio/reactivex/disposables/Disposable;
move-result-object v2
.line 89
.local v2, "delayed":Lio/reactivex/disposables/Disposable;
iget-object v3, v1, Lio/reactivex/internal/schedulers/ExecutorScheduler$DelayedRunnable;->timed:Lio/reactivex/internal/disposables/SequentialDisposable;
invoke-virtual {v3, v2}, Lio/reactivex/internal/disposables/SequentialDisposable;->replace(Lio/reactivex/disposables/Disposable;)Z
.line 91
return-object v1
.end method
.method public schedulePeriodicallyDirect(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Lio/reactivex/disposables/Disposable;
.registers 16
.param p1, "run" # Ljava/lang/Runnable;
.param p2, "initialDelay" # J
.param p4, "period" # J
.param p6, "unit" # Ljava/util/concurrent/TimeUnit;
.line 97
iget-object v0, p0, Lio/reactivex/internal/schedulers/ExecutorScheduler;->executor:Ljava/util/concurrent/Executor;
instance-of v0, v0, Ljava/util/concurrent/ScheduledExecutorService;
if-eqz v0, :cond_26
.line 98
invoke-static {p1}, Lio/reactivex/plugins/RxJavaPlugins;->onSchedule(Ljava/lang/Runnable;)Ljava/lang/Runnable;
move-result-object v0
.line 100
.local v0, "decoratedRun":Ljava/lang/Runnable;
:try_start_a
new-instance v1, Lio/reactivex/internal/schedulers/ScheduledDirectPeriodicTask;
invoke-direct {v1, v0}, Lio/reactivex/internal/schedulers/ScheduledDirectPeriodicTask;-><init>(Ljava/lang/Runnable;)V
.line 101
.local v1, "task":Lio/reactivex/internal/schedulers/ScheduledDirectPeriodicTask;
iget-object v2, p0, Lio/reactivex/internal/schedulers/ExecutorScheduler;->executor:Ljava/util/concurrent/Executor;
check-cast v2, Ljava/util/concurrent/ScheduledExecutorService;
move-object v3, v1
move-wide v4, p2
move-wide v6, p4
move-object v8, p6
invoke-interface/range {v2 .. v8}, Ljava/util/concurrent/ScheduledExecutorService;->scheduleAtFixedRate(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
move-result-object v2
.line 102
.local v2, "f":Ljava/util/concurrent/Future;, "Ljava/util/concurrent/Future<*>;"
invoke-virtual {v1, v2}, Lio/reactivex/internal/schedulers/ScheduledDirectPeriodicTask;->setFuture(Ljava/util/concurrent/Future;)V
:try_end_1e
.catch Ljava/util/concurrent/RejectedExecutionException; {:try_start_a .. :try_end_1e} :catch_1f
.line 103
return-object v1
.line 104
.end local v1 # "task":Lio/reactivex/internal/schedulers/ScheduledDirectPeriodicTask;
.end local v2 # "f":Ljava/util/concurrent/Future;, "Ljava/util/concurrent/Future<*>;"
:catch_1f
move-exception v1
.line 105
.local v1, "ex":Ljava/util/concurrent/RejectedExecutionException;
invoke-static {v1}, Lio/reactivex/plugins/RxJavaPlugins;->onError(Ljava/lang/Throwable;)V
.line 106
sget-object v2, Lio/reactivex/internal/disposables/EmptyDisposable;->INSTANCE:Lio/reactivex/internal/disposables/EmptyDisposable;
return-object v2
.line 109
.end local v0 # "decoratedRun":Ljava/lang/Runnable;
.end local v1 # "ex":Ljava/util/concurrent/RejectedExecutionException;
:cond_26
invoke-super/range {p0 .. p6}, Lio/reactivex/Scheduler;->schedulePeriodicallyDirect(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Lio/reactivex/disposables/Disposable;
move-result-object v0
return-object v0
.end method