GlideExecutor.smali
.class public final Lcom/bumptech/glide/load/engine/executor/GlideExecutor;
.super Ljava/util/concurrent/ThreadPoolExecutor;
.source "GlideExecutor.java"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/bumptech/glide/load/engine/executor/GlideExecutor$DefaultThreadFactory;,
Lcom/bumptech/glide/load/engine/executor/GlideExecutor$UncaughtThrowableStrategy;
}
.end annotation
# static fields
.field private static final CPU_LOCATION:Ljava/lang/String; = "/sys/devices/system/cpu/"
.field private static final CPU_NAME_REGEX:Ljava/lang/String; = "cpu[0-9]+"
.field public static final DEFAULT_DISK_CACHE_EXECUTOR_NAME:Ljava/lang/String; = "disk-cache"
.field public static final DEFAULT_DISK_CACHE_EXECUTOR_THREADS:I = 0x1
.field public static final DEFAULT_SOURCE_EXECUTOR_NAME:Ljava/lang/String; = "source"
.field private static final MAXIMUM_AUTOMATIC_THREAD_COUNT:I = 0x4
.field private static final SOURCE_UNLIMITED_EXECUTOR_KEEP_ALIVE_TIME_MS:J
.field private static final SOURCE_UNLIMITED_EXECUTOR_NAME:Ljava/lang/String; = "source-unlimited"
.field private static final TAG:Ljava/lang/String; = "GlideExecutor"
# instance fields
.field private final executeSynchronously:Z
# direct methods
.method static constructor <clinit>()V
.registers 3
.line 57
sget-object v0, Ljava/util/concurrent/TimeUnit;->SECONDS:Ljava/util/concurrent/TimeUnit;
const-wide/16 v1, 0xa
.line 58
invoke-virtual {v0, v1, v2}, Ljava/util/concurrent/TimeUnit;->toMillis(J)J
move-result-wide v0
sput-wide v0, Lcom/bumptech/glide/load/engine/executor/GlideExecutor;->SOURCE_UNLIMITED_EXECUTOR_KEEP_ALIVE_TIME_MS:J
return-void
.end method
.method constructor <init>(IIJLjava/lang/String;Lcom/bumptech/glide/load/engine/executor/GlideExecutor$UncaughtThrowableStrategy;ZZ)V
.registers 19
.line 166
new-instance v9, Ljava/util/concurrent/PriorityBlockingQueue;
invoke-direct {v9}, Ljava/util/concurrent/PriorityBlockingQueue;-><init>()V
move-object v0, p0
move v1, p1
move v2, p2
move-wide v3, p3
move-object v5, p5
move-object/from16 v6, p6
move/from16 v7, p7
move/from16 v8, p8
invoke-direct/range {v0 .. v9}, Lcom/bumptech/glide/load/engine/executor/GlideExecutor;-><init>(IIJLjava/lang/String;Lcom/bumptech/glide/load/engine/executor/GlideExecutor$UncaughtThrowableStrategy;ZZLjava/util/concurrent/BlockingQueue;)V
return-void
.end method
.method constructor <init>(IIJLjava/lang/String;Lcom/bumptech/glide/load/engine/executor/GlideExecutor$UncaughtThrowableStrategy;ZZLjava/util/concurrent/BlockingQueue;)V
.registers 18
.annotation system Ldalvik/annotation/Signature;
value = {
"(IIJ",
"Ljava/lang/String;",
"Lcom/bumptech/glide/load/engine/executor/GlideExecutor$UncaughtThrowableStrategy;",
"ZZ",
"Ljava/util/concurrent/BlockingQueue<",
"Ljava/lang/Runnable;",
">;)V"
}
.end annotation
.line 180
sget-object v5, Ljava/util/concurrent/TimeUnit;->MILLISECONDS:Ljava/util/concurrent/TimeUnit;
new-instance v7, Lcom/bumptech/glide/load/engine/executor/GlideExecutor$DefaultThreadFactory;
move-object v0, p5
move-object v1, p6
move v2, p7
invoke-direct {v7, p5, p6, p7}, Lcom/bumptech/glide/load/engine/executor/GlideExecutor$DefaultThreadFactory;-><init>(Ljava/lang/String;Lcom/bumptech/glide/load/engine/executor/GlideExecutor$UncaughtThrowableStrategy;Z)V
move-object v0, p0
move v1, p1
move v2, p2
move-wide v3, p3
move-object/from16 v6, p9
invoke-direct/range {v0 .. v7}, Ljava/util/concurrent/ThreadPoolExecutor;-><init>(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/ThreadFactory;)V
move/from16 v1, p8
.line 187
iput-boolean v1, v0, Lcom/bumptech/glide/load/engine/executor/GlideExecutor;->executeSynchronously:Z
return-void
.end method
.method constructor <init>(ILjava/lang/String;Lcom/bumptech/glide/load/engine/executor/GlideExecutor$UncaughtThrowableStrategy;ZZ)V
.registers 15
const-wide/16 v3, 0x0
move-object v0, p0
move v1, p1
move v2, p1
move-object v5, p2
move-object v6, p3
move v7, p4
move v8, p5
.line 153
invoke-direct/range {v0 .. v8}, Lcom/bumptech/glide/load/engine/executor/GlideExecutor;-><init>(IIJLjava/lang/String;Lcom/bumptech/glide/load/engine/executor/GlideExecutor$UncaughtThrowableStrategy;ZZ)V
return-void
.end method
.method public static calculateBestThreadCount()I
.registers 5
const-string v0, "GlideExecutor"
.line 249
invoke-static {}, Landroid/os/StrictMode;->allowThreadDiskReads()Landroid/os/StrictMode$ThreadPolicy;
move-result-object v1
.line 252
:try_start_6
new-instance v2, Ljava/io/File;
const-string v3, "/sys/devices/system/cpu/"
invoke-direct {v2, v3}, Ljava/io/File;-><init>(Ljava/lang/String;)V
const-string v3, "cpu[0-9]+"
.line 253
invoke-static {v3}, Ljava/util/regex/Pattern;->compile(Ljava/lang/String;)Ljava/util/regex/Pattern;
move-result-object v3
.line 254
new-instance v4, Lcom/bumptech/glide/load/engine/executor/GlideExecutor$1;
invoke-direct {v4, v3}, Lcom/bumptech/glide/load/engine/executor/GlideExecutor$1;-><init>(Ljava/util/regex/Pattern;)V
invoke-virtual {v2, v4}, Ljava/io/File;->listFiles(Ljava/io/FilenameFilter;)[Ljava/io/File;
move-result-object v0
:try_end_1c
.catchall {:try_start_6 .. :try_end_1c} :catchall_20
.line 265
invoke-static {v1}, Landroid/os/StrictMode;->setThreadPolicy(Landroid/os/StrictMode$ThreadPolicy;)V
goto :goto_31
:catchall_20
move-exception v2
const/4 v3, 0x6
.line 261
:try_start_22
invoke-static {v0, v3}, Landroid/util/Log;->isLoggable(Ljava/lang/String;I)Z
move-result v3
if-eqz v3, :cond_2d
const-string v3, "Failed to calculate accurate cpu count"
.line 262
invoke-static {v0, v3, v2}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
:try_end_2d
.catchall {:try_start_22 .. :try_end_2d} :catchall_4d
.line 265
:cond_2d
invoke-static {v1}, Landroid/os/StrictMode;->setThreadPolicy(Landroid/os/StrictMode$ThreadPolicy;)V
const/4 v0, 0x0
:goto_31
if-eqz v0, :cond_35
.line 268
array-length v0, v0
goto :goto_36
:cond_35
const/4 v0, 0x0
:goto_36
const/4 v1, 0x1
.line 269
invoke-static {}, Ljava/lang/Runtime;->getRuntime()Ljava/lang/Runtime;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/Runtime;->availableProcessors()I
move-result v2
invoke-static {v1, v2}, Ljava/lang/Math;->max(II)I
move-result v1
const/4 v2, 0x4
.line 270
invoke-static {v1, v0}, Ljava/lang/Math;->max(II)I
move-result v0
invoke-static {v2, v0}, Ljava/lang/Math;->min(II)I
move-result v0
return v0
:catchall_4d
move-exception v0
.line 265
invoke-static {v1}, Landroid/os/StrictMode;->setThreadPolicy(Landroid/os/StrictMode$ThreadPolicy;)V
throw v0
.end method
.method private maybeWait(Ljava/util/concurrent/Future;)Ljava/util/concurrent/Future;
.registers 4
.annotation system Ldalvik/annotation/Signature;
value = {
"<T:",
"Ljava/lang/Object;",
">(",
"Ljava/util/concurrent/Future<",
"TT;>;)",
"Ljava/util/concurrent/Future<",
"TT;>;"
}
.end annotation
.line 206
iget-boolean v0, p0, Lcom/bumptech/glide/load/engine/executor/GlideExecutor;->executeSynchronously:Z
if-eqz v0, :cond_2d
const/4 v0, 0x0
.line 209
:goto_5
:try_start_5
invoke-interface {p1}, Ljava/util/concurrent/Future;->isDone()Z
move-result v1
:try_end_9
.catchall {:try_start_5 .. :try_end_9} :catchall_22
if-nez v1, :cond_18
.line 211
:try_start_b
invoke-interface {p1}, Ljava/util/concurrent/Future;->get()Ljava/lang/Object;
:try_end_e
.catch Ljava/util/concurrent/ExecutionException; {:try_start_b .. :try_end_e} :catch_11
.catch Ljava/lang/InterruptedException; {:try_start_b .. :try_end_e} :catch_f
.catchall {:try_start_b .. :try_end_e} :catchall_22
goto :goto_5
:catch_f
const/4 v0, 0x1
goto :goto_5
:catch_11
move-exception p1
.line 213
:try_start_12
new-instance v1, Ljava/lang/RuntimeException;
invoke-direct {v1, p1}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/Throwable;)V
throw v1
:try_end_18
.catchall {:try_start_12 .. :try_end_18} :catchall_22
:cond_18
if-eqz v0, :cond_2d
.line 220
invoke-static {}, Ljava/lang/Thread;->currentThread()Ljava/lang/Thread;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/Thread;->interrupt()V
goto :goto_2d
:catchall_22
move-exception p1
if-eqz v0, :cond_2c
invoke-static {}, Ljava/lang/Thread;->currentThread()Ljava/lang/Thread;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/Thread;->interrupt()V
:cond_2c
throw p1
:cond_2d
:goto_2d
return-object p1
.end method
.method public static newDiskCacheExecutor()Lcom/bumptech/glide/load/engine/executor/GlideExecutor;
.registers 3
.line 70
sget-object v0, Lcom/bumptech/glide/load/engine/executor/GlideExecutor$UncaughtThrowableStrategy;->DEFAULT:Lcom/bumptech/glide/load/engine/executor/GlideExecutor$UncaughtThrowableStrategy;
const/4 v1, 0x1
const-string v2, "disk-cache"
invoke-static {v1, v2, v0}, Lcom/bumptech/glide/load/engine/executor/GlideExecutor;->newDiskCacheExecutor(ILjava/lang/String;Lcom/bumptech/glide/load/engine/executor/GlideExecutor$UncaughtThrowableStrategy;)Lcom/bumptech/glide/load/engine/executor/GlideExecutor;
move-result-object v0
return-object v0
.end method
.method public static newDiskCacheExecutor(ILjava/lang/String;Lcom/bumptech/glide/load/engine/executor/GlideExecutor$UncaughtThrowableStrategy;)Lcom/bumptech/glide/load/engine/executor/GlideExecutor;
.registers 10
.line 88
new-instance v6, Lcom/bumptech/glide/load/engine/executor/GlideExecutor;
const/4 v4, 0x1
const/4 v5, 0x0
move-object v0, v6
move v1, p0
move-object v2, p1
move-object v3, p2
invoke-direct/range {v0 .. v5}, Lcom/bumptech/glide/load/engine/executor/GlideExecutor;-><init>(ILjava/lang/String;Lcom/bumptech/glide/load/engine/executor/GlideExecutor$UncaughtThrowableStrategy;ZZ)V
return-object v6
.end method
.method public static newSourceExecutor()Lcom/bumptech/glide/load/engine/executor/GlideExecutor;
.registers 3
.line 102
invoke-static {}, Lcom/bumptech/glide/load/engine/executor/GlideExecutor;->calculateBestThreadCount()I
move-result v0
sget-object v1, Lcom/bumptech/glide/load/engine/executor/GlideExecutor$UncaughtThrowableStrategy;->DEFAULT:Lcom/bumptech/glide/load/engine/executor/GlideExecutor$UncaughtThrowableStrategy;
const-string v2, "source"
invoke-static {v0, v2, v1}, Lcom/bumptech/glide/load/engine/executor/GlideExecutor;->newSourceExecutor(ILjava/lang/String;Lcom/bumptech/glide/load/engine/executor/GlideExecutor$UncaughtThrowableStrategy;)Lcom/bumptech/glide/load/engine/executor/GlideExecutor;
move-result-object v0
return-object v0
.end method
.method public static newSourceExecutor(ILjava/lang/String;Lcom/bumptech/glide/load/engine/executor/GlideExecutor$UncaughtThrowableStrategy;)Lcom/bumptech/glide/load/engine/executor/GlideExecutor;
.registers 10
.line 120
new-instance v6, Lcom/bumptech/glide/load/engine/executor/GlideExecutor;
const/4 v4, 0x0
const/4 v5, 0x0
move-object v0, v6
move v1, p0
move-object v2, p1
move-object v3, p2
invoke-direct/range {v0 .. v5}, Lcom/bumptech/glide/load/engine/executor/GlideExecutor;-><init>(ILjava/lang/String;Lcom/bumptech/glide/load/engine/executor/GlideExecutor$UncaughtThrowableStrategy;ZZ)V
return-object v6
.end method
.method public static newUnlimitedSourceExecutor()Lcom/bumptech/glide/load/engine/executor/GlideExecutor;
.registers 11
.line 139
new-instance v10, Lcom/bumptech/glide/load/engine/executor/GlideExecutor;
sget-wide v3, Lcom/bumptech/glide/load/engine/executor/GlideExecutor;->SOURCE_UNLIMITED_EXECUTOR_KEEP_ALIVE_TIME_MS:J
sget-object v6, Lcom/bumptech/glide/load/engine/executor/GlideExecutor$UncaughtThrowableStrategy;->DEFAULT:Lcom/bumptech/glide/load/engine/executor/GlideExecutor$UncaughtThrowableStrategy;
new-instance v9, Ljava/util/concurrent/SynchronousQueue;
invoke-direct {v9}, Ljava/util/concurrent/SynchronousQueue;-><init>()V
const/4 v1, 0x0
const v2, 0x7fffffff
const-string v5, "source-unlimited"
const/4 v7, 0x0
const/4 v8, 0x0
move-object v0, v10
invoke-direct/range {v0 .. v9}, Lcom/bumptech/glide/load/engine/executor/GlideExecutor;-><init>(IIJLjava/lang/String;Lcom/bumptech/glide/load/engine/executor/GlideExecutor$UncaughtThrowableStrategy;ZZLjava/util/concurrent/BlockingQueue;)V
return-object v10
.end method
# virtual methods
.method public execute(Ljava/lang/Runnable;)V
.registers 3
.line 192
iget-boolean v0, p0, Lcom/bumptech/glide/load/engine/executor/GlideExecutor;->executeSynchronously:Z
if-eqz v0, :cond_8
.line 193
invoke-interface {p1}, Ljava/lang/Runnable;->run()V
goto :goto_b
.line 195
:cond_8
invoke-super {p0, p1}, Ljava/util/concurrent/ThreadPoolExecutor;->execute(Ljava/lang/Runnable;)V
:goto_b
return-void
.end method
.method public submit(Ljava/lang/Runnable;)Ljava/util/concurrent/Future;
.registers 2
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/lang/Runnable;",
")",
"Ljava/util/concurrent/Future<",
"*>;"
}
.end annotation
.line 202
invoke-super {p0, p1}, Ljava/util/concurrent/ThreadPoolExecutor;->submit(Ljava/lang/Runnable;)Ljava/util/concurrent/Future;
move-result-object p1
invoke-direct {p0, p1}, Lcom/bumptech/glide/load/engine/executor/GlideExecutor;->maybeWait(Ljava/util/concurrent/Future;)Ljava/util/concurrent/Future;
move-result-object p1
return-object p1
.end method
.method public submit(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/Future;
.registers 3
.annotation system Ldalvik/annotation/Signature;
value = {
"<T:",
"Ljava/lang/Object;",
">(",
"Ljava/lang/Runnable;",
"TT;)",
"Ljava/util/concurrent/Future<",
"TT;>;"
}
.end annotation
.line 230
invoke-super {p0, p1, p2}, Ljava/util/concurrent/ThreadPoolExecutor;->submit(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/Future;
move-result-object p1
invoke-direct {p0, p1}, Lcom/bumptech/glide/load/engine/executor/GlideExecutor;->maybeWait(Ljava/util/concurrent/Future;)Ljava/util/concurrent/Future;
move-result-object p1
return-object p1
.end method
.method public submit(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Future;
.registers 2
.annotation system Ldalvik/annotation/Signature;
value = {
"<T:",
"Ljava/lang/Object;",
">(",
"Ljava/util/concurrent/Callable<",
"TT;>;)",
"Ljava/util/concurrent/Future<",
"TT;>;"
}
.end annotation
.line 235
invoke-super {p0, p1}, Ljava/util/concurrent/ThreadPoolExecutor;->submit(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Future;
move-result-object p1
invoke-direct {p0, p1}, Lcom/bumptech/glide/load/engine/executor/GlideExecutor;->maybeWait(Ljava/util/concurrent/Future;)Ljava/util/concurrent/Future;
move-result-object p1
return-object p1
.end method