CpuMonitor.smali
.class public Lorg/webrtc/utils/CpuMonitor;
.super Ljava/lang/Object;
.source "CpuMonitor.java"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lorg/webrtc/utils/CpuMonitor$MovingAverage;,
Lorg/webrtc/utils/CpuMonitor$ProcStat;
}
.end annotation
# static fields
.field private static final CPU_STAT_LOG_PERIOD_MS:I
.field private static final CPU_STAT_SAMPLE_PERIOD_MS:I
.field private static final MOVING_AVERAGE_SAMPLES:I
.field private static final TAG:Ljava/lang/String; = "CpuMonitor"
# instance fields
.field private actualCpusPresent:I
.field private final appContext:Landroid/content/Context;
.field private cpuFreqMax:[J
.field private cpuOveruse:Z
.field private cpusPresent:I
.field private curFreqScales:[D
.field private curPath:[Ljava/lang/String;
.field private executor:Ljava/util/concurrent/ScheduledExecutorService;
.field private final frequencyScale:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
.field private initialized:Z
.field private lastProcStat:Lorg/webrtc/utils/CpuMonitor$ProcStat;
.field private lastStatLogTimeMs:J
.field private maxPath:[Ljava/lang/String;
.field private final systemCpuUsage:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
.field private final totalCpuUsage:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
.field private final userCpuUsage:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
# direct methods
.method static constructor <clinit>()V
.registers 1
const v0, 0x21f
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lorg/webrtc/utils/CpuMonitor;->CPU_STAT_LOG_PERIOD_MS:I
const v0, 0x12bf
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lorg/webrtc/utils/CpuMonitor;->CPU_STAT_SAMPLE_PERIOD_MS:I
const v0, 0x156a
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lorg/webrtc/utils/CpuMonitor;->MOVING_AVERAGE_SAMPLES:I
return-void
.end method
.method public constructor <init>(Landroid/content/Context;)V
.registers 4
.param p1, "context" # Landroid/content/Context;
.line 155
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 156
const-string v0, "CpuMonitor"
const-string v1, "CpuMonitor ctor."
invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
.line 157
invoke-virtual {p1}, Landroid/content/Context;->getApplicationContext()Landroid/content/Context;
move-result-object v0
iput-object v0, p0, Lorg/webrtc/utils/CpuMonitor;->appContext:Landroid/content/Context;
.line 158
new-instance v0, Lorg/webrtc/utils/CpuMonitor$MovingAverage;
const/4 v1, 0x5
invoke-direct {v0, v1}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;-><init>(I)V
iput-object v0, p0, Lorg/webrtc/utils/CpuMonitor;->userCpuUsage:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
.line 159
new-instance v0, Lorg/webrtc/utils/CpuMonitor$MovingAverage;
invoke-direct {v0, v1}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;-><init>(I)V
iput-object v0, p0, Lorg/webrtc/utils/CpuMonitor;->systemCpuUsage:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
.line 160
new-instance v0, Lorg/webrtc/utils/CpuMonitor$MovingAverage;
invoke-direct {v0, v1}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;-><init>(I)V
iput-object v0, p0, Lorg/webrtc/utils/CpuMonitor;->totalCpuUsage:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
.line 161
new-instance v0, Lorg/webrtc/utils/CpuMonitor$MovingAverage;
invoke-direct {v0, v1}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;-><init>(I)V
iput-object v0, p0, Lorg/webrtc/utils/CpuMonitor;->frequencyScale:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
.line 162
invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J
move-result-wide v0
iput-wide v0, p0, Lorg/webrtc/utils/CpuMonitor;->lastStatLogTimeMs:J
.line 163
return-void
.end method
.method static synthetic access$000(Lorg/webrtc/utils/CpuMonitor;)V
.registers 1
.param p0, "x0" # Lorg/webrtc/utils/CpuMonitor;
.line 73
invoke-direct {p0}, Lorg/webrtc/utils/CpuMonitor;->cpuUtilizationTask()V
return-void
.end method
.method private cpuUtilizationTask()V
.registers 7
.line 216
invoke-direct {p0}, Lorg/webrtc/utils/CpuMonitor;->sampleCpuUtilization()Z
move-result v0
.line 217
.local v0, "cpuMonitorAvailable":Z
if-eqz v0, :cond_22
.line 218
invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J
move-result-wide v1
iget-wide v3, p0, Lorg/webrtc/utils/CpuMonitor;->lastStatLogTimeMs:J
sub-long/2addr v1, v3
const-wide/16 v3, 0x1770
cmp-long v5, v1, v3
if-ltz v5, :cond_22
.line 219
invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J
move-result-wide v1
iput-wide v1, p0, Lorg/webrtc/utils/CpuMonitor;->lastStatLogTimeMs:J
.line 220
invoke-virtual {p0}, Lorg/webrtc/utils/CpuMonitor;->getStatString()Ljava/lang/String;
move-result-object v1
.line 221
.local v1, "statString":Ljava/lang/String;
const-string v2, "CpuMonitor"
invoke-static {v2, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
.line 223
.end local v1 # "statString":Ljava/lang/String;
:cond_22
return-void
.end method
.method private doubleToPercent(D)I
.registers 7
.param p1, "d" # D
.line 405
const-wide/high16 v0, 0x4059000000000000L # 100.0
mul-double v0, v0, p1
const-wide/high16 v2, 0x3fe0000000000000L # 0.5
add-double/2addr v0, v2
double-to-int v0, v0
return v0
.end method
.method private getBatteryLevel()I
.registers 7
.line 272
iget-object v0, p0, Lorg/webrtc/utils/CpuMonitor;->appContext:Landroid/content/Context;
new-instance v1, Landroid/content/IntentFilter;
const-string v2, "android.intent.action.BATTERY_CHANGED"
invoke-direct {v1, v2}, Landroid/content/IntentFilter;-><init>(Ljava/lang/String;)V
const/4 v2, 0x0
invoke-virtual {v0, v2, v1}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;
move-result-object v0
.line 275
.local v0, "intent":Landroid/content/Intent;
const/4 v1, 0x0
.line 276
.local v1, "batteryLevel":I
const-string v2, "scale"
const/16 v3, 0x64
invoke-virtual {v0, v2, v3}, Landroid/content/Intent;->getIntExtra(Ljava/lang/String;I)I
move-result v2
.line 277
.local v2, "batteryScale":I
if-lez v2, :cond_28
.line 278
const/high16 v3, 0x42c80000 # 100.0f
const/4 v4, 0x0
.line 279
const-string v5, "level"
invoke-virtual {v0, v5, v4}, Landroid/content/Intent;->getIntExtra(Ljava/lang/String;I)I
move-result v4
int-to-float v4, v4
mul-float v4, v4, v3
int-to-float v3, v2
div-float/2addr v4, v3
float-to-int v1, v4
.line 281
:cond_28
return v1
.end method
.method private init()V
.registers 10
.line 227
const-string v0, "CpuMonitor"
const/4 v1, 0x1
:try_start_3
new-instance v2, Ljava/io/FileReader;
const-string v3, "/sys/devices/system/cpu/present"
invoke-direct {v2, v3}, Ljava/io/FileReader;-><init>(Ljava/lang/String;)V
:try_end_a
.catch Ljava/io/FileNotFoundException; {:try_start_3 .. :try_end_a} :catch_42
.catch Ljava/io/IOException; {:try_start_3 .. :try_end_a} :catch_3b
.line 229
.local v2, "fin":Ljava/io/FileReader;
:try_start_a
new-instance v3, Ljava/io/BufferedReader;
invoke-direct {v3, v2}, Ljava/io/BufferedReader;-><init>(Ljava/io/Reader;)V
.line 230
.local v3, "reader":Ljava/io/BufferedReader;
new-instance v4, Ljava/util/Scanner;
invoke-direct {v4, v3}, Ljava/util/Scanner;-><init>(Ljava/lang/Readable;)V
const-string v5, "[-\n]"
invoke-virtual {v4, v5}, Ljava/util/Scanner;->useDelimiter(Ljava/lang/String;)Ljava/util/Scanner;
move-result-object v4
.line 231
.local v4, "scanner":Ljava/util/Scanner;
invoke-virtual {v4}, Ljava/util/Scanner;->nextInt()I
.line 232
invoke-virtual {v4}, Ljava/util/Scanner;->nextInt()I
move-result v5
add-int/2addr v5, v1
iput v5, p0, Lorg/webrtc/utils/CpuMonitor;->cpusPresent:I
.line 233
invoke-virtual {v4}, Ljava/util/Scanner;->close()V
:try_end_27
.catch Ljava/lang/Exception; {:try_start_a .. :try_end_27} :catch_2d
.catchall {:try_start_a .. :try_end_27} :catchall_2b
.line 237
.end local v3 # "reader":Ljava/io/BufferedReader;
.end local v4 # "scanner":Ljava/util/Scanner;
:try_start_27
invoke-virtual {v2}, Ljava/io/FileReader;->close()V
:try_end_2a
.catch Ljava/io/FileNotFoundException; {:try_start_27 .. :try_end_2a} :catch_42
.catch Ljava/io/IOException; {:try_start_27 .. :try_end_2a} :catch_3b
goto :goto_36
:catchall_2b
move-exception v3
goto :goto_37
.line 234
:catch_2d
move-exception v3
.line 235
.local v3, "e":Ljava/lang/Exception;
:try_start_2e
const-string v4, "Cannot do CPU stats due to /sys/devices/system/cpu/present parsing problem"
invoke-static {v0, v4}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
:try_end_33
.catchall {:try_start_2e .. :try_end_33} :catchall_2b
.line 237
.end local v3 # "e":Ljava/lang/Exception;
:try_start_33
invoke-virtual {v2}, Ljava/io/FileReader;->close()V
.line 238
:goto_36
goto :goto_48
.line 237
:goto_37
invoke-virtual {v2}, Ljava/io/FileReader;->close()V
.line 238
throw v3
:try_end_3b
.catch Ljava/io/FileNotFoundException; {:try_start_33 .. :try_end_3b} :catch_42
.catch Ljava/io/IOException; {:try_start_33 .. :try_end_3b} :catch_3b
.line 241
.end local v2 # "fin":Ljava/io/FileReader;
:catch_3b
move-exception v2
.line 242
.local v2, "e":Ljava/io/IOException;
const-string v3, "Error closing file"
invoke-static {v0, v3}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
goto :goto_49
.line 239
.end local v2 # "e":Ljava/io/IOException;
:catch_42
move-exception v2
.line 240
.local v2, "e":Ljava/io/FileNotFoundException;
const-string v3, "Cannot do CPU stats since /sys/devices/system/cpu/present is missing"
invoke-static {v0, v3}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
.line 243
.end local v2 # "e":Ljava/io/FileNotFoundException;
:goto_48
nop
.line 245
:goto_49
iget v0, p0, Lorg/webrtc/utils/CpuMonitor;->cpusPresent:I
new-array v2, v0, [J
iput-object v2, p0, Lorg/webrtc/utils/CpuMonitor;->cpuFreqMax:[J
.line 246
new-array v2, v0, [Ljava/lang/String;
iput-object v2, p0, Lorg/webrtc/utils/CpuMonitor;->maxPath:[Ljava/lang/String;
.line 247
new-array v2, v0, [Ljava/lang/String;
iput-object v2, p0, Lorg/webrtc/utils/CpuMonitor;->curPath:[Ljava/lang/String;
.line 248
new-array v0, v0, [D
iput-object v0, p0, Lorg/webrtc/utils/CpuMonitor;->curFreqScales:[D
.line 249
const/4 v0, 0x0
.local v0, "i":I
:goto_5c
iget v2, p0, Lorg/webrtc/utils/CpuMonitor;->cpusPresent:I
if-ge v0, v2, :cond_a1
.line 250
iget-object v2, p0, Lorg/webrtc/utils/CpuMonitor;->cpuFreqMax:[J
const-wide/16 v3, 0x0
aput-wide v3, v2, v0
.line 251
iget-object v2, p0, Lorg/webrtc/utils/CpuMonitor;->curFreqScales:[D
const-wide/16 v3, 0x0
aput-wide v3, v2, v0
.line 252
iget-object v2, p0, Lorg/webrtc/utils/CpuMonitor;->maxPath:[Ljava/lang/String;
new-instance v3, Ljava/lang/StringBuilder;
invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V
const-string v4, "/sys/devices/system/cpu/cpu"
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v5, "/cpufreq/cpuinfo_max_freq"
invoke-virtual {v3, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v3
aput-object v3, v2, v0
.line 253
iget-object v2, p0, Lorg/webrtc/utils/CpuMonitor;->curPath:[Ljava/lang/String;
new-instance v3, Ljava/lang/StringBuilder;
invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v4, "/cpufreq/scaling_cur_freq"
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v3
aput-object v3, v2, v0
.line 249
add-int/lit8 v0, v0, 0x1
goto :goto_5c
.line 256
.end local v0 # "i":I
:cond_a1
new-instance v0, Lorg/webrtc/utils/CpuMonitor$ProcStat;
const-wide/16 v3, 0x0
const-wide/16 v5, 0x0
const-wide/16 v7, 0x0
move-object v2, v0
invoke-direct/range {v2 .. v8}, Lorg/webrtc/utils/CpuMonitor$ProcStat;-><init>(JJJ)V
iput-object v0, p0, Lorg/webrtc/utils/CpuMonitor;->lastProcStat:Lorg/webrtc/utils/CpuMonitor$ProcStat;
.line 257
invoke-direct {p0}, Lorg/webrtc/utils/CpuMonitor;->resetStat()V
.line 259
iput-boolean v1, p0, Lorg/webrtc/utils/CpuMonitor;->initialized:Z
.line 260
return-void
.end method
.method private static parseLong(Ljava/lang/String;)J
.registers 6
.param p0, "value" # Ljava/lang/String;
.line 464
const-wide/16 v0, 0x0
.line 466
.local v0, "number":J
:try_start_2
invoke-static {p0}, Ljava/lang/Long;->parseLong(Ljava/lang/String;)J
move-result-wide v2
:try_end_6
.catch Ljava/lang/NumberFormatException; {:try_start_2 .. :try_end_6} :catch_8
move-wide v0, v2
.line 469
goto :goto_10
.line 467
:catch_8
move-exception v2
.line 468
.local v2, "e":Ljava/lang/NumberFormatException;
const-string v3, "CpuMonitor"
const-string v4, "parseLong error."
invoke-static {v3, v4, v2}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
.line 470
.end local v2 # "e":Ljava/lang/NumberFormatException;
:goto_10
return-wide v0
.end method
.method private readFreqFromFile(Ljava/lang/String;)J
.registers 8
.param p1, "fileName" # Ljava/lang/String;
.line 444
const-wide/16 v0, 0x0
.line 446
.local v0, "number":J
:try_start_2
new-instance v2, Ljava/io/BufferedReader;
new-instance v3, Ljava/io/FileReader;
invoke-direct {v3, p1}, Ljava/io/FileReader;-><init>(Ljava/lang/String;)V
invoke-direct {v2, v3}, Ljava/io/BufferedReader;-><init>(Ljava/io/Reader;)V
:try_end_c
.catch Ljava/io/FileNotFoundException; {:try_start_2 .. :try_end_c} :catch_21
.catch Ljava/io/IOException; {:try_start_2 .. :try_end_c} :catch_1f
.line 448
.local v2, "reader":Ljava/io/BufferedReader;
:try_start_c
invoke-virtual {v2}, Ljava/io/BufferedReader;->readLine()Ljava/lang/String;
move-result-object v3
.line 449
.local v3, "line":Ljava/lang/String;
invoke-static {v3}, Lorg/webrtc/utils/CpuMonitor;->parseLong(Ljava/lang/String;)J
move-result-wide v4
:try_end_14
.catchall {:try_start_c .. :try_end_14} :catchall_19
move-wide v0, v4
.line 451
.end local v3 # "line":Ljava/lang/String;
:try_start_15
invoke-virtual {v2}, Ljava/io/BufferedReader;->close()V
.line 452
goto :goto_22
.line 451
:catchall_19
move-exception v3
invoke-virtual {v2}, Ljava/io/BufferedReader;->close()V
.line 452
nop
.end local v0 # "number":J
.end local p1 # "fileName":Ljava/lang/String;
throw v3
:try_end_1f
.catch Ljava/io/FileNotFoundException; {:try_start_15 .. :try_end_1f} :catch_21
.catch Ljava/io/IOException; {:try_start_15 .. :try_end_1f} :catch_1f
.line 456
.end local v2 # "reader":Ljava/io/BufferedReader;
.restart local v0 # "number":J
.restart local p1 # "fileName":Ljava/lang/String;
:catch_1f
move-exception v2
goto :goto_23
.line 453
:catch_21
move-exception v2
.line 459
:goto_22
nop
.line 460
:goto_23
return-wide v0
.end method
.method private readProcStat()Lorg/webrtc/utils/CpuMonitor$ProcStat;
.registers 21
.line 478
const-string v1, "CpuMonitor"
const-wide/16 v2, 0x0
.line 479
.local v2, "userTime":J
const-wide/16 v4, 0x0
.line 480
.local v4, "systemTime":J
const-wide/16 v6, 0x0
.line 482
.local v6, "idleTime":J
const/4 v8, 0x0
:try_start_9
new-instance v0, Ljava/io/BufferedReader;
new-instance v9, Ljava/io/FileReader;
const-string v10, "/proc/stat"
invoke-direct {v9, v10}, Ljava/io/FileReader;-><init>(Ljava/lang/String;)V
invoke-direct {v0, v9}, Ljava/io/BufferedReader;-><init>(Ljava/io/Reader;)V
:try_end_15
.catch Ljava/io/FileNotFoundException; {:try_start_9 .. :try_end_15} :catch_90
.catch Ljava/io/IOException; {:try_start_9 .. :try_end_15} :catch_89
.catchall {:try_start_9 .. :try_end_15} :catchall_82
move-object v9, v0
.line 487
.local v9, "reader":Ljava/io/BufferedReader;
:try_start_16
invoke-virtual {v9}, Ljava/io/BufferedReader;->readLine()Ljava/lang/String;
move-result-object v0
.line 488
.local v0, "line":Ljava/lang/String;
const-string v10, "\\s+"
invoke-virtual {v0, v10}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;
move-result-object v10
.line 489
.local v10, "lines":[Ljava/lang/String;
array-length v11, v10
.line 490
.local v11, "length":I
const/4 v12, 0x5
if-lt v11, v12, :cond_44
.line 491
const/4 v13, 0x1
aget-object v13, v10, v13
invoke-static {v13}, Lorg/webrtc/utils/CpuMonitor;->parseLong(Ljava/lang/String;)J
move-result-wide v13
move-wide v2, v13
.line 492
const/4 v13, 0x2
aget-object v13, v10, v13
invoke-static {v13}, Lorg/webrtc/utils/CpuMonitor;->parseLong(Ljava/lang/String;)J
move-result-wide v13
add-long/2addr v2, v13
.line 493
const/4 v13, 0x3
aget-object v13, v10, v13
invoke-static {v13}, Lorg/webrtc/utils/CpuMonitor;->parseLong(Ljava/lang/String;)J
move-result-wide v13
move-wide v4, v13
.line 494
const/4 v13, 0x4
aget-object v13, v10, v13
invoke-static {v13}, Lorg/webrtc/utils/CpuMonitor;->parseLong(Ljava/lang/String;)J
move-result-wide v13
move-wide v6, v13
.line 496
:cond_44
const/16 v13, 0x8
if-lt v11, v13, :cond_5f
.line 497
aget-object v12, v10, v12
invoke-static {v12}, Lorg/webrtc/utils/CpuMonitor;->parseLong(Ljava/lang/String;)J
move-result-wide v12
add-long/2addr v2, v12
.line 498
const/4 v12, 0x6
aget-object v12, v10, v12
invoke-static {v12}, Lorg/webrtc/utils/CpuMonitor;->parseLong(Ljava/lang/String;)J
move-result-wide v12
add-long/2addr v4, v12
.line 499
const/4 v12, 0x7
aget-object v12, v10, v12
invoke-static {v12}, Lorg/webrtc/utils/CpuMonitor;->parseLong(Ljava/lang/String;)J
move-result-wide v12
:try_end_5e
.catch Ljava/lang/Exception; {:try_start_16 .. :try_end_5e} :catch_72
.catchall {:try_start_16 .. :try_end_5e} :catchall_70
add-long/2addr v4, v12
.line 505
.end local v0 # "line":Ljava/lang/String;
.end local v10 # "lines":[Ljava/lang/String;
.end local v11 # "length":I
:cond_5f
:try_start_5f
invoke-virtual {v9}, Ljava/io/BufferedReader;->close()V
:try_end_62
.catch Ljava/io/FileNotFoundException; {:try_start_5f .. :try_end_62} :catch_90
.catch Ljava/io/IOException; {:try_start_5f .. :try_end_62} :catch_89
.catchall {:try_start_5f .. :try_end_62} :catchall_82
.line 506
nop
.line 518
.end local v9 # "reader":Ljava/io/BufferedReader;
nop
.line 519
new-instance v0, Lorg/webrtc/utils/CpuMonitor$ProcStat;
move-object v13, v0
move-wide v14, v2
move-wide/from16 v16, v4
move-wide/from16 v18, v6
invoke-direct/range {v13 .. v19}, Lorg/webrtc/utils/CpuMonitor$ProcStat;-><init>(JJJ)V
return-object v0
.line 505
.restart local v9 # "reader":Ljava/io/BufferedReader;
:catchall_70
move-exception v0
goto :goto_7d
.line 501
:catch_72
move-exception v0
.line 502
.local v0, "e":Ljava/lang/Exception;
:try_start_73
const-string v10, "Problems parsing /proc/stat"
invoke-static {v1, v10, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
:try_end_78
.catchall {:try_start_73 .. :try_end_78} :catchall_70
.line 503
nop
.line 505
:try_start_79
invoke-virtual {v9}, Ljava/io/BufferedReader;->close()V
.line 503
return-object v8
.line 505
.end local v0 # "e":Ljava/lang/Exception;
:goto_7d
invoke-virtual {v9}, Ljava/io/BufferedReader;->close()V
.line 506
nop
.end local v2 # "userTime":J
.end local v4 # "systemTime":J
.end local v6 # "idleTime":J
throw v0
:try_end_82
.catch Ljava/io/FileNotFoundException; {:try_start_79 .. :try_end_82} :catch_90
.catch Ljava/io/IOException; {:try_start_79 .. :try_end_82} :catch_89
.catchall {:try_start_79 .. :try_end_82} :catchall_82
.line 515
.end local v9 # "reader":Ljava/io/BufferedReader;
.restart local v2 # "userTime":J
.restart local v4 # "systemTime":J
.restart local v6 # "idleTime":J
:catchall_82
move-exception v0
.line 516
.local v0, "e":Ljava/lang/Throwable;
const-string v9, "Unknown error"
invoke-static {v1, v9}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
.line 517
return-object v8
.line 510
.end local v0 # "e":Ljava/lang/Throwable;
:catch_89
move-exception v0
.line 511
.local v0, "e":Ljava/io/IOException;
const-string v9, "Problems reading /proc/stat"
invoke-static {v1, v9}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
.line 512
return-object v8
.line 507
.end local v0 # "e":Ljava/io/IOException;
:catch_90
move-exception v0
.line 508
.local v0, "e":Ljava/io/FileNotFoundException;
const-string v9, "Cannot open /proc/stat for reading"
invoke-static {v1, v9}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
.line 509
return-object v8
.end method
.method private declared-synchronized resetStat()V
.registers 3
monitor-enter p0
.line 263
:try_start_1
iget-object v0, p0, Lorg/webrtc/utils/CpuMonitor;->userCpuUsage:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
invoke-virtual {v0}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->reset()V
.line 264
iget-object v0, p0, Lorg/webrtc/utils/CpuMonitor;->systemCpuUsage:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
invoke-virtual {v0}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->reset()V
.line 265
iget-object v0, p0, Lorg/webrtc/utils/CpuMonitor;->totalCpuUsage:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
invoke-virtual {v0}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->reset()V
.line 266
iget-object v0, p0, Lorg/webrtc/utils/CpuMonitor;->frequencyScale:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
invoke-virtual {v0}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->reset()V
.line 267
invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J
move-result-wide v0
iput-wide v0, p0, Lorg/webrtc/utils/CpuMonitor;->lastStatLogTimeMs:J
:try_end_1b
.catchall {:try_start_1 .. :try_end_1b} :catchall_1d
.line 268
monitor-exit p0
return-void
.line 262
.end local p0 # "this":Lorg/webrtc/utils/CpuMonitor;
:catchall_1d
move-exception v0
monitor-exit p0
throw v0
.end method
.method private declared-synchronized sampleCpuUtilization()Z
.registers 27
move-object/from16 v1, p0
monitor-enter p0
.line 299
const-wide/16 v2, 0x0
.line 300
.local v2, "lastSeenMaxFreq":J
const-wide/16 v4, 0x0
.line 301
.local v4, "cpuFreqCurSum":J
const-wide/16 v6, 0x0
.line 303
.local v6, "cpuFreqMaxSum":J
:try_start_9
iget-boolean v0, v1, Lorg/webrtc/utils/CpuMonitor;->initialized:Z
if-nez v0, :cond_10
.line 304
invoke-direct/range {p0 .. p0}, Lorg/webrtc/utils/CpuMonitor;->init()V
.line 306
.end local p0 # "this":Lorg/webrtc/utils/CpuMonitor;
:cond_10
iget v0, v1, Lorg/webrtc/utils/CpuMonitor;->cpusPresent:I
:try_end_12
.catchall {:try_start_9 .. :try_end_12} :catchall_150
const/4 v8, 0x0
if-nez v0, :cond_17
.line 307
monitor-exit p0
return v8
.line 310
:cond_17
:try_start_17
iput v8, v1, Lorg/webrtc/utils/CpuMonitor;->actualCpusPresent:I
.line 311
const/4 v0, 0x0
.local v0, "i":I
:goto_1a
iget v9, v1, Lorg/webrtc/utils/CpuMonitor;->cpusPresent:I
const/4 v10, 0x1
const-wide/16 v11, 0x0
const-wide/16 v13, 0x0
if-ge v0, v9, :cond_9a
.line 318
iget-object v9, v1, Lorg/webrtc/utils/CpuMonitor;->curFreqScales:[D
aput-wide v11, v9, v0
.line 319
iget-object v9, v1, Lorg/webrtc/utils/CpuMonitor;->cpuFreqMax:[J
aget-wide v11, v9, v0
cmp-long v9, v11, v13
if-nez v9, :cond_64
.line 321
iget-object v9, v1, Lorg/webrtc/utils/CpuMonitor;->maxPath:[Ljava/lang/String;
aget-object v9, v9, v0
invoke-direct {v1, v9}, Lorg/webrtc/utils/CpuMonitor;->readFreqFromFile(Ljava/lang/String;)J
move-result-wide v11
.line 322
.local v11, "cpufreqMax":J
cmp-long v9, v11, v13
if-lez v9, :cond_63
.line 323
const-string v9, "CpuMonitor"
new-instance v15, Ljava/lang/StringBuilder;
invoke-direct {v15}, Ljava/lang/StringBuilder;-><init>()V
const-string v8, "Core "
invoke-virtual {v15, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v15, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v8, ". Max frequency: "
invoke-virtual {v15, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v15, v11, v12}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
invoke-virtual {v15}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v8
invoke-static {v9, v8}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
.line 324
move-wide v2, v11
.line 325
iget-object v8, v1, Lorg/webrtc/utils/CpuMonitor;->cpuFreqMax:[J
aput-wide v11, v8, v0
.line 326
iget-object v8, v1, Lorg/webrtc/utils/CpuMonitor;->maxPath:[Ljava/lang/String;
const/4 v9, 0x0
aput-object v9, v8, v0
.line 328
.end local v11 # "cpufreqMax":J
:cond_63
goto :goto_69
.line 329
:cond_64
iget-object v8, v1, Lorg/webrtc/utils/CpuMonitor;->cpuFreqMax:[J
aget-wide v11, v8, v0
move-wide v2, v11
.line 332
:goto_69
iget-object v8, v1, Lorg/webrtc/utils/CpuMonitor;->curPath:[Ljava/lang/String;
aget-object v8, v8, v0
invoke-direct {v1, v8}, Lorg/webrtc/utils/CpuMonitor;->readFreqFromFile(Ljava/lang/String;)J
move-result-wide v8
.line 333
.local v8, "cpuFreqCur":J
cmp-long v11, v8, v13
if-nez v11, :cond_7a
cmp-long v11, v2, v13
if-nez v11, :cond_7a
.line 335
goto :goto_96
.line 337
:cond_7a
cmp-long v11, v8, v13
if-lez v11, :cond_83
.line 338
iget v11, v1, Lorg/webrtc/utils/CpuMonitor;->actualCpusPresent:I
add-int/2addr v11, v10
iput v11, v1, Lorg/webrtc/utils/CpuMonitor;->actualCpusPresent:I
.line 340
:cond_83
add-long/2addr v4, v8
.line 348
add-long/2addr v6, v2
.line 349
cmp-long v10, v2, v13
if-lez v10, :cond_96
.line 350
iget-object v10, v1, Lorg/webrtc/utils/CpuMonitor;->curFreqScales:[D
:try_end_8b
.catchall {:try_start_17 .. :try_end_8b} :catchall_150
long-to-double v11, v8
long-to-double v13, v2
invoke-static {v11, v12}, Ljava/lang/Double;->isNaN(D)Z
invoke-static {v13, v14}, Ljava/lang/Double;->isNaN(D)Z
div-double/2addr v11, v13
:try_start_94
aput-wide v11, v10, v0
:try_end_96
.catchall {:try_start_94 .. :try_end_96} :catchall_150
.line 311
.end local v8 # "cpuFreqCur":J
:cond_96
:goto_96
add-int/lit8 v0, v0, 0x1
const/4 v8, 0x0
goto :goto_1a
.line 354
.end local v0 # "i":I
:cond_9a
cmp-long v0, v4, v13
if-eqz v0, :cond_140
cmp-long v0, v6, v13
if-nez v0, :cond_aa
move-wide/from16 v16, v2
move-wide/from16 v18, v4
move-wide/from16 v22, v6
goto/16 :goto_146
.line 366
:cond_aa
long-to-double v8, v4
long-to-double v13, v6
invoke-static {v8, v9}, Ljava/lang/Double;->isNaN(D)Z
invoke-static {v13, v14}, Ljava/lang/Double;->isNaN(D)Z
div-double/2addr v8, v13
.line 367
.local v8, "currentFrequencyScale":D
:try_start_b3
iget-object v0, v1, Lorg/webrtc/utils/CpuMonitor;->frequencyScale:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
invoke-virtual {v0}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->getCurrent()D
move-result-wide v13
cmpl-double v0, v13, v11
if-lez v0, :cond_c8
.line 368
iget-object v0, v1, Lorg/webrtc/utils/CpuMonitor;->frequencyScale:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
invoke-virtual {v0}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->getCurrent()D
move-result-wide v13
add-double/2addr v13, v8
const-wide/high16 v18, 0x3fe0000000000000L # 0.5
mul-double v8, v13, v18
.line 371
:cond_c8
invoke-direct/range {p0 .. p0}, Lorg/webrtc/utils/CpuMonitor;->readProcStat()Lorg/webrtc/utils/CpuMonitor$ProcStat;
move-result-object v0
:try_end_cc
.catchall {:try_start_b3 .. :try_end_cc} :catchall_150
.line 372
.local v0, "procStat":Lorg/webrtc/utils/CpuMonitor$ProcStat;
if-nez v0, :cond_d1
.line 373
monitor-exit p0
const/4 v10, 0x0
return v10
.line 376
:cond_d1
:try_start_d1
iget-wide v13, v0, Lorg/webrtc/utils/CpuMonitor$ProcStat;->userTime:J
iget-object v15, v1, Lorg/webrtc/utils/CpuMonitor;->lastProcStat:Lorg/webrtc/utils/CpuMonitor$ProcStat;
iget-wide v10, v15, Lorg/webrtc/utils/CpuMonitor$ProcStat;->userTime:J
sub-long/2addr v13, v10
.line 377
.local v13, "diffUserTime":J
iget-wide v10, v0, Lorg/webrtc/utils/CpuMonitor$ProcStat;->systemTime:J
iget-object v15, v1, Lorg/webrtc/utils/CpuMonitor;->lastProcStat:Lorg/webrtc/utils/CpuMonitor$ProcStat;
move-wide/from16 v20, v13
.end local v13 # "diffUserTime":J
.local v20, "diffUserTime":J
iget-wide v12, v15, Lorg/webrtc/utils/CpuMonitor$ProcStat;->systemTime:J
sub-long/2addr v10, v12
.line 378
.local v10, "diffSystemTime":J
iget-wide v12, v0, Lorg/webrtc/utils/CpuMonitor$ProcStat;->idleTime:J
iget-object v14, v1, Lorg/webrtc/utils/CpuMonitor;->lastProcStat:Lorg/webrtc/utils/CpuMonitor$ProcStat;
iget-wide v14, v14, Lorg/webrtc/utils/CpuMonitor$ProcStat;->idleTime:J
sub-long/2addr v12, v14
.line 379
.local v12, "diffIdleTime":J
add-long v14, v20, v10
add-long/2addr v14, v12
.line 381
.local v14, "allTime":J
const-wide/16 v18, 0x0
cmpl-double v22, v8, v18
if-eqz v22, :cond_137
const-wide/16 v16, 0x0
cmp-long v18, v14, v16
if-nez v18, :cond_fe
move-wide/from16 v16, v2
move-wide/from16 v18, v4
move-wide/from16 v22, v6
goto :goto_13d
.line 386
:cond_fe
move-wide/from16 v16, v2
.end local v2 # "lastSeenMaxFreq":J
.local v16, "lastSeenMaxFreq":J
iget-object v2, v1, Lorg/webrtc/utils/CpuMonitor;->frequencyScale:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
invoke-virtual {v2, v8, v9}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->addValue(D)V
:try_end_105
.catchall {:try_start_d1 .. :try_end_105} :catchall_150
.line 388
move-wide/from16 v18, v4
move-wide/from16 v2, v20
.end local v4 # "cpuFreqCurSum":J
.end local v20 # "diffUserTime":J
.local v2, "diffUserTime":J
.local v18, "cpuFreqCurSum":J
long-to-double v4, v2
.end local v2 # "diffUserTime":J
.restart local v20 # "diffUserTime":J
long-to-double v2, v14
invoke-static {v4, v5}, Ljava/lang/Double;->isNaN(D)Z
invoke-static {v2, v3}, Ljava/lang/Double;->isNaN(D)Z
div-double/2addr v4, v2
.line 389
.local v4, "currentUserCpuUsage":D
:try_start_112
iget-object v2, v1, Lorg/webrtc/utils/CpuMonitor;->userCpuUsage:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
invoke-virtual {v2, v4, v5}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->addValue(D)V
:try_end_117
.catchall {:try_start_112 .. :try_end_117} :catchall_150
.line 391
long-to-double v2, v10
move-wide/from16 v22, v6
.end local v6 # "cpuFreqMaxSum":J
.local v22, "cpuFreqMaxSum":J
long-to-double v6, v14
invoke-static {v2, v3}, Ljava/lang/Double;->isNaN(D)Z
invoke-static {v6, v7}, Ljava/lang/Double;->isNaN(D)Z
div-double/2addr v2, v6
.line 392
.local v2, "currentSystemCpuUsage":D
:try_start_122
iget-object v6, v1, Lorg/webrtc/utils/CpuMonitor;->systemCpuUsage:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
invoke-virtual {v6, v2, v3}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->addValue(D)V
.line 394
add-double v6, v4, v2
mul-double v6, v6, v8
.line 396
.local v6, "currentTotalCpuUsage":D
move-wide/from16 v24, v2
.end local v2 # "currentSystemCpuUsage":D
.local v24, "currentSystemCpuUsage":D
iget-object v2, v1, Lorg/webrtc/utils/CpuMonitor;->totalCpuUsage:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
invoke-virtual {v2, v6, v7}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->addValue(D)V
.line 399
iput-object v0, v1, Lorg/webrtc/utils/CpuMonitor;->lastProcStat:Lorg/webrtc/utils/CpuMonitor$ProcStat;
:try_end_134
.catchall {:try_start_122 .. :try_end_134} :catchall_150
.line 401
monitor-exit p0
const/4 v2, 0x1
return v2
.line 381
.end local v16 # "lastSeenMaxFreq":J
.end local v18 # "cpuFreqCurSum":J
.end local v22 # "cpuFreqMaxSum":J
.end local v24 # "currentSystemCpuUsage":D
.local v2, "lastSeenMaxFreq":J
.local v4, "cpuFreqCurSum":J
.local v6, "cpuFreqMaxSum":J
:cond_137
move-wide/from16 v16, v2
move-wide/from16 v18, v4
move-wide/from16 v22, v6
.line 382
.end local v2 # "lastSeenMaxFreq":J
.end local v4 # "cpuFreqCurSum":J
.end local v6 # "cpuFreqMaxSum":J
.restart local v16 # "lastSeenMaxFreq":J
.restart local v18 # "cpuFreqCurSum":J
.restart local v22 # "cpuFreqMaxSum":J
:goto_13d
monitor-exit p0
const/4 v2, 0x0
return v2
.line 354
.end local v0 # "procStat":Lorg/webrtc/utils/CpuMonitor$ProcStat;
.end local v8 # "currentFrequencyScale":D
.end local v10 # "diffSystemTime":J
.end local v12 # "diffIdleTime":J
.end local v14 # "allTime":J
.end local v16 # "lastSeenMaxFreq":J
.end local v18 # "cpuFreqCurSum":J
.end local v20 # "diffUserTime":J
.end local v22 # "cpuFreqMaxSum":J
.restart local v2 # "lastSeenMaxFreq":J
.restart local v4 # "cpuFreqCurSum":J
.restart local v6 # "cpuFreqMaxSum":J
:cond_140
move-wide/from16 v16, v2
move-wide/from16 v18, v4
move-wide/from16 v22, v6
.line 355
.end local v2 # "lastSeenMaxFreq":J
.end local v4 # "cpuFreqCurSum":J
.end local v6 # "cpuFreqMaxSum":J
.restart local v16 # "lastSeenMaxFreq":J
.restart local v18 # "cpuFreqCurSum":J
.restart local v22 # "cpuFreqMaxSum":J
:goto_146
:try_start_146
const-string v0, "CpuMonitor"
const-string v2, "Could not read max or current frequency for any CPU"
invoke-static {v0, v2}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
:try_end_14d
.catchall {:try_start_146 .. :try_end_14d} :catchall_150
.line 356
monitor-exit p0
const/4 v0, 0x0
return v0
.line 298
.end local v16 # "lastSeenMaxFreq":J
.end local v18 # "cpuFreqCurSum":J
.end local v22 # "cpuFreqMaxSum":J
:catchall_150
move-exception v0
monitor-exit p0
goto :goto_154
:goto_153
throw v0
:goto_154
goto :goto_153
.end method
.method private scheduleCpuUtilizationTask()V
.registers 9
.line 200
iget-object v0, p0, Lorg/webrtc/utils/CpuMonitor;->executor:Ljava/util/concurrent/ScheduledExecutorService;
if-eqz v0, :cond_a
.line 201
invoke-interface {v0}, Ljava/util/concurrent/ScheduledExecutorService;->shutdownNow()Ljava/util/List;
.line 202
const/4 v0, 0x0
iput-object v0, p0, Lorg/webrtc/utils/CpuMonitor;->executor:Ljava/util/concurrent/ScheduledExecutorService;
.line 205
:cond_a
invoke-static {}, Ljava/util/concurrent/Executors;->newSingleThreadScheduledExecutor()Ljava/util/concurrent/ScheduledExecutorService;
move-result-object v1
iput-object v1, p0, Lorg/webrtc/utils/CpuMonitor;->executor:Ljava/util/concurrent/ScheduledExecutorService;
.line 207
new-instance v2, Lorg/webrtc/utils/CpuMonitor$1;
invoke-direct {v2, p0}, Lorg/webrtc/utils/CpuMonitor$1;-><init>(Lorg/webrtc/utils/CpuMonitor;)V
const-wide/16 v3, 0x0
const-wide/16 v5, 0x7d0
sget-object v7, Ljava/util/concurrent/TimeUnit;->MILLISECONDS:Ljava/util/concurrent/TimeUnit;
invoke-interface/range {v1 .. v7}, Ljava/util/concurrent/ScheduledExecutorService;->scheduleAtFixedRate(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
move-result-object v0
.line 213
.local v0, "possiblyIgnoredError":Ljava/util/concurrent/Future;, "Ljava/util/concurrent/Future<*>;"
return-void
.end method
# virtual methods
.method public declared-synchronized getCpuUsageAverage()I
.registers 5
monitor-enter p0
.line 192
:try_start_1
iget-object v0, p0, Lorg/webrtc/utils/CpuMonitor;->userCpuUsage:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
invoke-virtual {v0}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->getAverage()D
move-result-wide v0
iget-object v2, p0, Lorg/webrtc/utils/CpuMonitor;->systemCpuUsage:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
invoke-virtual {v2}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->getAverage()D
move-result-wide v2
add-double/2addr v0, v2
invoke-direct {p0, v0, v1}, Lorg/webrtc/utils/CpuMonitor;->doubleToPercent(D)I
move-result v0
:try_end_12
.catchall {:try_start_1 .. :try_end_12} :catchall_14
monitor-exit p0
return v0
.end local p0 # "this":Lorg/webrtc/utils/CpuMonitor;
:catchall_14
move-exception v0
monitor-exit p0
throw v0
.end method
.method public declared-synchronized getCpuUsageCurrent()I
.registers 5
monitor-enter p0
.line 188
:try_start_1
iget-object v0, p0, Lorg/webrtc/utils/CpuMonitor;->userCpuUsage:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
invoke-virtual {v0}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->getCurrent()D
move-result-wide v0
iget-object v2, p0, Lorg/webrtc/utils/CpuMonitor;->systemCpuUsage:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
invoke-virtual {v2}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->getCurrent()D
move-result-wide v2
add-double/2addr v0, v2
invoke-direct {p0, v0, v1}, Lorg/webrtc/utils/CpuMonitor;->doubleToPercent(D)I
move-result v0
:try_end_12
.catchall {:try_start_1 .. :try_end_12} :catchall_14
monitor-exit p0
return v0
.end local p0 # "this":Lorg/webrtc/utils/CpuMonitor;
:catchall_14
move-exception v0
monitor-exit p0
throw v0
.end method
.method public declared-synchronized getFrequencyScaleAverage()I
.registers 3
monitor-enter p0
.line 196
:try_start_1
iget-object v0, p0, Lorg/webrtc/utils/CpuMonitor;->frequencyScale:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
invoke-virtual {v0}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->getAverage()D
move-result-wide v0
invoke-direct {p0, v0, v1}, Lorg/webrtc/utils/CpuMonitor;->doubleToPercent(D)I
move-result v0
:try_end_b
.catchall {:try_start_1 .. :try_end_b} :catchall_d
monitor-exit p0
return v0
.end local p0 # "this":Lorg/webrtc/utils/CpuMonitor;
:catchall_d
move-exception v0
monitor-exit p0
throw v0
.end method
.method public declared-synchronized getStatString()Ljava/lang/String;
.registers 4
monitor-enter p0
.line 409
:try_start_1
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
.line 410
.local v0, "stat":Ljava/lang/StringBuilder;
const-string v1, "CPU \nUser: "
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v1, p0, Lorg/webrtc/utils/CpuMonitor;->userCpuUsage:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
.line 411
invoke-virtual {v1}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->getCurrent()D
move-result-wide v1
invoke-direct {p0, v1, v2}, Lorg/webrtc/utils/CpuMonitor;->doubleToPercent(D)I
move-result v1
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v1, "/"
.line 412
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v1, p0, Lorg/webrtc/utils/CpuMonitor;->userCpuUsage:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
.line 413
invoke-virtual {v1}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->getAverage()D
move-result-wide v1
invoke-direct {p0, v1, v2}, Lorg/webrtc/utils/CpuMonitor;->doubleToPercent(D)I
move-result v1
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v1, "\nSystem: "
.line 414
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v1, p0, Lorg/webrtc/utils/CpuMonitor;->systemCpuUsage:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
.line 415
invoke-virtual {v1}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->getCurrent()D
move-result-wide v1
invoke-direct {p0, v1, v2}, Lorg/webrtc/utils/CpuMonitor;->doubleToPercent(D)I
move-result v1
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v1, "/"
.line 416
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v1, p0, Lorg/webrtc/utils/CpuMonitor;->systemCpuUsage:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
.line 417
invoke-virtual {v1}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->getAverage()D
move-result-wide v1
invoke-direct {p0, v1, v2}, Lorg/webrtc/utils/CpuMonitor;->doubleToPercent(D)I
move-result v1
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v1, "\nFreq: "
.line 418
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v1, p0, Lorg/webrtc/utils/CpuMonitor;->frequencyScale:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
.line 419
invoke-virtual {v1}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->getCurrent()D
move-result-wide v1
invoke-direct {p0, v1, v2}, Lorg/webrtc/utils/CpuMonitor;->doubleToPercent(D)I
move-result v1
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v1, "/"
.line 420
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v1, p0, Lorg/webrtc/utils/CpuMonitor;->frequencyScale:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
.line 421
invoke-virtual {v1}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->getAverage()D
move-result-wide v1
invoke-direct {p0, v1, v2}, Lorg/webrtc/utils/CpuMonitor;->doubleToPercent(D)I
move-result v1
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v1, "\nTotal usage: "
.line 422
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v1, p0, Lorg/webrtc/utils/CpuMonitor;->totalCpuUsage:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
.line 423
invoke-virtual {v1}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->getCurrent()D
move-result-wide v1
invoke-direct {p0, v1, v2}, Lorg/webrtc/utils/CpuMonitor;->doubleToPercent(D)I
move-result v1
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v1, "/"
.line 424
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v1, p0, Lorg/webrtc/utils/CpuMonitor;->totalCpuUsage:Lorg/webrtc/utils/CpuMonitor$MovingAverage;
.line 425
invoke-virtual {v1}, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->getAverage()D
move-result-wide v1
invoke-direct {p0, v1, v2}, Lorg/webrtc/utils/CpuMonitor;->doubleToPercent(D)I
move-result v1
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
.line 436
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
:try_end_9a
.catchall {:try_start_1 .. :try_end_9a} :catchall_9c
monitor-exit p0
return-object v1
.line 408
.end local v0 # "stat":Ljava/lang/StringBuilder;
.end local p0 # "this":Lorg/webrtc/utils/CpuMonitor;
:catchall_9c
move-exception v0
monitor-exit p0
throw v0
.end method
.method public pause()V
.registers 3
.line 166
iget-object v0, p0, Lorg/webrtc/utils/CpuMonitor;->executor:Ljava/util/concurrent/ScheduledExecutorService;
if-eqz v0, :cond_13
.line 167
const-string v0, "CpuMonitor"
const-string v1, "pause"
invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
.line 168
iget-object v0, p0, Lorg/webrtc/utils/CpuMonitor;->executor:Ljava/util/concurrent/ScheduledExecutorService;
invoke-interface {v0}, Ljava/util/concurrent/ScheduledExecutorService;->shutdownNow()Ljava/util/List;
.line 169
const/4 v0, 0x0
iput-object v0, p0, Lorg/webrtc/utils/CpuMonitor;->executor:Ljava/util/concurrent/ScheduledExecutorService;
.line 171
:cond_13
return-void
.end method
.method public declared-synchronized reset()V
.registers 3
monitor-enter p0
.line 180
:try_start_1
iget-object v0, p0, Lorg/webrtc/utils/CpuMonitor;->executor:Ljava/util/concurrent/ScheduledExecutorService;
if-eqz v0, :cond_12
.line 181
const-string v0, "CpuMonitor"
const-string v1, "reset"
invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
.line 182
invoke-direct {p0}, Lorg/webrtc/utils/CpuMonitor;->resetStat()V
.line 183
const/4 v0, 0x0
iput-boolean v0, p0, Lorg/webrtc/utils/CpuMonitor;->cpuOveruse:Z
:try_end_12
.catchall {:try_start_1 .. :try_end_12} :catchall_14
.line 185
.end local p0 # "this":Lorg/webrtc/utils/CpuMonitor;
:cond_12
monitor-exit p0
return-void
.line 179
:catchall_14
move-exception v0
monitor-exit p0
throw v0
.end method
.method public resume()V
.registers 3
.line 174
const-string v0, "CpuMonitor"
const-string v1, "resume"
invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
.line 175
invoke-direct {p0}, Lorg/webrtc/utils/CpuMonitor;->resetStat()V
.line 176
invoke-direct {p0}, Lorg/webrtc/utils/CpuMonitor;->scheduleCpuUtilizationTask()V
.line 177
return-void
.end method