ExecutorScheduler.smali 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. .class public final Lio/reactivex/internal/schedulers/ExecutorScheduler;
  2. .super Lio/reactivex/Scheduler;
  3. .source "ExecutorScheduler.java"
  4. # annotations
  5. .annotation system Ldalvik/annotation/MemberClasses;
  6. value = {
  7. Lio/reactivex/internal/schedulers/ExecutorScheduler$DelayedRunnable;,
  8. Lio/reactivex/internal/schedulers/ExecutorScheduler$ExecutorWorker;
  9. }
  10. .end annotation
  11. # static fields
  12. .field static final HELPER:Lio/reactivex/Scheduler;
  13. # instance fields
  14. .field final executor:Ljava/util/concurrent/Executor;
  15. # direct methods
  16. .method static constructor <clinit>()V
  17. .locals 1
  18. .line 34
  19. invoke-static {}, Lio/reactivex/schedulers/Schedulers;->single()Lio/reactivex/Scheduler;
  20. move-result-object v0
  21. sput-object v0, Lio/reactivex/internal/schedulers/ExecutorScheduler;->HELPER:Lio/reactivex/Scheduler;
  22. return-void
  23. .end method
  24. .method public constructor <init>(Ljava/util/concurrent/Executor;)V
  25. .locals 0
  26. .line 36
  27. invoke-direct {p0}, Lio/reactivex/Scheduler;-><init>()V
  28. .line 37
  29. iput-object p1, p0, Lio/reactivex/internal/schedulers/ExecutorScheduler;->executor:Ljava/util/concurrent/Executor;
  30. return-void
  31. .end method
  32. # virtual methods
  33. .method public createWorker()Lio/reactivex/Scheduler$Worker;
  34. .locals 2
  35. .line 42
  36. new-instance v0, Lio/reactivex/internal/schedulers/ExecutorScheduler$ExecutorWorker;
  37. iget-object v1, p0, Lio/reactivex/internal/schedulers/ExecutorScheduler;->executor:Ljava/util/concurrent/Executor;
  38. invoke-direct {v0, v1}, Lio/reactivex/internal/schedulers/ExecutorScheduler$ExecutorWorker;-><init>(Ljava/util/concurrent/Executor;)V
  39. return-object v0
  40. .end method
  41. .method public scheduleDirect(Ljava/lang/Runnable;)Lio/reactivex/disposables/Disposable;
  42. .locals 1
  43. .line 47
  44. invoke-static {p1}, Lio/reactivex/plugins/RxJavaPlugins;->onSchedule(Ljava/lang/Runnable;)Ljava/lang/Runnable;
  45. move-result-object p1
  46. .line 49
  47. :try_start_0
  48. iget-object v0, p0, Lio/reactivex/internal/schedulers/ExecutorScheduler;->executor:Ljava/util/concurrent/Executor;
  49. instance-of v0, v0, Ljava/util/concurrent/ExecutorService;
  50. if-eqz v0, :cond_0
  51. .line 50
  52. iget-object v0, p0, Lio/reactivex/internal/schedulers/ExecutorScheduler;->executor:Ljava/util/concurrent/Executor;
  53. check-cast v0, Ljava/util/concurrent/ExecutorService;
  54. invoke-interface {v0, p1}, Ljava/util/concurrent/ExecutorService;->submit(Ljava/lang/Runnable;)Ljava/util/concurrent/Future;
  55. move-result-object p1
  56. .line 51
  57. invoke-static {p1}, Lio/reactivex/disposables/Disposables;->fromFuture(Ljava/util/concurrent/Future;)Lio/reactivex/disposables/Disposable;
  58. move-result-object p1
  59. return-object p1
  60. .line 54
  61. :cond_0
  62. new-instance v0, Lio/reactivex/internal/schedulers/ExecutorScheduler$ExecutorWorker$BooleanRunnable;
  63. invoke-direct {v0, p1}, Lio/reactivex/internal/schedulers/ExecutorScheduler$ExecutorWorker$BooleanRunnable;-><init>(Ljava/lang/Runnable;)V
  64. .line 55
  65. iget-object p1, p0, Lio/reactivex/internal/schedulers/ExecutorScheduler;->executor:Ljava/util/concurrent/Executor;
  66. invoke-interface {p1, v0}, Ljava/util/concurrent/Executor;->execute(Ljava/lang/Runnable;)V
  67. :try_end_0
  68. .catch Ljava/util/concurrent/RejectedExecutionException; {:try_start_0 .. :try_end_0} :catch_0
  69. return-object v0
  70. :catch_0
  71. move-exception p1
  72. .line 58
  73. invoke-static {p1}, Lio/reactivex/plugins/RxJavaPlugins;->onError(Ljava/lang/Throwable;)V
  74. .line 59
  75. sget-object p1, Lio/reactivex/internal/disposables/EmptyDisposable;->INSTANCE:Lio/reactivex/internal/disposables/EmptyDisposable;
  76. return-object p1
  77. .end method
  78. .method public scheduleDirect(Ljava/lang/Runnable;JLjava/util/concurrent/TimeUnit;)Lio/reactivex/disposables/Disposable;
  79. .locals 2
  80. .line 65
  81. invoke-static {p1}, Lio/reactivex/plugins/RxJavaPlugins;->onSchedule(Ljava/lang/Runnable;)Ljava/lang/Runnable;
  82. move-result-object p1
  83. .line 66
  84. iget-object v0, p0, Lio/reactivex/internal/schedulers/ExecutorScheduler;->executor:Ljava/util/concurrent/Executor;
  85. instance-of v1, v0, Ljava/util/concurrent/ScheduledExecutorService;
  86. if-eqz v1, :cond_0
  87. .line 68
  88. :try_start_0
  89. check-cast v0, Ljava/util/concurrent/ScheduledExecutorService;
  90. invoke-interface {v0, p1, p2, p3, p4}, Ljava/util/concurrent/ScheduledExecutorService;->schedule(Ljava/lang/Runnable;JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
  91. move-result-object p1
  92. .line 69
  93. invoke-static {p1}, Lio/reactivex/disposables/Disposables;->fromFuture(Ljava/util/concurrent/Future;)Lio/reactivex/disposables/Disposable;
  94. move-result-object p1
  95. :try_end_0
  96. .catch Ljava/util/concurrent/RejectedExecutionException; {:try_start_0 .. :try_end_0} :catch_0
  97. return-object p1
  98. :catch_0
  99. move-exception p1
  100. .line 71
  101. invoke-static {p1}, Lio/reactivex/plugins/RxJavaPlugins;->onError(Ljava/lang/Throwable;)V
  102. .line 72
  103. sget-object p1, Lio/reactivex/internal/disposables/EmptyDisposable;->INSTANCE:Lio/reactivex/internal/disposables/EmptyDisposable;
  104. return-object p1
  105. .line 76
  106. :cond_0
  107. new-instance v0, Lio/reactivex/internal/schedulers/ExecutorScheduler$DelayedRunnable;
  108. invoke-direct {v0, p1}, Lio/reactivex/internal/schedulers/ExecutorScheduler$DelayedRunnable;-><init>(Ljava/lang/Runnable;)V
  109. .line 78
  110. sget-object p1, Lio/reactivex/internal/schedulers/ExecutorScheduler;->HELPER:Lio/reactivex/Scheduler;
  111. new-instance v1, Lio/reactivex/internal/schedulers/ExecutorScheduler$1;
  112. invoke-direct {v1, p0, v0}, Lio/reactivex/internal/schedulers/ExecutorScheduler$1;-><init>(Lio/reactivex/internal/schedulers/ExecutorScheduler;Lio/reactivex/internal/schedulers/ExecutorScheduler$DelayedRunnable;)V
  113. invoke-virtual {p1, v1, p2, p3, p4}, Lio/reactivex/Scheduler;->scheduleDirect(Ljava/lang/Runnable;JLjava/util/concurrent/TimeUnit;)Lio/reactivex/disposables/Disposable;
  114. move-result-object p1
  115. .line 85
  116. iget-object p2, v0, Lio/reactivex/internal/schedulers/ExecutorScheduler$DelayedRunnable;->timed:Lio/reactivex/internal/disposables/SequentialDisposable;
  117. invoke-virtual {p2, p1}, Lio/reactivex/internal/disposables/SequentialDisposable;->replace(Lio/reactivex/disposables/Disposable;)Z
  118. return-object v0
  119. .end method
  120. .method public schedulePeriodicallyDirect(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Lio/reactivex/disposables/Disposable;
  121. .locals 8
  122. .line 92
  123. iget-object v0, p0, Lio/reactivex/internal/schedulers/ExecutorScheduler;->executor:Ljava/util/concurrent/Executor;
  124. instance-of v0, v0, Ljava/util/concurrent/ScheduledExecutorService;
  125. if-eqz v0, :cond_0
  126. .line 93
  127. invoke-static {p1}, Lio/reactivex/plugins/RxJavaPlugins;->onSchedule(Ljava/lang/Runnable;)Ljava/lang/Runnable;
  128. move-result-object v2
  129. .line 95
  130. :try_start_0
  131. iget-object p1, p0, Lio/reactivex/internal/schedulers/ExecutorScheduler;->executor:Ljava/util/concurrent/Executor;
  132. move-object v1, p1
  133. check-cast v1, Ljava/util/concurrent/ScheduledExecutorService;
  134. move-wide v3, p2
  135. move-wide v5, p4
  136. move-object v7, p6
  137. invoke-interface/range {v1 .. v7}, Ljava/util/concurrent/ScheduledExecutorService;->scheduleAtFixedRate(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
  138. move-result-object p1
  139. .line 96
  140. invoke-static {p1}, Lio/reactivex/disposables/Disposables;->fromFuture(Ljava/util/concurrent/Future;)Lio/reactivex/disposables/Disposable;
  141. move-result-object p1
  142. :try_end_0
  143. .catch Ljava/util/concurrent/RejectedExecutionException; {:try_start_0 .. :try_end_0} :catch_0
  144. return-object p1
  145. :catch_0
  146. move-exception p1
  147. .line 98
  148. invoke-static {p1}, Lio/reactivex/plugins/RxJavaPlugins;->onError(Ljava/lang/Throwable;)V
  149. .line 99
  150. sget-object p1, Lio/reactivex/internal/disposables/EmptyDisposable;->INSTANCE:Lio/reactivex/internal/disposables/EmptyDisposable;
  151. return-object p1
  152. .line 102
  153. :cond_0
  154. invoke-super/range {p0 .. p6}, Lio/reactivex/Scheduler;->schedulePeriodicallyDirect(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Lio/reactivex/disposables/Disposable;
  155. move-result-object p1
  156. return-object p1
  157. .end method