SchedulerPoolFactory.smali
.class public final Lio/reactivex/internal/schedulers/SchedulerPoolFactory;
.super Ljava/lang/Object;
.source "SchedulerPoolFactory.java"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lio/reactivex/internal/schedulers/SchedulerPoolFactory$ScheduledTask;
}
.end annotation
# static fields
.field static final POOLS:Ljava/util/Map;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/Map<",
"Ljava/util/concurrent/ScheduledThreadPoolExecutor;",
"Ljava/lang/Object;",
">;"
}
.end annotation
.end field
.field public static final PURGE_ENABLED:Z
.field static final PURGE_ENABLED_KEY:Ljava/lang/String; = "rx2.purge-enabled"
.field public static final PURGE_PERIOD_SECONDS:I
.field static final PURGE_PERIOD_SECONDS_KEY:Ljava/lang/String; = "rx2.purge-period-seconds"
.field static final PURGE_THREAD:Ljava/util/concurrent/atomic/AtomicReference;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/concurrent/atomic/AtomicReference<",
"Ljava/util/concurrent/ScheduledExecutorService;",
">;"
}
.end annotation
.end field
# direct methods
.method static constructor <clinit>()V
.registers 5
.line 48
new-instance v0, Ljava/util/concurrent/atomic/AtomicReference;
invoke-direct {v0}, Ljava/util/concurrent/atomic/AtomicReference;-><init>()V
sput-object v0, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->PURGE_THREAD:Ljava/util/concurrent/atomic/AtomicReference;
.line 53
new-instance v0, Ljava/util/concurrent/ConcurrentHashMap;
invoke-direct {v0}, Ljava/util/concurrent/ConcurrentHashMap;-><init>()V
sput-object v0, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->POOLS:Ljava/util/Map;
.line 92
const/4 v0, 0x1
.line 93
.local v0, "purgeEnable":Z
const/4 v1, 0x1
.line 95
.local v1, "purgePeriod":I
invoke-static {}, Ljava/lang/System;->getProperties()Ljava/util/Properties;
move-result-object v2
.line 97
.local v2, "properties":Ljava/util/Properties;
const-string v3, "rx2.purge-enabled"
invoke-virtual {v2, v3}, Ljava/util/Properties;->containsKey(Ljava/lang/Object;)Z
move-result v4
if-eqz v4, :cond_20
.line 98
invoke-static {v3}, Ljava/lang/Boolean;->getBoolean(Ljava/lang/String;)Z
move-result v0
.line 101
:cond_20
if-eqz v0, :cond_32
const-string v3, "rx2.purge-period-seconds"
invoke-virtual {v2, v3}, Ljava/util/Properties;->containsKey(Ljava/lang/Object;)Z
move-result v4
if-eqz v4, :cond_32
.line 102
invoke-static {v3, v1}, Ljava/lang/Integer;->getInteger(Ljava/lang/String;I)Ljava/lang/Integer;
move-result-object v3
invoke-virtual {v3}, Ljava/lang/Integer;->intValue()I
move-result v1
.line 105
:cond_32
sput-boolean v0, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->PURGE_ENABLED:Z
.line 106
sput v1, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->PURGE_PERIOD_SECONDS:I
.line 108
invoke-static {}, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->start()V
.line 109
.end local v0 # "purgeEnable":Z
.end local v1 # "purgePeriod":I
.end local v2 # "properties":Ljava/util/Properties;
return-void
.end method
.method private constructor <init>()V
.registers 3
.line 30
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 31
new-instance v0, Ljava/lang/IllegalStateException;
const-string v1, "No instances!"
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method public static create(Ljava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ScheduledExecutorService;
.registers 4
.param p0, "factory" # Ljava/util/concurrent/ThreadFactory;
.line 117
const/4 v0, 0x1
invoke-static {v0, p0}, Ljava/util/concurrent/Executors;->newScheduledThreadPool(ILjava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ScheduledExecutorService;
move-result-object v0
.line 118
.local v0, "exec":Ljava/util/concurrent/ScheduledExecutorService;
sget-boolean v1, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->PURGE_ENABLED:Z
if-eqz v1, :cond_15
instance-of v1, v0, Ljava/util/concurrent/ScheduledThreadPoolExecutor;
if-eqz v1, :cond_15
.line 119
move-object v1, v0
check-cast v1, Ljava/util/concurrent/ScheduledThreadPoolExecutor;
.line 120
.local v1, "e":Ljava/util/concurrent/ScheduledThreadPoolExecutor;
sget-object v2, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->POOLS:Ljava/util/Map;
invoke-interface {v2, v1, v0}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 122
.end local v1 # "e":Ljava/util/concurrent/ScheduledThreadPoolExecutor;
:cond_15
return-object v0
.end method
.method public static shutdown()V
.registers 2
.line 84
sget-object v0, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->PURGE_THREAD:Ljava/util/concurrent/atomic/AtomicReference;
invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/util/concurrent/ScheduledExecutorService;
.line 85
.local v0, "exec":Ljava/util/concurrent/ScheduledExecutorService;
if-eqz v0, :cond_d
.line 86
invoke-interface {v0}, Ljava/util/concurrent/ScheduledExecutorService;->shutdownNow()Ljava/util/List;
.line 88
:cond_d
sget-object v1, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->POOLS:Ljava/util/Map;
invoke-interface {v1}, Ljava/util/Map;->clear()V
.line 89
return-void
.end method
.method public static start()V
.registers 11
.line 60
sget-boolean v0, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->PURGE_ENABLED:Z
if-nez v0, :cond_5
.line 61
return-void
.line 64
:cond_5
:goto_5
sget-object v0, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->PURGE_THREAD:Ljava/util/concurrent/atomic/AtomicReference;
invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/util/concurrent/ScheduledExecutorService;
.line 65
.local v0, "curr":Ljava/util/concurrent/ScheduledExecutorService;
if-eqz v0, :cond_16
invoke-interface {v0}, Ljava/util/concurrent/ScheduledExecutorService;->isShutdown()Z
move-result v1
if-nez v1, :cond_16
.line 66
return-void
.line 68
:cond_16
const/4 v1, 0x1
new-instance v2, Lio/reactivex/internal/schedulers/RxThreadFactory;
const-string v3, "RxSchedulerPurge"
invoke-direct {v2, v3}, Lio/reactivex/internal/schedulers/RxThreadFactory;-><init>(Ljava/lang/String;)V
invoke-static {v1, v2}, Ljava/util/concurrent/Executors;->newScheduledThreadPool(ILjava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ScheduledExecutorService;
move-result-object v1
.line 69
.local v1, "next":Ljava/util/concurrent/ScheduledExecutorService;
sget-object v2, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->PURGE_THREAD:Ljava/util/concurrent/atomic/AtomicReference;
invoke-virtual {v2, v0, v1}, Ljava/util/concurrent/atomic/AtomicReference;->compareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v2
if-eqz v2, :cond_3a
.line 71
new-instance v5, Lio/reactivex/internal/schedulers/SchedulerPoolFactory$ScheduledTask;
invoke-direct {v5}, Lio/reactivex/internal/schedulers/SchedulerPoolFactory$ScheduledTask;-><init>()V
sget v2, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->PURGE_PERIOD_SECONDS:I
int-to-long v6, v2
int-to-long v8, v2
sget-object v10, Ljava/util/concurrent/TimeUnit;->SECONDS:Ljava/util/concurrent/TimeUnit;
move-object v4, v1
invoke-interface/range {v4 .. v10}, Ljava/util/concurrent/ScheduledExecutorService;->scheduleAtFixedRate(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
.line 73
return-void
.line 75
:cond_3a
invoke-interface {v1}, Ljava/util/concurrent/ScheduledExecutorService;->shutdownNow()Ljava/util/List;
.line 77
.end local v0 # "curr":Ljava/util/concurrent/ScheduledExecutorService;
.end local v1 # "next":Ljava/util/concurrent/ScheduledExecutorService;
goto :goto_5
.end method