TransferThreadPool.smali
.class Lcom/amazonaws/mobileconnectors/s3/transferutility/TransferThreadPool;
.super Ljava/lang/Object;
.source "SourceFile"
# static fields
.field public static final a:Lcom/amazonaws/logging/Log;
.field public static b:Ljava/util/concurrent/ThreadPoolExecutor;
.field public static c:Ljava/util/concurrent/ThreadPoolExecutor;
# direct methods
.method public static constructor <clinit>()V
.registers 1
const-class v0, Lcom/amazonaws/mobileconnectors/s3/transferutility/TransferService;
invoke-static {v0}, Lcom/amazonaws/logging/LogFactory;->a(Ljava/lang/Class;)Lcom/amazonaws/logging/Log;
move-result-object v0
sput-object v0, Lcom/amazonaws/mobileconnectors/s3/transferutility/TransferThreadPool;->a:Lcom/amazonaws/logging/Log;
return-void
.end method
.method public static a(I)Ljava/util/concurrent/ExecutorService;
.registers 8
.line 1
sget-object v4, Ljava/util/concurrent/TimeUnit;->SECONDS:Ljava/util/concurrent/TimeUnit;
new-instance v5, Ljava/util/concurrent/LinkedBlockingQueue;
invoke-direct {v5}, Ljava/util/concurrent/LinkedBlockingQueue;-><init>()V
const-wide/16 v2, 0xa
const-string v6, "com/amazonaws/mobileconnectors/s3/transferutility/TransferThreadPool"
move v0, p0
move v1, p0
invoke-static/range {v0 .. v6}, Lcom/garena/android/appkit/logging/a;->Q(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;Ljava/lang/String;)Ljava/util/concurrent/ThreadPoolExecutor;
move-result-object p0
.line 2
new-instance v0, Ljava/util/concurrent/ThreadPoolExecutor$DiscardPolicy;
invoke-direct {v0}, Ljava/util/concurrent/ThreadPoolExecutor$DiscardPolicy;-><init>()V
invoke-virtual {p0, v0}, Ljava/util/concurrent/ThreadPoolExecutor;->setRejectedExecutionHandler(Ljava/util/concurrent/RejectedExecutionHandler;)V
const/4 v0, 0x1
.line 3
invoke-virtual {p0, v0}, Ljava/util/concurrent/ThreadPoolExecutor;->allowCoreThreadTimeOut(Z)V
return-object p0
.end method
.method public static declared-synchronized b(I)V
.registers 6
const-class v0, Lcom/amazonaws/mobileconnectors/s3/transferutility/TransferThreadPool;
monitor-enter v0
.line 1
:try_start_3
sget-object v1, Lcom/amazonaws/mobileconnectors/s3/transferutility/TransferThreadPool;->a:Lcom/amazonaws/logging/Log;
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
const-string v3, "Initializing the thread pool of size: "
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v2, p0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
invoke-interface {v1, v2}, Lcom/amazonaws/logging/Log;->f(Ljava/lang/Object;)V
int-to-double v1, p0
const-wide/high16 v3, 0x4000000000000000L # 2.0
div-double/2addr v1, v3
.line 2
invoke-static {v1, v2}, Ljava/lang/Math;->ceil(D)D
move-result-wide v1
double-to-int p0, v1
const/4 v1, 0x1
invoke-static {p0, v1}, Ljava/lang/Math;->max(II)I
move-result p0
.line 3
sget-object v1, Lcom/amazonaws/mobileconnectors/s3/transferutility/TransferThreadPool;->b:Ljava/util/concurrent/ThreadPoolExecutor;
if-nez v1, :cond_33
.line 4
invoke-static {p0}, Lcom/amazonaws/mobileconnectors/s3/transferutility/TransferThreadPool;->a(I)Ljava/util/concurrent/ExecutorService;
move-result-object v1
check-cast v1, Ljava/util/concurrent/ThreadPoolExecutor;
sput-object v1, Lcom/amazonaws/mobileconnectors/s3/transferutility/TransferThreadPool;->b:Ljava/util/concurrent/ThreadPoolExecutor;
.line 5
:cond_33
sget-object v1, Lcom/amazonaws/mobileconnectors/s3/transferutility/TransferThreadPool;->c:Ljava/util/concurrent/ThreadPoolExecutor;
if-nez v1, :cond_3f
.line 6
invoke-static {p0}, Lcom/amazonaws/mobileconnectors/s3/transferutility/TransferThreadPool;->a(I)Ljava/util/concurrent/ExecutorService;
move-result-object p0
check-cast p0, Ljava/util/concurrent/ThreadPoolExecutor;
sput-object p0, Lcom/amazonaws/mobileconnectors/s3/transferutility/TransferThreadPool;->c:Ljava/util/concurrent/ThreadPoolExecutor;
:try_end_3f
.catchall {:try_start_3 .. :try_end_3f} :catchall_41
.line 7
:cond_3f
monitor-exit v0
return-void
:catchall_41
move-exception p0
monitor-exit v0
throw p0
.end method
.method public static c(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 1
invoke-static {}, Ljava/lang/Runtime;->getRuntime()Ljava/lang/Runtime;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/Runtime;->availableProcessors()I
move-result v0
add-int/lit8 v0, v0, 0x1
mul-int/lit8 v0, v0, 0x2
.line 2
invoke-static {v0}, Lcom/amazonaws/mobileconnectors/s3/transferutility/TransferThreadPool;->b(I)V
.line 3
instance-of v0, p0, Lcom/amazonaws/mobileconnectors/s3/transferutility/UploadPartTask;
if-eqz v0, :cond_1a
.line 4
sget-object v0, Lcom/amazonaws/mobileconnectors/s3/transferutility/TransferThreadPool;->c:Ljava/util/concurrent/ThreadPoolExecutor;
invoke-interface {v0, p0}, Ljava/util/concurrent/ExecutorService;->submit(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Future;
move-result-object p0
return-object p0
.line 5
:cond_1a
sget-object v0, Lcom/amazonaws/mobileconnectors/s3/transferutility/TransferThreadPool;->b:Ljava/util/concurrent/ThreadPoolExecutor;
invoke-interface {v0, p0}, Ljava/util/concurrent/ExecutorService;->submit(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Future;
move-result-object p0
return-object p0
.end method