TaskRunnerImpl.smali
.class public Laegon/chrome/base/task/TaskRunnerImpl;
.super Ljava/lang/Object;
# interfaces
.implements Laegon/chrome/base/task/TaskRunner;
# annotations
.annotation runtime Laegon/chrome/base/annotations/JNINamespace;
value = "base"
.end annotation
# static fields
.field static final synthetic $assertionsDisabled:Z
# instance fields
.field private mIsDestroying:Z
.annotation build Ljavax/annotation/concurrent/GuardedBy;
value = "mLock"
.end annotation
.end field
.field private final mLifetimeAssert:Laegon/chrome/base/LifetimeAssert;
.field protected final mLock:Ljava/lang/Object;
.field protected mNativeTaskRunnerAndroid:J
.annotation build Ljavax/annotation/concurrent/GuardedBy;
value = "mLock"
.end annotation
.end field
.field protected mPreNativeDelayedTasks:Ljava/util/List;
.annotation build Landroid/support/annotation/Nullable;
.end annotation
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/List",
"<",
"Landroid/util/Pair",
"<",
"Ljava/lang/Runnable;",
"Ljava/lang/Long;",
">;>;"
}
.end annotation
.end field
.field protected mPreNativeTasks:Ljava/util/LinkedList;
.annotation build Landroid/support/annotation/Nullable;
.end annotation
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/LinkedList",
"<",
"Ljava/lang/Runnable;",
">;"
}
.end annotation
.end field
.field protected final mRunPreNativeTaskClosure:Ljava/lang/Runnable;
.field private final mTaskRunnerType:I
.field private final mTaskTraits:Laegon/chrome/base/task/TaskTraits;
.field private final mTraceEvent:Ljava/lang/String;
# direct methods
.method static constructor <clinit>()V
.registers 1
const-class v0, Laegon/chrome/base/task/TaskRunnerImpl;
invoke-virtual {v0}, Ljava/lang/Class;->desiredAssertionStatus()Z
move-result v0
if-nez v0, :cond_c
const/4 v0, 0x1
:goto_9
sput-boolean v0, Laegon/chrome/base/task/TaskRunnerImpl;->$assertionsDisabled:Z
return-void
:cond_c
const/4 v0, 0x0
goto :goto_9
.end method
.method constructor <init>(Laegon/chrome/base/task/TaskTraits;)V
.registers 4
const-string v0, "TaskRunnerImpl"
const/4 v1, 0x0
invoke-direct {p0, p1, v0, v1}, Laegon/chrome/base/task/TaskRunnerImpl;-><init>(Laegon/chrome/base/task/TaskTraits;Ljava/lang/String;I)V
return-void
.end method
.method protected constructor <init>(Laegon/chrome/base/task/TaskTraits;Ljava/lang/String;I)V
.registers 6
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
new-instance v0, Ljava/lang/Object;
invoke-direct {v0}, Ljava/lang/Object;-><init>()V
iput-object v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mLock:Ljava/lang/Object;
invoke-static {p0}, Laegon/chrome/base/task/TaskRunnerImpl$$Lambda$1;->lambdaFactory$(Laegon/chrome/base/task/TaskRunnerImpl;)Ljava/lang/Runnable;
move-result-object v0
iput-object v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mRunPreNativeTaskClosure:Ljava/lang/Runnable;
invoke-static {p0}, Laegon/chrome/base/LifetimeAssert;->create(Ljava/lang/Object;)Laegon/chrome/base/LifetimeAssert;
move-result-object v0
iput-object v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mLifetimeAssert:Laegon/chrome/base/LifetimeAssert;
new-instance v0, Ljava/util/LinkedList;
invoke-direct {v0}, Ljava/util/LinkedList;-><init>()V
iput-object v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mPreNativeTasks:Ljava/util/LinkedList;
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
iput-object v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mPreNativeDelayedTasks:Ljava/util/List;
iput-object p1, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mTaskTraits:Laegon/chrome/base/task/TaskTraits;
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v0, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
const-string v1, ".PreNativeTask.run"
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mTraceEvent:Ljava/lang/String;
iput p3, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mTaskRunnerType:I
invoke-static {p0}, Laegon/chrome/base/task/PostTask;->registerPreNativeTaskRunnerLocked(Laegon/chrome/base/task/TaskRunner;)Z
move-result v0
if-nez v0, :cond_46
invoke-virtual {p0}, Laegon/chrome/base/task/TaskRunnerImpl;->initNativeTaskRunner()V
:cond_46
return-void
.end method
.method private native nativeDestroy(J)V
.end method
.method private native nativeInit(IZIZZB[B)J
.end method
.method private native nativePostDelayedTask(JLjava/lang/Runnable;J)V
.end method
# virtual methods
.method public destroy()V
.registers 4
iget-object v1, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mLock:Ljava/lang/Object;
monitor-enter v1
:try_start_3
iget-object v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mLifetimeAssert:Laegon/chrome/base/LifetimeAssert;
const/4 v2, 0x1
invoke-static {v0, v2}, Laegon/chrome/base/LifetimeAssert;->setSafeToGc(Laegon/chrome/base/LifetimeAssert;Z)V
const/4 v0, 0x1
iput-boolean v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mIsDestroying:Z
invoke-virtual {p0}, Laegon/chrome/base/task/TaskRunnerImpl;->destroyInternal()V
monitor-exit v1
return-void
:catchall_11
move-exception v0
monitor-exit v1
:try_end_13
.catchall {:try_start_3 .. :try_end_13} :catchall_11
throw v0
.end method
.method protected destroyInternal()V
.registers 5
.annotation build Ljavax/annotation/concurrent/GuardedBy;
value = "mLock"
.end annotation
const-wide/16 v2, 0x0
iget-wide v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mNativeTaskRunnerAndroid:J
cmp-long v0, v0, v2
if-eqz v0, :cond_d
iget-wide v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mNativeTaskRunnerAndroid:J
invoke-direct {p0, v0, v1}, Laegon/chrome/base/task/TaskRunnerImpl;->nativeDestroy(J)V
:cond_d
iput-wide v2, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mNativeTaskRunnerAndroid:J
return-void
.end method
.method public disableLifetimeCheck()V
.registers 3
iget-object v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mLifetimeAssert:Laegon/chrome/base/LifetimeAssert;
const/4 v1, 0x1
invoke-static {v0, v1}, Laegon/chrome/base/LifetimeAssert;->setSafeToGc(Laegon/chrome/base/LifetimeAssert;Z)V
return-void
.end method
.method public initNativeTaskRunner()V
.registers 3
iget-object v1, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mLock:Ljava/lang/Object;
monitor-enter v1
:try_start_3
invoke-virtual {p0}, Laegon/chrome/base/task/TaskRunnerImpl;->initNativeTaskRunnerInternal()V
invoke-virtual {p0}, Laegon/chrome/base/task/TaskRunnerImpl;->migratePreNativeTasksToNative()V
monitor-exit v1
return-void
:catchall_b
move-exception v0
monitor-exit v1
:try_end_d
.catchall {:try_start_3 .. :try_end_d} :catchall_b
throw v0
.end method
.method protected initNativeTaskRunnerInternal()V
.registers 9
.annotation build Ljavax/annotation/concurrent/GuardedBy;
value = "mLock"
.end annotation
iget-wide v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mNativeTaskRunnerAndroid:J
const-wide/16 v2, 0x0
cmp-long v0, v0, v2
if-nez v0, :cond_29
iget v1, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mTaskRunnerType:I
iget-object v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mTaskTraits:Laegon/chrome/base/task/TaskTraits;
iget-boolean v2, v0, Laegon/chrome/base/task/TaskTraits;->mPrioritySetExplicitly:Z
iget-object v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mTaskTraits:Laegon/chrome/base/task/TaskTraits;
iget v3, v0, Laegon/chrome/base/task/TaskTraits;->mPriority:I
iget-object v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mTaskTraits:Laegon/chrome/base/task/TaskTraits;
iget-boolean v4, v0, Laegon/chrome/base/task/TaskTraits;->mMayBlock:Z
iget-object v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mTaskTraits:Laegon/chrome/base/task/TaskTraits;
iget-boolean v5, v0, Laegon/chrome/base/task/TaskTraits;->mUseThreadPool:Z
iget-object v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mTaskTraits:Laegon/chrome/base/task/TaskTraits;
iget-byte v6, v0, Laegon/chrome/base/task/TaskTraits;->mExtensionId:B
iget-object v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mTaskTraits:Laegon/chrome/base/task/TaskTraits;
iget-object v7, v0, Laegon/chrome/base/task/TaskTraits;->mExtensionData:[B
move-object v0, p0
invoke-direct/range {v0 .. v7}, Laegon/chrome/base/task/TaskRunnerImpl;->nativeInit(IZIZZB[B)J
move-result-wide v0
iput-wide v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mNativeTaskRunnerAndroid:J
:cond_29
return-void
.end method
.method protected migratePreNativeTasksToNative()V
.registers 8
.annotation build Ljavax/annotation/concurrent/GuardedBy;
value = "mLock"
.end annotation
const/4 v6, 0x0
iget-object v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mPreNativeTasks:Ljava/util/LinkedList;
if-eqz v0, :cond_43
iget-object v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mPreNativeTasks:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->iterator()Ljava/util/Iterator;
move-result-object v1
:goto_b
invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_1d
invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/lang/Runnable;
const-wide/16 v2, 0x0
invoke-virtual {p0, v0, v2, v3}, Laegon/chrome/base/task/TaskRunnerImpl;->postDelayedTaskToNative(Ljava/lang/Runnable;J)V
goto :goto_b
:cond_1d
iget-object v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mPreNativeDelayedTasks:Ljava/util/List;
invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v2
:goto_23
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_3f
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Landroid/util/Pair;
iget-object v1, v0, Landroid/util/Pair;->first:Ljava/lang/Object;
check-cast v1, Ljava/lang/Runnable;
iget-object v0, v0, Landroid/util/Pair;->second:Ljava/lang/Object;
check-cast v0, Ljava/lang/Long;
invoke-virtual {v0}, Ljava/lang/Long;->longValue()J
move-result-wide v4
invoke-virtual {p0, v1, v4, v5}, Laegon/chrome/base/task/TaskRunnerImpl;->postDelayedTaskToNative(Ljava/lang/Runnable;J)V
goto :goto_23
:cond_3f
iput-object v6, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mPreNativeTasks:Ljava/util/LinkedList;
iput-object v6, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mPreNativeDelayedTasks:Ljava/util/List;
:cond_43
return-void
.end method
.method protected native nativeBelongsToCurrentThread(J)Z
.end method
.method public postDelayedTask(Ljava/lang/Runnable;J)V
.registers 8
iget-object v1, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mLock:Ljava/lang/Object;
monitor-enter v1
:try_start_3
sget-boolean v0, Laegon/chrome/base/task/TaskRunnerImpl;->$assertionsDisabled:Z
if-nez v0, :cond_14
iget-boolean v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mIsDestroying:Z
if-eqz v0, :cond_14
new-instance v0, Ljava/lang/AssertionError;
invoke-direct {v0}, Ljava/lang/AssertionError;-><init>()V
throw v0
:catchall_11
move-exception v0
monitor-exit v1
:try_end_13
.catchall {:try_start_3 .. :try_end_13} :catchall_11
throw v0
:cond_14
:try_start_14
iget-object v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mPreNativeTasks:Ljava/util/LinkedList;
if-nez v0, :cond_1d
invoke-virtual {p0, p1, p2, p3}, Laegon/chrome/base/task/TaskRunnerImpl;->postDelayedTaskToNative(Ljava/lang/Runnable;J)V
monitor-exit v1
:goto_1c
return-void
:cond_1d
const-wide/16 v2, 0x0
cmp-long v0, p2, v2
if-nez v0, :cond_2d
iget-object v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mPreNativeTasks:Ljava/util/LinkedList;
invoke-virtual {v0, p1}, Ljava/util/LinkedList;->add(Ljava/lang/Object;)Z
invoke-virtual {p0}, Laegon/chrome/base/task/TaskRunnerImpl;->schedulePreNativeTask()V
:goto_2b
monitor-exit v1
goto :goto_1c
:cond_2d
new-instance v0, Landroid/util/Pair;
invoke-static {p2, p3}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;
move-result-object v2
invoke-direct {v0, p1, v2}, Landroid/util/Pair;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
iget-object v2, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mPreNativeDelayedTasks:Ljava/util/List;
invoke-interface {v2, v0}, Ljava/util/List;->add(Ljava/lang/Object;)Z
:try_end_3b
.catchall {:try_start_14 .. :try_end_3b} :catchall_11
goto :goto_2b
.end method
.method protected postDelayedTaskToNative(Ljava/lang/Runnable;J)V
.registers 10
.annotation build Ljavax/annotation/concurrent/GuardedBy;
value = "mLock"
.end annotation
iget-wide v1, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mNativeTaskRunnerAndroid:J
move-object v0, p0
move-object v3, p1
move-wide v4, p2
invoke-direct/range {v0 .. v5}, Laegon/chrome/base/task/TaskRunnerImpl;->nativePostDelayedTask(JLjava/lang/Runnable;J)V
return-void
.end method
.method public postTask(Ljava/lang/Runnable;)V
.registers 4
const-wide/16 v0, 0x0
invoke-virtual {p0, p1, v0, v1}, Laegon/chrome/base/task/TaskRunnerImpl;->postDelayedTask(Ljava/lang/Runnable;J)V
return-void
.end method
.method protected runPreNativeTask()V
.registers 6
iget-object v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mTraceEvent:Ljava/lang/String;
invoke-static {v0}, Laegon/chrome/base/TraceEvent;->scoped(Ljava/lang/String;)Laegon/chrome/base/TraceEvent;
move-result-object v2
const/4 v1, 0x0
:try_start_7
iget-object v3, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mLock:Ljava/lang/Object;
monitor-enter v3
:try_end_a
.catch Ljava/lang/Throwable; {:try_start_7 .. :try_end_a} :catch_48
.catchall {:try_start_7 .. :try_end_a} :catchall_5b
:try_start_a
iget-object v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mPreNativeTasks:Ljava/util/LinkedList;
if-nez v0, :cond_20
monitor-exit v3
:try_end_f
.catchall {:try_start_a .. :try_end_f} :catchall_45
if-eqz v2, :cond_16
if-eqz v1, :cond_1c
:try_start_13
invoke-virtual {v2}, Laegon/chrome/base/TraceEvent;->close()V
:try_end_16
.catch Ljava/lang/Throwable; {:try_start_13 .. :try_end_16} :catch_17
:cond_16
:goto_16
return-void
:catch_17
move-exception v0
invoke-virtual {v1, v0}, Ljava/lang/Throwable;->addSuppressed(Ljava/lang/Throwable;)V
goto :goto_16
:cond_1c
invoke-virtual {v2}, Laegon/chrome/base/TraceEvent;->close()V
goto :goto_16
:cond_20
:try_start_20
iget-object v0, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mPreNativeTasks:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->poll()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/lang/Runnable;
monitor-exit v3
:try_end_29
.catchall {:try_start_20 .. :try_end_29} :catchall_45
:try_start_29
iget-object v3, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mTaskTraits:Laegon/chrome/base/task/TaskTraits;
iget v3, v3, Laegon/chrome/base/task/TaskTraits;->mPriority:I
packed-switch v3, :pswitch_data_70
const/16 v3, 0xa
invoke-static {v3}, Landroid/os/Process;->setThreadPriority(I)V
:goto_35
invoke-interface {v0}, Ljava/lang/Runnable;->run()V
:try_end_38
.catch Ljava/lang/Throwable; {:try_start_29 .. :try_end_38} :catch_48
.catchall {:try_start_29 .. :try_end_38} :catchall_5b
if-eqz v2, :cond_16
if-eqz v1, :cond_62
:try_start_3c
invoke-virtual {v2}, Laegon/chrome/base/TraceEvent;->close()V
:try_end_3f
.catch Ljava/lang/Throwable; {:try_start_3c .. :try_end_3f} :catch_40
goto :goto_16
:catch_40
move-exception v0
invoke-virtual {v1, v0}, Ljava/lang/Throwable;->addSuppressed(Ljava/lang/Throwable;)V
goto :goto_16
:catchall_45
move-exception v0
:try_start_46
monitor-exit v3
:try_end_47
.catchall {:try_start_46 .. :try_end_47} :catchall_45
:try_start_47
throw v0
:try_end_48
.catch Ljava/lang/Throwable; {:try_start_47 .. :try_end_48} :catch_48
.catchall {:try_start_47 .. :try_end_48} :catchall_5b
:catch_48
move-exception v0
:try_start_49
throw v0
:try_end_4a
.catchall {:try_start_49 .. :try_end_4a} :catchall_4a
:catchall_4a
move-exception v1
move-object v4, v1
move-object v1, v0
move-object v0, v4
:goto_4e
if-eqz v2, :cond_55
if-eqz v1, :cond_6b
:try_start_52
invoke-virtual {v2}, Laegon/chrome/base/TraceEvent;->close()V
:try_end_55
.catch Ljava/lang/Throwable; {:try_start_52 .. :try_end_55} :catch_66
:cond_55
:goto_55
throw v0
:pswitch_56
const/4 v3, 0x0
:try_start_57
invoke-static {v3}, Landroid/os/Process;->setThreadPriority(I)V
goto :goto_35
:catchall_5b
move-exception v0
goto :goto_4e
:pswitch_5d
const/4 v3, -0x1
invoke-static {v3}, Landroid/os/Process;->setThreadPriority(I)V
:try_end_61
.catch Ljava/lang/Throwable; {:try_start_57 .. :try_end_61} :catch_48
.catchall {:try_start_57 .. :try_end_61} :catchall_5b
goto :goto_35
:cond_62
invoke-virtual {v2}, Laegon/chrome/base/TraceEvent;->close()V
goto :goto_16
:catch_66
move-exception v2
invoke-virtual {v1, v2}, Ljava/lang/Throwable;->addSuppressed(Ljava/lang/Throwable;)V
goto :goto_55
:cond_6b
invoke-virtual {v2}, Laegon/chrome/base/TraceEvent;->close()V
goto :goto_55
nop
:pswitch_data_70
.packed-switch 0x1
:pswitch_56
:pswitch_5d
.end packed-switch
.end method
.method protected schedulePreNativeTask()V
.registers 3
invoke-static {}, Laegon/chrome/base/task/PostTask;->getPrenativeThreadPoolExecutor()Ljava/util/concurrent/Executor;
move-result-object v0
iget-object v1, p0, Laegon/chrome/base/task/TaskRunnerImpl;->mRunPreNativeTaskClosure:Ljava/lang/Runnable;
invoke-interface {v0, v1}, Ljava/util/concurrent/Executor;->execute(Ljava/lang/Runnable;)V
return-void
.end method