IoScheduler.smali 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. .class public final Lio/reactivex/internal/schedulers/IoScheduler;
  2. .super Lio/reactivex/Scheduler;
  3. .source "IoScheduler.java"
  4. # annotations
  5. .annotation system Ldalvik/annotation/MemberClasses;
  6. value = {
  7. Lio/reactivex/internal/schedulers/IoScheduler$ThreadWorker;,
  8. Lio/reactivex/internal/schedulers/IoScheduler$EventLoopWorker;,
  9. Lio/reactivex/internal/schedulers/IoScheduler$CachedWorkerPool;
  10. }
  11. .end annotation
  12. # static fields
  13. .field static final EVICTOR_THREAD_FACTORY:Lio/reactivex/internal/schedulers/RxThreadFactory;
  14. .field private static final EVICTOR_THREAD_NAME_PREFIX:Ljava/lang/String; = "RxCachedWorkerPoolEvictor"
  15. .field private static final KEEP_ALIVE_TIME:J = 0x3cL
  16. .field private static final KEEP_ALIVE_UNIT:Ljava/util/concurrent/TimeUnit;
  17. .field private static final KEY_IO_PRIORITY:Ljava/lang/String; = "rx2.io-priority"
  18. .field static final NONE:Lio/reactivex/internal/schedulers/IoScheduler$CachedWorkerPool;
  19. .field static final SHUTDOWN_THREAD_WORKER:Lio/reactivex/internal/schedulers/IoScheduler$ThreadWorker;
  20. .field static final WORKER_THREAD_FACTORY:Lio/reactivex/internal/schedulers/RxThreadFactory;
  21. .field private static final WORKER_THREAD_NAME_PREFIX:Ljava/lang/String; = "RxCachedThreadScheduler"
  22. # instance fields
  23. .field final pool:Ljava/util/concurrent/atomic/AtomicReference;
  24. .annotation system Ldalvik/annotation/Signature;
  25. value = {
  26. "Ljava/util/concurrent/atomic/AtomicReference<",
  27. "Lio/reactivex/internal/schedulers/IoScheduler$CachedWorkerPool;",
  28. ">;"
  29. }
  30. .end annotation
  31. .end field
  32. .field final threadFactory:Ljava/util/concurrent/ThreadFactory;
  33. # direct methods
  34. .method static constructor <clinit>()V
  35. .locals 5
  36. .line 37
  37. sget-object v0, Ljava/util/concurrent/TimeUnit;->SECONDS:Ljava/util/concurrent/TimeUnit;
  38. sput-object v0, Lio/reactivex/internal/schedulers/IoScheduler;->KEEP_ALIVE_UNIT:Ljava/util/concurrent/TimeUnit;
  39. .line 48
  40. new-instance v0, Lio/reactivex/internal/schedulers/IoScheduler$ThreadWorker;
  41. new-instance v1, Lio/reactivex/internal/schedulers/RxThreadFactory;
  42. const-string v2, "RxCachedThreadSchedulerShutdown"
  43. invoke-direct {v1, v2}, Lio/reactivex/internal/schedulers/RxThreadFactory;-><init>(Ljava/lang/String;)V
  44. invoke-direct {v0, v1}, Lio/reactivex/internal/schedulers/IoScheduler$ThreadWorker;-><init>(Ljava/util/concurrent/ThreadFactory;)V
  45. sput-object v0, Lio/reactivex/internal/schedulers/IoScheduler;->SHUTDOWN_THREAD_WORKER:Lio/reactivex/internal/schedulers/IoScheduler$ThreadWorker;
  46. .line 49
  47. sget-object v0, Lio/reactivex/internal/schedulers/IoScheduler;->SHUTDOWN_THREAD_WORKER:Lio/reactivex/internal/schedulers/IoScheduler$ThreadWorker;
  48. invoke-virtual {v0}, Lio/reactivex/internal/schedulers/IoScheduler$ThreadWorker;->dispose()V
  49. const-string v0, "rx2.io-priority"
  50. const/4 v1, 0x5
  51. .line 51
  52. invoke-static {v0, v1}, Ljava/lang/Integer;->getInteger(Ljava/lang/String;I)Ljava/lang/Integer;
  53. move-result-object v0
  54. invoke-virtual {v0}, Ljava/lang/Integer;->intValue()I
  55. move-result v0
  56. const/16 v1, 0xa
  57. invoke-static {v1, v0}, Ljava/lang/Math;->min(II)I
  58. move-result v0
  59. const/4 v1, 0x1
  60. invoke-static {v1, v0}, Ljava/lang/Math;->max(II)I
  61. move-result v0
  62. .line 54
  63. new-instance v1, Lio/reactivex/internal/schedulers/RxThreadFactory;
  64. const-string v2, "RxCachedThreadScheduler"
  65. invoke-direct {v1, v2, v0}, Lio/reactivex/internal/schedulers/RxThreadFactory;-><init>(Ljava/lang/String;I)V
  66. sput-object v1, Lio/reactivex/internal/schedulers/IoScheduler;->WORKER_THREAD_FACTORY:Lio/reactivex/internal/schedulers/RxThreadFactory;
  67. .line 56
  68. new-instance v1, Lio/reactivex/internal/schedulers/RxThreadFactory;
  69. const-string v2, "RxCachedWorkerPoolEvictor"
  70. invoke-direct {v1, v2, v0}, Lio/reactivex/internal/schedulers/RxThreadFactory;-><init>(Ljava/lang/String;I)V
  71. sput-object v1, Lio/reactivex/internal/schedulers/IoScheduler;->EVICTOR_THREAD_FACTORY:Lio/reactivex/internal/schedulers/RxThreadFactory;
  72. .line 58
  73. new-instance v0, Lio/reactivex/internal/schedulers/IoScheduler$CachedWorkerPool;
  74. sget-object v1, Lio/reactivex/internal/schedulers/IoScheduler;->WORKER_THREAD_FACTORY:Lio/reactivex/internal/schedulers/RxThreadFactory;
  75. const-wide/16 v2, 0x0
  76. const/4 v4, 0x0
  77. invoke-direct {v0, v2, v3, v4, v1}, Lio/reactivex/internal/schedulers/IoScheduler$CachedWorkerPool;-><init>(JLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/ThreadFactory;)V
  78. sput-object v0, Lio/reactivex/internal/schedulers/IoScheduler;->NONE:Lio/reactivex/internal/schedulers/IoScheduler$CachedWorkerPool;
  79. .line 59
  80. sget-object v0, Lio/reactivex/internal/schedulers/IoScheduler;->NONE:Lio/reactivex/internal/schedulers/IoScheduler$CachedWorkerPool;
  81. invoke-virtual {v0}, Lio/reactivex/internal/schedulers/IoScheduler$CachedWorkerPool;->shutdown()V
  82. return-void
  83. .end method
  84. .method public constructor <init>()V
  85. .locals 1
  86. .line 149
  87. sget-object v0, Lio/reactivex/internal/schedulers/IoScheduler;->WORKER_THREAD_FACTORY:Lio/reactivex/internal/schedulers/RxThreadFactory;
  88. invoke-direct {p0, v0}, Lio/reactivex/internal/schedulers/IoScheduler;-><init>(Ljava/util/concurrent/ThreadFactory;)V
  89. return-void
  90. .end method
  91. .method public constructor <init>(Ljava/util/concurrent/ThreadFactory;)V
  92. .locals 1
  93. .line 156
  94. invoke-direct {p0}, Lio/reactivex/Scheduler;-><init>()V
  95. .line 157
  96. iput-object p1, p0, Lio/reactivex/internal/schedulers/IoScheduler;->threadFactory:Ljava/util/concurrent/ThreadFactory;
  97. .line 158
  98. new-instance p1, Ljava/util/concurrent/atomic/AtomicReference;
  99. sget-object v0, Lio/reactivex/internal/schedulers/IoScheduler;->NONE:Lio/reactivex/internal/schedulers/IoScheduler$CachedWorkerPool;
  100. invoke-direct {p1, v0}, Ljava/util/concurrent/atomic/AtomicReference;-><init>(Ljava/lang/Object;)V
  101. iput-object p1, p0, Lio/reactivex/internal/schedulers/IoScheduler;->pool:Ljava/util/concurrent/atomic/AtomicReference;
  102. .line 159
  103. invoke-virtual {p0}, Lio/reactivex/internal/schedulers/IoScheduler;->start()V
  104. return-void
  105. .end method
  106. # virtual methods
  107. .method public createWorker()Lio/reactivex/Scheduler$Worker;
  108. .locals 2
  109. .line 185
  110. new-instance v0, Lio/reactivex/internal/schedulers/IoScheduler$EventLoopWorker;
  111. iget-object v1, p0, Lio/reactivex/internal/schedulers/IoScheduler;->pool:Ljava/util/concurrent/atomic/AtomicReference;
  112. invoke-virtual {v1}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  113. move-result-object v1
  114. check-cast v1, Lio/reactivex/internal/schedulers/IoScheduler$CachedWorkerPool;
  115. invoke-direct {v0, v1}, Lio/reactivex/internal/schedulers/IoScheduler$EventLoopWorker;-><init>(Lio/reactivex/internal/schedulers/IoScheduler$CachedWorkerPool;)V
  116. return-object v0
  117. .end method
  118. .method public shutdown()V
  119. .locals 3
  120. .line 172
  121. :cond_0
  122. iget-object v0, p0, Lio/reactivex/internal/schedulers/IoScheduler;->pool:Ljava/util/concurrent/atomic/AtomicReference;
  123. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  124. move-result-object v0
  125. check-cast v0, Lio/reactivex/internal/schedulers/IoScheduler$CachedWorkerPool;
  126. .line 173
  127. sget-object v1, Lio/reactivex/internal/schedulers/IoScheduler;->NONE:Lio/reactivex/internal/schedulers/IoScheduler$CachedWorkerPool;
  128. if-ne v0, v1, :cond_1
  129. return-void
  130. .line 176
  131. :cond_1
  132. iget-object v2, p0, Lio/reactivex/internal/schedulers/IoScheduler;->pool:Ljava/util/concurrent/atomic/AtomicReference;
  133. invoke-virtual {v2, v0, v1}, Ljava/util/concurrent/atomic/AtomicReference;->compareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z
  134. move-result v1
  135. if-eqz v1, :cond_0
  136. .line 177
  137. invoke-virtual {v0}, Lio/reactivex/internal/schedulers/IoScheduler$CachedWorkerPool;->shutdown()V
  138. return-void
  139. .end method
  140. .method public size()I
  141. .locals 1
  142. .line 189
  143. iget-object v0, p0, Lio/reactivex/internal/schedulers/IoScheduler;->pool:Ljava/util/concurrent/atomic/AtomicReference;
  144. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  145. move-result-object v0
  146. check-cast v0, Lio/reactivex/internal/schedulers/IoScheduler$CachedWorkerPool;
  147. iget-object v0, v0, Lio/reactivex/internal/schedulers/IoScheduler$CachedWorkerPool;->allWorkers:Lio/reactivex/disposables/CompositeDisposable;
  148. invoke-virtual {v0}, Lio/reactivex/disposables/CompositeDisposable;->size()I
  149. move-result v0
  150. return v0
  151. .end method
  152. .method public start()V
  153. .locals 5
  154. .line 164
  155. new-instance v0, Lio/reactivex/internal/schedulers/IoScheduler$CachedWorkerPool;
  156. sget-object v1, Lio/reactivex/internal/schedulers/IoScheduler;->KEEP_ALIVE_UNIT:Ljava/util/concurrent/TimeUnit;
  157. iget-object v2, p0, Lio/reactivex/internal/schedulers/IoScheduler;->threadFactory:Ljava/util/concurrent/ThreadFactory;
  158. const-wide/16 v3, 0x3c
  159. invoke-direct {v0, v3, v4, v1, v2}, Lio/reactivex/internal/schedulers/IoScheduler$CachedWorkerPool;-><init>(JLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/ThreadFactory;)V
  160. .line 165
  161. iget-object v1, p0, Lio/reactivex/internal/schedulers/IoScheduler;->pool:Ljava/util/concurrent/atomic/AtomicReference;
  162. sget-object v2, Lio/reactivex/internal/schedulers/IoScheduler;->NONE:Lio/reactivex/internal/schedulers/IoScheduler$CachedWorkerPool;
  163. invoke-virtual {v1, v2, v0}, Ljava/util/concurrent/atomic/AtomicReference;->compareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z
  164. move-result v1
  165. if-nez v1, :cond_0
  166. .line 166
  167. invoke-virtual {v0}, Lio/reactivex/internal/schedulers/IoScheduler$CachedWorkerPool;->shutdown()V
  168. :cond_0
  169. return-void
  170. .end method