PostTask.smali
.class public Laegon/chrome/base/task/PostTask;
.super Ljava/lang/Object;
# annotations
.annotation runtime Laegon/chrome/base/annotations/JNINamespace;
value = "base"
.end annotation
# static fields
.field static final synthetic $assertionsDisabled:Z
.field private static final sLock:Ljava/lang/Object;
.field private static sPreNativeTaskRunners:Ljava/util/Set;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/Set",
"<",
"Laegon/chrome/base/task/TaskRunner;",
">;"
}
.end annotation
.end field
.field private static final sPrenativeThreadPoolExecutor:Ljava/util/concurrent/Executor;
.field private static sPrenativeThreadPoolExecutorOverride:Ljava/util/concurrent/Executor;
.field private static final sTaskExecutors:[Laegon/chrome/base/task/TaskExecutor;
# direct methods
.method static constructor <clinit>()V
.registers 1
const-class v0, Laegon/chrome/base/task/PostTask;
invoke-virtual {v0}, Ljava/lang/Class;->desiredAssertionStatus()Z
move-result v0
if-nez v0, :cond_2b
const/4 v0, 0x1
:goto_9
sput-boolean v0, Laegon/chrome/base/task/PostTask;->$assertionsDisabled:Z
new-instance v0, Ljava/lang/Object;
invoke-direct {v0}, Ljava/lang/Object;-><init>()V
sput-object v0, Laegon/chrome/base/task/PostTask;->sLock:Ljava/lang/Object;
new-instance v0, Ljava/util/WeakHashMap;
invoke-direct {v0}, Ljava/util/WeakHashMap;-><init>()V
invoke-static {v0}, Ljava/util/Collections;->newSetFromMap(Ljava/util/Map;)Ljava/util/Set;
move-result-object v0
sput-object v0, Laegon/chrome/base/task/PostTask;->sPreNativeTaskRunners:Ljava/util/Set;
new-instance v0, Laegon/chrome/base/task/ChromeThreadPoolExecutor;
invoke-direct {v0}, Laegon/chrome/base/task/ChromeThreadPoolExecutor;-><init>()V
sput-object v0, Laegon/chrome/base/task/PostTask;->sPrenativeThreadPoolExecutor:Ljava/util/concurrent/Executor;
invoke-static {}, Laegon/chrome/base/task/PostTask;->getInitialTaskExecutors()[Laegon/chrome/base/task/TaskExecutor;
move-result-object v0
sput-object v0, Laegon/chrome/base/task/PostTask;->sTaskExecutors:[Laegon/chrome/base/task/TaskExecutor;
return-void
:cond_2b
const/4 v0, 0x0
goto :goto_9
.end method
.method public constructor <init>()V
.registers 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public static createSequencedTaskRunner(Laegon/chrome/base/task/TaskTraits;)Laegon/chrome/base/task/SequencedTaskRunner;
.registers 3
sget-object v1, Laegon/chrome/base/task/PostTask;->sLock:Ljava/lang/Object;
monitor-enter v1
:try_start_3
invoke-static {p0}, Laegon/chrome/base/task/PostTask;->getTaskExecutorForTraits(Laegon/chrome/base/task/TaskTraits;)Laegon/chrome/base/task/TaskExecutor;
move-result-object v0
invoke-interface {v0, p0}, Laegon/chrome/base/task/TaskExecutor;->createSequencedTaskRunner(Laegon/chrome/base/task/TaskTraits;)Laegon/chrome/base/task/SequencedTaskRunner;
move-result-object v0
monitor-exit v1
return-object v0
:catchall_d
move-exception v0
monitor-exit v1
:try_end_f
.catchall {:try_start_3 .. :try_end_f} :catchall_d
throw v0
.end method
.method public static createSingleThreadTaskRunner(Laegon/chrome/base/task/TaskTraits;)Laegon/chrome/base/task/SingleThreadTaskRunner;
.registers 3
sget-object v1, Laegon/chrome/base/task/PostTask;->sLock:Ljava/lang/Object;
monitor-enter v1
:try_start_3
invoke-static {p0}, Laegon/chrome/base/task/PostTask;->getTaskExecutorForTraits(Laegon/chrome/base/task/TaskTraits;)Laegon/chrome/base/task/TaskExecutor;
move-result-object v0
invoke-interface {v0, p0}, Laegon/chrome/base/task/TaskExecutor;->createSingleThreadTaskRunner(Laegon/chrome/base/task/TaskTraits;)Laegon/chrome/base/task/SingleThreadTaskRunner;
move-result-object v0
monitor-exit v1
return-object v0
:catchall_d
move-exception v0
monitor-exit v1
:try_end_f
.catchall {:try_start_3 .. :try_end_f} :catchall_d
throw v0
.end method
.method public static createTaskRunner(Laegon/chrome/base/task/TaskTraits;)Laegon/chrome/base/task/TaskRunner;
.registers 3
sget-object v1, Laegon/chrome/base/task/PostTask;->sLock:Ljava/lang/Object;
monitor-enter v1
:try_start_3
invoke-static {p0}, Laegon/chrome/base/task/PostTask;->getTaskExecutorForTraits(Laegon/chrome/base/task/TaskTraits;)Laegon/chrome/base/task/TaskExecutor;
move-result-object v0
invoke-interface {v0, p0}, Laegon/chrome/base/task/TaskExecutor;->createTaskRunner(Laegon/chrome/base/task/TaskTraits;)Laegon/chrome/base/task/TaskRunner;
move-result-object v0
monitor-exit v1
return-object v0
:catchall_d
move-exception v0
monitor-exit v1
:try_end_f
.catchall {:try_start_3 .. :try_end_f} :catchall_d
throw v0
.end method
.method private static getInitialTaskExecutors()[Laegon/chrome/base/task/TaskExecutor;
.registers 3
const/4 v0, 0x5
new-array v0, v0, [Laegon/chrome/base/task/TaskExecutor;
const/4 v1, 0x0
new-instance v2, Laegon/chrome/base/task/DefaultTaskExecutor;
invoke-direct {v2}, Laegon/chrome/base/task/DefaultTaskExecutor;-><init>()V
aput-object v2, v0, v1
return-object v0
.end method
.method static getPrenativeThreadPoolExecutor()Ljava/util/concurrent/Executor;
.registers 2
sget-object v1, Laegon/chrome/base/task/PostTask;->sLock:Ljava/lang/Object;
monitor-enter v1
:try_start_3
sget-object v0, Laegon/chrome/base/task/PostTask;->sPrenativeThreadPoolExecutorOverride:Ljava/util/concurrent/Executor;
if-eqz v0, :cond_b
sget-object v0, Laegon/chrome/base/task/PostTask;->sPrenativeThreadPoolExecutorOverride:Ljava/util/concurrent/Executor;
monitor-exit v1
:goto_a
return-object v0
:cond_b
sget-object v0, Laegon/chrome/base/task/PostTask;->sPrenativeThreadPoolExecutor:Ljava/util/concurrent/Executor;
monitor-exit v1
goto :goto_a
:catchall_f
move-exception v0
monitor-exit v1
:try_end_11
.catchall {:try_start_3 .. :try_end_11} :catchall_f
throw v0
.end method
.method private static getTaskExecutorForTraits(Laegon/chrome/base/task/TaskTraits;)Laegon/chrome/base/task/TaskExecutor;
.registers 3
sget-object v0, Laegon/chrome/base/task/PostTask;->sTaskExecutors:[Laegon/chrome/base/task/TaskExecutor;
iget-byte v1, p0, Laegon/chrome/base/task/TaskTraits;->mExtensionId:B
aget-object v0, v0, v1
return-object v0
.end method
.method private static native nativePostDelayedTask(ZIZZB[BLjava/lang/Runnable;J)V
.end method
.method private static onNativeSchedulerReady()V
.registers 3
.annotation build Laegon/chrome/base/annotations/CalledByNative;
.end annotation
sget-object v1, Laegon/chrome/base/task/PostTask;->sLock:Ljava/lang/Object;
monitor-enter v1
:try_start_3
sget-object v0, Laegon/chrome/base/task/PostTask;->sPreNativeTaskRunners:Ljava/util/Set;
const/4 v2, 0x0
sput-object v2, Laegon/chrome/base/task/PostTask;->sPreNativeTaskRunners:Ljava/util/Set;
invoke-interface {v0}, Ljava/util/Set;->iterator()Ljava/util/Iterator;
move-result-object v2
:goto_c
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_1f
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Laegon/chrome/base/task/TaskRunner;
invoke-interface {v0}, Laegon/chrome/base/task/TaskRunner;->initNativeTaskRunner()V
goto :goto_c
:catchall_1c
move-exception v0
monitor-exit v1
:try_end_1e
.catchall {:try_start_3 .. :try_end_1e} :catchall_1c
throw v0
:cond_1f
:try_start_1f
monitor-exit v1
:try_end_20
.catchall {:try_start_1f .. :try_end_20} :catchall_1c
return-void
.end method
.method private static onNativeSchedulerShutdown()V
.registers 2
.annotation build Laegon/chrome/base/annotations/CalledByNative;
.end annotation
sget-object v1, Laegon/chrome/base/task/PostTask;->sLock:Ljava/lang/Object;
monitor-enter v1
:try_start_3
new-instance v0, Ljava/util/WeakHashMap;
invoke-direct {v0}, Ljava/util/WeakHashMap;-><init>()V
invoke-static {v0}, Ljava/util/Collections;->newSetFromMap(Ljava/util/Map;)Ljava/util/Set;
move-result-object v0
sput-object v0, Laegon/chrome/base/task/PostTask;->sPreNativeTaskRunners:Ljava/util/Set;
monitor-exit v1
return-void
:catchall_10
move-exception v0
monitor-exit v1
:try_end_12
.catchall {:try_start_3 .. :try_end_12} :catchall_10
throw v0
.end method
.method public static postDelayedTask(Laegon/chrome/base/task/TaskTraits;Ljava/lang/Runnable;J)V
.registers 16
sget-object v10, Laegon/chrome/base/task/PostTask;->sLock:Ljava/lang/Object;
monitor-enter v10
:try_start_3
sget-object v0, Laegon/chrome/base/task/PostTask;->sPreNativeTaskRunners:Ljava/util/Set;
if-nez v0, :cond_b
iget-boolean v0, p0, Laegon/chrome/base/task/TaskTraits;->mIsChoreographerFrame:Z
if-eqz v0, :cond_14
:cond_b
invoke-static {p0}, Laegon/chrome/base/task/PostTask;->getTaskExecutorForTraits(Laegon/chrome/base/task/TaskTraits;)Laegon/chrome/base/task/TaskExecutor;
move-result-object v0
invoke-interface {v0, p0, p1, p2, p3}, Laegon/chrome/base/task/TaskExecutor;->postDelayedTask(Laegon/chrome/base/task/TaskTraits;Ljava/lang/Runnable;J)V
:goto_12
monitor-exit v10
return-void
:cond_14
iget-boolean v1, p0, Laegon/chrome/base/task/TaskTraits;->mPrioritySetExplicitly:Z
iget v2, p0, Laegon/chrome/base/task/TaskTraits;->mPriority:I
iget-boolean v3, p0, Laegon/chrome/base/task/TaskTraits;->mMayBlock:Z
iget-boolean v4, p0, Laegon/chrome/base/task/TaskTraits;->mUseThreadPool:Z
iget-byte v5, p0, Laegon/chrome/base/task/TaskTraits;->mExtensionId:B
iget-object v6, p0, Laegon/chrome/base/task/TaskTraits;->mExtensionData:[B
move-object v7, p1
move-wide v8, p2
invoke-static/range {v1 .. v9}, Laegon/chrome/base/task/PostTask;->nativePostDelayedTask(ZIZZB[BLjava/lang/Runnable;J)V
goto :goto_12
:catchall_26
move-exception v0
monitor-exit v10
:try_end_28
.catchall {:try_start_3 .. :try_end_28} :catchall_26
throw v0
.end method
.method public static postTask(Laegon/chrome/base/task/TaskTraits;Ljava/lang/Runnable;)V
.registers 4
const-wide/16 v0, 0x0
invoke-static {p0, p1, v0, v1}, Laegon/chrome/base/task/PostTask;->postDelayedTask(Laegon/chrome/base/task/TaskTraits;Ljava/lang/Runnable;J)V
return-void
.end method
.method static registerPreNativeTaskRunnerLocked(Laegon/chrome/base/task/TaskRunner;)Z
.registers 2
sget-object v0, Laegon/chrome/base/task/PostTask;->sPreNativeTaskRunners:Ljava/util/Set;
if-eqz v0, :cond_b
sget-object v0, Laegon/chrome/base/task/PostTask;->sPreNativeTaskRunners:Ljava/util/Set;
invoke-interface {v0, p0}, Ljava/util/Set;->add(Ljava/lang/Object;)Z
const/4 v0, 0x1
:goto_a
return v0
:cond_b
const/4 v0, 0x0
goto :goto_a
.end method
.method public static registerTaskExecutor(ILaegon/chrome/base/task/TaskExecutor;)V
.registers 4
sget-object v1, Laegon/chrome/base/task/PostTask;->sLock:Ljava/lang/Object;
monitor-enter v1
:try_start_3
sget-boolean v0, Laegon/chrome/base/task/PostTask;->$assertionsDisabled:Z
if-nez v0, :cond_12
if-nez p0, :cond_12
new-instance v0, Ljava/lang/AssertionError;
invoke-direct {v0}, Ljava/lang/AssertionError;-><init>()V
throw v0
:catchall_f
move-exception v0
monitor-exit v1
:try_end_11
.catchall {:try_start_3 .. :try_end_11} :catchall_f
throw v0
:cond_12
:try_start_12
sget-boolean v0, Laegon/chrome/base/task/PostTask;->$assertionsDisabled:Z
if-nez v0, :cond_1f
const/4 v0, 0x4
if-le p0, v0, :cond_1f
new-instance v0, Ljava/lang/AssertionError;
invoke-direct {v0}, Ljava/lang/AssertionError;-><init>()V
throw v0
:cond_1f
sget-boolean v0, Laegon/chrome/base/task/PostTask;->$assertionsDisabled:Z
if-nez v0, :cond_2f
sget-object v0, Laegon/chrome/base/task/PostTask;->sTaskExecutors:[Laegon/chrome/base/task/TaskExecutor;
aget-object v0, v0, p0
if-eqz v0, :cond_2f
new-instance v0, Ljava/lang/AssertionError;
invoke-direct {v0}, Ljava/lang/AssertionError;-><init>()V
throw v0
:cond_2f
sget-object v0, Laegon/chrome/base/task/PostTask;->sTaskExecutors:[Laegon/chrome/base/task/TaskExecutor;
aput-object p1, v0, p0
monitor-exit v1
:try_end_34
.catchall {:try_start_12 .. :try_end_34} :catchall_f
return-void
.end method
.method public static resetPrenativeThreadPoolExecutorForTesting()V
.registers 2
sget-object v1, Laegon/chrome/base/task/PostTask;->sLock:Ljava/lang/Object;
monitor-enter v1
const/4 v0, 0x0
:try_start_4
sput-object v0, Laegon/chrome/base/task/PostTask;->sPrenativeThreadPoolExecutorOverride:Ljava/util/concurrent/Executor;
monitor-exit v1
return-void
:catchall_8
move-exception v0
monitor-exit v1
:try_end_a
.catchall {:try_start_4 .. :try_end_a} :catchall_8
throw v0
.end method
.method public static runOrPostTask(Laegon/chrome/base/task/TaskTraits;Ljava/lang/Runnable;)V
.registers 3
invoke-static {p0}, Laegon/chrome/base/task/PostTask;->getTaskExecutorForTraits(Laegon/chrome/base/task/TaskTraits;)Laegon/chrome/base/task/TaskExecutor;
move-result-object v0
invoke-interface {v0, p0}, Laegon/chrome/base/task/TaskExecutor;->canRunTaskImmediately(Laegon/chrome/base/task/TaskTraits;)Z
move-result v0
if-eqz v0, :cond_e
invoke-interface {p1}, Ljava/lang/Runnable;->run()V
:goto_d
return-void
:cond_e
invoke-static {p0, p1}, Laegon/chrome/base/task/PostTask;->postTask(Laegon/chrome/base/task/TaskTraits;Ljava/lang/Runnable;)V
goto :goto_d
.end method
.method public static runSynchronously(Laegon/chrome/base/task/TaskTraits;Ljava/util/concurrent/Callable;)Ljava/lang/Object;
.registers 3
.annotation system Ldalvik/annotation/Signature;
value = {
"<T:",
"Ljava/lang/Object;",
">(",
"Laegon/chrome/base/task/TaskTraits;",
"Ljava/util/concurrent/Callable",
"<TT;>;)TT;"
}
.end annotation
.annotation runtime Ljava/lang/Deprecated;
.end annotation
new-instance v0, Ljava/util/concurrent/FutureTask;
invoke-direct {v0, p1}, Ljava/util/concurrent/FutureTask;-><init>(Ljava/util/concurrent/Callable;)V
invoke-static {p0, v0}, Laegon/chrome/base/task/PostTask;->runSynchronouslyInternal(Laegon/chrome/base/task/TaskTraits;Ljava/util/concurrent/FutureTask;)Ljava/lang/Object;
move-result-object v0
return-object v0
.end method
.method public static runSynchronously(Laegon/chrome/base/task/TaskTraits;Ljava/lang/Runnable;)V
.registers 4
.annotation runtime Ljava/lang/Deprecated;
.end annotation
new-instance v0, Ljava/util/concurrent/FutureTask;
const/4 v1, 0x0
invoke-direct {v0, p1, v1}, Ljava/util/concurrent/FutureTask;-><init>(Ljava/lang/Runnable;Ljava/lang/Object;)V
invoke-static {p0, v0}, Laegon/chrome/base/task/PostTask;->runSynchronouslyInternal(Laegon/chrome/base/task/TaskTraits;Ljava/util/concurrent/FutureTask;)Ljava/lang/Object;
return-void
.end method
.method private static runSynchronouslyInternal(Laegon/chrome/base/task/TaskTraits;Ljava/util/concurrent/FutureTask;)Ljava/lang/Object;
.registers 4
.annotation system Ldalvik/annotation/Signature;
value = {
"<T:",
"Ljava/lang/Object;",
">(",
"Laegon/chrome/base/task/TaskTraits;",
"Ljava/util/concurrent/FutureTask",
"<TT;>;)TT;"
}
.end annotation
invoke-static {p0, p1}, Laegon/chrome/base/task/PostTask;->runOrPostTask(Laegon/chrome/base/task/TaskTraits;Ljava/lang/Runnable;)V
:try_start_3
invoke-virtual {p1}, Ljava/util/concurrent/FutureTask;->get()Ljava/lang/Object;
:try_end_6
.catch Ljava/lang/Exception; {:try_start_3 .. :try_end_6} :catch_8
move-result-object v0
return-object v0
:catch_8
move-exception v0
new-instance v1, Ljava/lang/RuntimeException;
invoke-direct {v1, v0}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/Throwable;)V
throw v1
.end method
.method public static setPrenativeThreadPoolExecutorForTesting(Ljava/util/concurrent/Executor;)V
.registers 3
sget-object v1, Laegon/chrome/base/task/PostTask;->sLock:Ljava/lang/Object;
monitor-enter v1
:try_start_3
sput-object p0, Laegon/chrome/base/task/PostTask;->sPrenativeThreadPoolExecutorOverride:Ljava/util/concurrent/Executor;
monitor-exit v1
return-void
:catchall_7
move-exception v0
monitor-exit v1
:try_end_9
.catchall {:try_start_3 .. :try_end_9} :catchall_7
throw v0
.end method