SchedulerPoolFactory.smali 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. .class public final Lio/reactivex/internal/schedulers/SchedulerPoolFactory;
  2. .super Ljava/lang/Object;
  3. .source "SchedulerPoolFactory.java"
  4. # static fields
  5. .field static final POOLS:Ljava/util/Map;
  6. .annotation system Ldalvik/annotation/Signature;
  7. value = {
  8. "Ljava/util/Map<",
  9. "Ljava/util/concurrent/ScheduledThreadPoolExecutor;",
  10. "Ljava/lang/Object;",
  11. ">;"
  12. }
  13. .end annotation
  14. .end field
  15. .field public static final PURGE_ENABLED:Z
  16. .field static final PURGE_ENABLED_KEY:Ljava/lang/String; = "rx2.purge-enabled"
  17. .field public static final PURGE_PERIOD_SECONDS:I
  18. .field static final PURGE_PERIOD_SECONDS_KEY:Ljava/lang/String; = "rx2.purge-period-seconds"
  19. .field static final PURGE_THREAD:Ljava/util/concurrent/atomic/AtomicReference;
  20. .annotation system Ldalvik/annotation/Signature;
  21. value = {
  22. "Ljava/util/concurrent/atomic/AtomicReference<",
  23. "Ljava/util/concurrent/ScheduledExecutorService;",
  24. ">;"
  25. }
  26. .end annotation
  27. .end field
  28. # direct methods
  29. .method static constructor <clinit>()V
  30. .locals 4
  31. .line 48
  32. new-instance v0, Ljava/util/concurrent/atomic/AtomicReference;
  33. invoke-direct {v0}, Ljava/util/concurrent/atomic/AtomicReference;-><init>()V
  34. sput-object v0, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->PURGE_THREAD:Ljava/util/concurrent/atomic/AtomicReference;
  35. .line 53
  36. new-instance v0, Ljava/util/concurrent/ConcurrentHashMap;
  37. invoke-direct {v0}, Ljava/util/concurrent/ConcurrentHashMap;-><init>()V
  38. sput-object v0, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->POOLS:Ljava/util/Map;
  39. .line 105
  40. invoke-static {}, Ljava/lang/System;->getProperties()Ljava/util/Properties;
  41. move-result-object v0
  42. const-string v1, "rx2.purge-enabled"
  43. .line 107
  44. invoke-virtual {v0, v1}, Ljava/util/Properties;->containsKey(Ljava/lang/Object;)Z
  45. move-result v2
  46. const/4 v3, 0x1
  47. if-eqz v2, :cond_0
  48. .line 108
  49. invoke-static {v1}, Ljava/lang/Boolean;->getBoolean(Ljava/lang/String;)Z
  50. move-result v1
  51. if-eqz v1, :cond_1
  52. const-string v2, "rx2.purge-period-seconds"
  53. .line 110
  54. invoke-virtual {v0, v2}, Ljava/util/Properties;->containsKey(Ljava/lang/Object;)Z
  55. move-result v0
  56. if-eqz v0, :cond_1
  57. .line 111
  58. invoke-static {v2, v3}, Ljava/lang/Integer;->getInteger(Ljava/lang/String;I)Ljava/lang/Integer;
  59. move-result-object v0
  60. invoke-virtual {v0}, Ljava/lang/Integer;->intValue()I
  61. move-result v3
  62. goto :goto_0
  63. :cond_0
  64. const/4 v1, 0x1
  65. .line 115
  66. :cond_1
  67. :goto_0
  68. sput-boolean v1, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->PURGE_ENABLED:Z
  69. .line 116
  70. sput v3, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->PURGE_PERIOD_SECONDS:I
  71. .line 118
  72. invoke-static {}, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->start()V
  73. return-void
  74. .end method
  75. .method private constructor <init>()V
  76. .locals 2
  77. .line 30
  78. invoke-direct {p0}, Ljava/lang/Object;-><init>()V
  79. .line 31
  80. new-instance v0, Ljava/lang/IllegalStateException;
  81. const-string v1, "No instances!"
  82. invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
  83. throw v0
  84. .end method
  85. .method public static create(Ljava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ScheduledExecutorService;
  86. .locals 2
  87. const/4 v0, 0x1
  88. .line 127
  89. invoke-static {v0, p0}, Ljava/util/concurrent/Executors;->newScheduledThreadPool(ILjava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ScheduledExecutorService;
  90. move-result-object p0
  91. .line 128
  92. instance-of v0, p0, Ljava/util/concurrent/ScheduledThreadPoolExecutor;
  93. if-eqz v0, :cond_0
  94. .line 129
  95. move-object v0, p0
  96. check-cast v0, Ljava/util/concurrent/ScheduledThreadPoolExecutor;
  97. .line 130
  98. sget-object v1, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->POOLS:Ljava/util/Map;
  99. invoke-interface {v1, v0, p0}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
  100. :cond_0
  101. return-object p0
  102. .end method
  103. .method public static shutdown()V
  104. .locals 1
  105. .line 97
  106. sget-object v0, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->PURGE_THREAD:Ljava/util/concurrent/atomic/AtomicReference;
  107. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  108. move-result-object v0
  109. check-cast v0, Ljava/util/concurrent/ScheduledExecutorService;
  110. invoke-interface {v0}, Ljava/util/concurrent/ScheduledExecutorService;->shutdownNow()Ljava/util/List;
  111. .line 98
  112. sget-object v0, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->POOLS:Ljava/util/Map;
  113. invoke-interface {v0}, Ljava/util/Map;->clear()V
  114. return-void
  115. .end method
  116. .method public static start()V
  117. .locals 11
  118. .line 61
  119. :goto_0
  120. sget-object v0, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->PURGE_THREAD:Ljava/util/concurrent/atomic/AtomicReference;
  121. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  122. move-result-object v0
  123. check-cast v0, Ljava/util/concurrent/ScheduledExecutorService;
  124. if-eqz v0, :cond_0
  125. .line 62
  126. invoke-interface {v0}, Ljava/util/concurrent/ScheduledExecutorService;->isShutdown()Z
  127. move-result v1
  128. if-nez v1, :cond_0
  129. return-void
  130. :cond_0
  131. const/4 v1, 0x1
  132. .line 65
  133. new-instance v2, Lio/reactivex/internal/schedulers/RxThreadFactory;
  134. const-string v3, "RxSchedulerPurge"
  135. invoke-direct {v2, v3}, Lio/reactivex/internal/schedulers/RxThreadFactory;-><init>(Ljava/lang/String;)V
  136. invoke-static {v1, v2}, Ljava/util/concurrent/Executors;->newScheduledThreadPool(ILjava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ScheduledExecutorService;
  137. move-result-object v4
  138. .line 66
  139. sget-object v1, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->PURGE_THREAD:Ljava/util/concurrent/atomic/AtomicReference;
  140. invoke-virtual {v1, v0, v4}, Ljava/util/concurrent/atomic/AtomicReference;->compareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z
  141. move-result v0
  142. if-eqz v0, :cond_1
  143. .line 68
  144. new-instance v5, Lio/reactivex/internal/schedulers/SchedulerPoolFactory$1;
  145. invoke-direct {v5}, Lio/reactivex/internal/schedulers/SchedulerPoolFactory$1;-><init>()V
  146. sget v0, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->PURGE_PERIOD_SECONDS:I
  147. int-to-long v6, v0
  148. int-to-long v8, v0
  149. sget-object v10, Ljava/util/concurrent/TimeUnit;->SECONDS:Ljava/util/concurrent/TimeUnit;
  150. invoke-interface/range {v4 .. v10}, Ljava/util/concurrent/ScheduledExecutorService;->scheduleAtFixedRate(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
  151. return-void
  152. .line 88
  153. :cond_1
  154. invoke-interface {v4}, Ljava/util/concurrent/ScheduledExecutorService;->shutdownNow()Ljava/util/List;
  155. goto :goto_0
  156. .end method