SingleScheduler.smali 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368
  1. .class public final Lio/reactivex/internal/schedulers/SingleScheduler;
  2. .super Lio/reactivex/Scheduler;
  3. .source "SingleScheduler.java"
  4. # annotations
  5. .annotation system Ldalvik/annotation/MemberClasses;
  6. value = {
  7. Lio/reactivex/internal/schedulers/SingleScheduler$ScheduledWorker;
  8. }
  9. .end annotation
  10. # static fields
  11. .field private static final KEY_SINGLE_PRIORITY:Ljava/lang/String; = "rx2.single-priority"
  12. .field static final SHUTDOWN:Ljava/util/concurrent/ScheduledExecutorService;
  13. .field static final SINGLE_THREAD_FACTORY:Lio/reactivex/internal/schedulers/RxThreadFactory;
  14. .field private static final THREAD_NAME_PREFIX:Ljava/lang/String; = "RxSingleScheduler"
  15. # instance fields
  16. .field final executor:Ljava/util/concurrent/atomic/AtomicReference;
  17. .annotation system Ldalvik/annotation/Signature;
  18. value = {
  19. "Ljava/util/concurrent/atomic/AtomicReference<",
  20. "Ljava/util/concurrent/ScheduledExecutorService;",
  21. ">;"
  22. }
  23. .end annotation
  24. .end field
  25. .field final threadFactory:Ljava/util/concurrent/ThreadFactory;
  26. # direct methods
  27. .method static constructor <clinit>()V
  28. .locals 4
  29. const/4 v0, 0x0
  30. .line 41
  31. invoke-static {v0}, Ljava/util/concurrent/Executors;->newScheduledThreadPool(I)Ljava/util/concurrent/ScheduledExecutorService;
  32. move-result-object v0
  33. sput-object v0, Lio/reactivex/internal/schedulers/SingleScheduler;->SHUTDOWN:Ljava/util/concurrent/ScheduledExecutorService;
  34. .line 42
  35. sget-object v0, Lio/reactivex/internal/schedulers/SingleScheduler;->SHUTDOWN:Ljava/util/concurrent/ScheduledExecutorService;
  36. invoke-interface {v0}, Ljava/util/concurrent/ScheduledExecutorService;->shutdown()V
  37. const-string v0, "rx2.single-priority"
  38. const/4 v1, 0x5
  39. .line 44
  40. invoke-static {v0, v1}, Ljava/lang/Integer;->getInteger(Ljava/lang/String;I)Ljava/lang/Integer;
  41. move-result-object v0
  42. invoke-virtual {v0}, Ljava/lang/Integer;->intValue()I
  43. move-result v0
  44. const/16 v1, 0xa
  45. invoke-static {v1, v0}, Ljava/lang/Math;->min(II)I
  46. move-result v0
  47. const/4 v1, 0x1
  48. invoke-static {v1, v0}, Ljava/lang/Math;->max(II)I
  49. move-result v0
  50. .line 47
  51. new-instance v2, Lio/reactivex/internal/schedulers/RxThreadFactory;
  52. const-string v3, "RxSingleScheduler"
  53. invoke-direct {v2, v3, v0, v1}, Lio/reactivex/internal/schedulers/RxThreadFactory;-><init>(Ljava/lang/String;IZ)V
  54. sput-object v2, Lio/reactivex/internal/schedulers/SingleScheduler;->SINGLE_THREAD_FACTORY:Lio/reactivex/internal/schedulers/RxThreadFactory;
  55. return-void
  56. .end method
  57. .method public constructor <init>()V
  58. .locals 1
  59. .line 51
  60. sget-object v0, Lio/reactivex/internal/schedulers/SingleScheduler;->SINGLE_THREAD_FACTORY:Lio/reactivex/internal/schedulers/RxThreadFactory;
  61. invoke-direct {p0, v0}, Lio/reactivex/internal/schedulers/SingleScheduler;-><init>(Ljava/util/concurrent/ThreadFactory;)V
  62. return-void
  63. .end method
  64. .method public constructor <init>(Ljava/util/concurrent/ThreadFactory;)V
  65. .locals 1
  66. .line 58
  67. invoke-direct {p0}, Lio/reactivex/Scheduler;-><init>()V
  68. .line 30
  69. new-instance v0, Ljava/util/concurrent/atomic/AtomicReference;
  70. invoke-direct {v0}, Ljava/util/concurrent/atomic/AtomicReference;-><init>()V
  71. iput-object v0, p0, Lio/reactivex/internal/schedulers/SingleScheduler;->executor:Ljava/util/concurrent/atomic/AtomicReference;
  72. .line 59
  73. iput-object p1, p0, Lio/reactivex/internal/schedulers/SingleScheduler;->threadFactory:Ljava/util/concurrent/ThreadFactory;
  74. .line 60
  75. iget-object v0, p0, Lio/reactivex/internal/schedulers/SingleScheduler;->executor:Ljava/util/concurrent/atomic/AtomicReference;
  76. invoke-static {p1}, Lio/reactivex/internal/schedulers/SingleScheduler;->createExecutor(Ljava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ScheduledExecutorService;
  77. move-result-object p1
  78. invoke-virtual {v0, p1}, Ljava/util/concurrent/atomic/AtomicReference;->lazySet(Ljava/lang/Object;)V
  79. return-void
  80. .end method
  81. .method static createExecutor(Ljava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ScheduledExecutorService;
  82. .locals 0
  83. .line 64
  84. invoke-static {p0}, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->create(Ljava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ScheduledExecutorService;
  85. move-result-object p0
  86. return-object p0
  87. .end method
  88. # virtual methods
  89. .method public createWorker()Lio/reactivex/Scheduler$Worker;
  90. .locals 2
  91. .line 101
  92. new-instance v0, Lio/reactivex/internal/schedulers/SingleScheduler$ScheduledWorker;
  93. iget-object v1, p0, Lio/reactivex/internal/schedulers/SingleScheduler;->executor:Ljava/util/concurrent/atomic/AtomicReference;
  94. invoke-virtual {v1}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  95. move-result-object v1
  96. check-cast v1, Ljava/util/concurrent/ScheduledExecutorService;
  97. invoke-direct {v0, v1}, Lio/reactivex/internal/schedulers/SingleScheduler$ScheduledWorker;-><init>(Ljava/util/concurrent/ScheduledExecutorService;)V
  98. return-object v0
  99. .end method
  100. .method public scheduleDirect(Ljava/lang/Runnable;JLjava/util/concurrent/TimeUnit;)Lio/reactivex/disposables/Disposable;
  101. .locals 3
  102. .line 106
  103. invoke-static {p1}, Lio/reactivex/plugins/RxJavaPlugins;->onSchedule(Ljava/lang/Runnable;)Ljava/lang/Runnable;
  104. move-result-object p1
  105. const-wide/16 v0, 0x0
  106. cmp-long v2, p2, v0
  107. if-gtz v2, :cond_0
  108. .line 110
  109. :try_start_0
  110. iget-object p2, p0, Lio/reactivex/internal/schedulers/SingleScheduler;->executor:Ljava/util/concurrent/atomic/AtomicReference;
  111. invoke-virtual {p2}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  112. move-result-object p2
  113. check-cast p2, Ljava/util/concurrent/ScheduledExecutorService;
  114. invoke-interface {p2, p1}, Ljava/util/concurrent/ScheduledExecutorService;->submit(Ljava/lang/Runnable;)Ljava/util/concurrent/Future;
  115. move-result-object p1
  116. goto :goto_0
  117. .line 112
  118. :cond_0
  119. iget-object v0, p0, Lio/reactivex/internal/schedulers/SingleScheduler;->executor:Ljava/util/concurrent/atomic/AtomicReference;
  120. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  121. move-result-object v0
  122. check-cast v0, Ljava/util/concurrent/ScheduledExecutorService;
  123. invoke-interface {v0, p1, p2, p3, p4}, Ljava/util/concurrent/ScheduledExecutorService;->schedule(Ljava/lang/Runnable;JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
  124. move-result-object p1
  125. .line 114
  126. :goto_0
  127. invoke-static {p1}, Lio/reactivex/disposables/Disposables;->fromFuture(Ljava/util/concurrent/Future;)Lio/reactivex/disposables/Disposable;
  128. move-result-object p1
  129. :try_end_0
  130. .catch Ljava/util/concurrent/RejectedExecutionException; {:try_start_0 .. :try_end_0} :catch_0
  131. return-object p1
  132. :catch_0
  133. move-exception p1
  134. .line 116
  135. invoke-static {p1}, Lio/reactivex/plugins/RxJavaPlugins;->onError(Ljava/lang/Throwable;)V
  136. .line 117
  137. sget-object p1, Lio/reactivex/internal/disposables/EmptyDisposable;->INSTANCE:Lio/reactivex/internal/disposables/EmptyDisposable;
  138. return-object p1
  139. .end method
  140. .method public schedulePeriodicallyDirect(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Lio/reactivex/disposables/Disposable;
  141. .locals 7
  142. .line 123
  143. invoke-static {p1}, Lio/reactivex/plugins/RxJavaPlugins;->onSchedule(Ljava/lang/Runnable;)Ljava/lang/Runnable;
  144. move-result-object v1
  145. .line 125
  146. :try_start_0
  147. iget-object p1, p0, Lio/reactivex/internal/schedulers/SingleScheduler;->executor:Ljava/util/concurrent/atomic/AtomicReference;
  148. invoke-virtual {p1}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  149. move-result-object p1
  150. move-object v0, p1
  151. check-cast v0, Ljava/util/concurrent/ScheduledExecutorService;
  152. move-wide v2, p2
  153. move-wide v4, p4
  154. move-object v6, p6
  155. invoke-interface/range {v0 .. v6}, Ljava/util/concurrent/ScheduledExecutorService;->scheduleAtFixedRate(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
  156. move-result-object p1
  157. .line 126
  158. invoke-static {p1}, Lio/reactivex/disposables/Disposables;->fromFuture(Ljava/util/concurrent/Future;)Lio/reactivex/disposables/Disposable;
  159. move-result-object p1
  160. :try_end_0
  161. .catch Ljava/util/concurrent/RejectedExecutionException; {:try_start_0 .. :try_end_0} :catch_0
  162. return-object p1
  163. :catch_0
  164. move-exception p1
  165. .line 128
  166. invoke-static {p1}, Lio/reactivex/plugins/RxJavaPlugins;->onError(Ljava/lang/Throwable;)V
  167. .line 129
  168. sget-object p1, Lio/reactivex/internal/disposables/EmptyDisposable;->INSTANCE:Lio/reactivex/internal/disposables/EmptyDisposable;
  169. return-object p1
  170. .end method
  171. .method public shutdown()V
  172. .locals 2
  173. .line 90
  174. iget-object v0, p0, Lio/reactivex/internal/schedulers/SingleScheduler;->executor:Ljava/util/concurrent/atomic/AtomicReference;
  175. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  176. move-result-object v0
  177. check-cast v0, Ljava/util/concurrent/ScheduledExecutorService;
  178. .line 91
  179. sget-object v1, Lio/reactivex/internal/schedulers/SingleScheduler;->SHUTDOWN:Ljava/util/concurrent/ScheduledExecutorService;
  180. if-eq v0, v1, :cond_0
  181. .line 92
  182. iget-object v0, p0, Lio/reactivex/internal/schedulers/SingleScheduler;->executor:Ljava/util/concurrent/atomic/AtomicReference;
  183. invoke-virtual {v0, v1}, Ljava/util/concurrent/atomic/AtomicReference;->getAndSet(Ljava/lang/Object;)Ljava/lang/Object;
  184. move-result-object v0
  185. check-cast v0, Ljava/util/concurrent/ScheduledExecutorService;
  186. .line 93
  187. sget-object v1, Lio/reactivex/internal/schedulers/SingleScheduler;->SHUTDOWN:Ljava/util/concurrent/ScheduledExecutorService;
  188. if-eq v0, v1, :cond_0
  189. .line 94
  190. invoke-interface {v0}, Ljava/util/concurrent/ScheduledExecutorService;->shutdownNow()Ljava/util/List;
  191. :cond_0
  192. return-void
  193. .end method
  194. .method public start()V
  195. .locals 3
  196. const/4 v0, 0x0
  197. .line 71
  198. :cond_0
  199. iget-object v1, p0, Lio/reactivex/internal/schedulers/SingleScheduler;->executor:Ljava/util/concurrent/atomic/AtomicReference;
  200. invoke-virtual {v1}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  201. move-result-object v1
  202. check-cast v1, Ljava/util/concurrent/ScheduledExecutorService;
  203. .line 72
  204. sget-object v2, Lio/reactivex/internal/schedulers/SingleScheduler;->SHUTDOWN:Ljava/util/concurrent/ScheduledExecutorService;
  205. if-eq v1, v2, :cond_2
  206. if-eqz v0, :cond_1
  207. .line 74
  208. invoke-interface {v0}, Ljava/util/concurrent/ScheduledExecutorService;->shutdown()V
  209. :cond_1
  210. return-void
  211. :cond_2
  212. if-nez v0, :cond_3
  213. .line 79
  214. iget-object v0, p0, Lio/reactivex/internal/schedulers/SingleScheduler;->threadFactory:Ljava/util/concurrent/ThreadFactory;
  215. invoke-static {v0}, Lio/reactivex/internal/schedulers/SingleScheduler;->createExecutor(Ljava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ScheduledExecutorService;
  216. move-result-object v0
  217. .line 81
  218. :cond_3
  219. iget-object v2, p0, Lio/reactivex/internal/schedulers/SingleScheduler;->executor:Ljava/util/concurrent/atomic/AtomicReference;
  220. invoke-virtual {v2, v1, v0}, Ljava/util/concurrent/atomic/AtomicReference;->compareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z
  221. move-result v1
  222. if-eqz v1, :cond_0
  223. return-void
  224. .end method