ProcessCpuTracker.smali
.class public Lcom/alivc/rtc/ProcessCpuTracker;
.super Ljava/lang/Object;
.source "ProcessCpuTracker.java"
# interfaces
.implements Ljava/io/Serializable;
# static fields
.field static final PROCESS_STATS_FORMAT:[I
.field private static final PROCESS_STAT_STIME:I = 0x3
.field private static final PROCESS_STAT_UTIME:I = 0x2
.field private static final PROC_COMBINE:I = 0x100
.field private static final PROC_OUT_LONG:I = 0x2000
.field private static final PROC_PARENS:I = 0x200
.field private static final PROC_SPACE_TERM:I = 0x20
.field static final SYSTEM_CPU_FORMAT:[I
# instance fields
.field private mBaseIdleTime:J
.field private mBaseIoWaitTime:J
.field private mBaseIrqTime:J
.field private mBaseSoftIrqTime:J
.field private mBaseSystemTime:J
.field private mBaseUserTime:J
.field private mMyPidPercent:I
.field private mPidStatFile:Ljava/lang/String;
.field private mProcessBaseSystemTime:J
.field private mProcessBaseUserTime:J
.field private mProcessRelSystemTime:I
.field private mProcessRelUserTime:I
.field private mProcessSystemTime:J
.field private mProcessUserTime:J
.field private mReadProcFile:Ljava/lang/reflect/Method;
.field private mRelIdleTime:I
.field private mRelIoWaitTime:I
.field private mRelIrqTime:I
.field private mRelSoftIrqTime:I
.field private mRelSystemTime:I
.field private mRelUserTime:I
.field private final mStatsData:[J
.field private final mSysCpu:[J
.field private mTotalSysPercent:I
# direct methods
.method static constructor <clinit>()V
.registers 1
.line 25
const/16 v0, 0x17
new-array v0, v0, [I
fill-array-data v0, :array_14
sput-object v0, Lcom/alivc/rtc/ProcessCpuTracker;->PROCESS_STATS_FORMAT:[I
.line 51
const/16 v0, 0x8
new-array v0, v0, [I
fill-array-data v0, :array_46
sput-object v0, Lcom/alivc/rtc/ProcessCpuTracker;->SYSTEM_CPU_FORMAT:[I
return-void
nop
:array_14
.array-data 4
0x20
0x220
0x20
0x20
0x20
0x20
0x20
0x20
0x20
0x2020
0x20
0x2020
0x20
0x2020
0x2020
0x20
0x20
0x20
0x20
0x2020
0x20
0x2020
0x20
.end array-data
:array_46
.array-data 4
0x120
0x2020
0x2020
0x2020
0x2020
0x2020
0x2020
0x2020
.end array-data
.end method
.method constructor <init>()V
.registers 7
.line 94
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 88
const/4 v0, 0x7
new-array v0, v0, [J
iput-object v0, p0, Lcom/alivc/rtc/ProcessCpuTracker;->mSysCpu:[J
.line 89
const/4 v0, 0x6
new-array v0, v0, [J
iput-object v0, p0, Lcom/alivc/rtc/ProcessCpuTracker;->mStatsData:[J
.line 96
:try_start_d
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v1, "/proc/"
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-static {}, Landroid/os/Process;->myPid()I
move-result v1
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v1, "/stat"
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lcom/alivc/rtc/ProcessCpuTracker;->mPidStatFile:Ljava/lang/String;
.line 97
const-class v0, Landroid/os/Process;
const-string v1, "readProcFile"
const/4 v2, 0x5
new-array v2, v2, [Ljava/lang/Class;
const/4 v3, 0x0
const-class v4, Ljava/lang/String;
aput-object v4, v2, v3
const-class v3, [I
const/4 v4, 0x1
aput-object v3, v2, v4
const/4 v3, 0x2
const-class v5, [Ljava/lang/String;
aput-object v5, v2, v3
const/4 v3, 0x3
const-class v5, [J
aput-object v5, v2, v3
const/4 v3, 0x4
const-class v5, [F
aput-object v5, v2, v3
invoke-virtual {v0, v1, v2}, Ljava/lang/Class;->getMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
move-result-object v0
iput-object v0, p0, Lcom/alivc/rtc/ProcessCpuTracker;->mReadProcFile:Ljava/lang/reflect/Method;
.line 98
invoke-virtual {v0, v4}, Ljava/lang/reflect/Method;->setAccessible(Z)V
:try_end_52
.catch Ljava/lang/Exception; {:try_start_d .. :try_end_52} :catch_53
.line 100
goto :goto_54
.line 99
:catch_53
move-exception v0
.line 101
:goto_54
return-void
.end method
# virtual methods
.method getMyPicCpuPercent()I
.registers 2
.line 199
iget v0, p0, Lcom/alivc/rtc/ProcessCpuTracker;->mMyPidPercent:I
return v0
.end method
.method getTotalSysCpuPercent()I
.registers 2
.line 206
iget v0, p0, Lcom/alivc/rtc/ProcessCpuTracker;->mTotalSysPercent:I
return v0
.end method
.method updateCpuUsages(Landroid/content/Context;)V
.registers 26
.param p1, "context" # Landroid/content/Context;
.line 107
move-object/from16 v1, p0
move-object/from16 v2, p1
iget-object v0, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mReadProcFile:Ljava/lang/reflect/Method;
const/4 v3, 0x0
if-eqz v0, :cond_179
iget-object v4, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mPidStatFile:Ljava/lang/String;
if-eqz v4, :cond_179
.line 109
const/4 v4, 0x5
:try_start_e
new-array v5, v4, [Ljava/lang/Object;
const-string v6, "/proc/stat"
aput-object v6, v5, v3
sget-object v6, Lcom/alivc/rtc/ProcessCpuTracker;->SYSTEM_CPU_FORMAT:[I
const/4 v7, 0x1
aput-object v6, v5, v7
const/4 v6, 0x2
const/4 v8, 0x0
aput-object v8, v5, v6
iget-object v9, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mSysCpu:[J
const/4 v10, 0x3
aput-object v9, v5, v10
const/4 v9, 0x4
aput-object v8, v5, v9
invoke-virtual {v0, v8, v5}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/lang/Boolean;
invoke-virtual {v0}, Ljava/lang/Boolean;->booleanValue()Z
move-result v0
.line 110
.local v0, "invokeRet":Z
if-nez v0, :cond_32
.line 111
return-void
.line 113
:cond_32
iget-object v5, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mReadProcFile:Ljava/lang/reflect/Method;
new-array v11, v4, [Ljava/lang/Object;
iget-object v12, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mPidStatFile:Ljava/lang/String;
aput-object v12, v11, v3
sget-object v12, Lcom/alivc/rtc/ProcessCpuTracker;->PROCESS_STATS_FORMAT:[I
aput-object v12, v11, v7
aput-object v8, v11, v6
iget-object v12, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mStatsData:[J
aput-object v12, v11, v10
aput-object v8, v11, v9
invoke-virtual {v5, v8, v11}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v5
check-cast v5, Ljava/lang/Boolean;
invoke-virtual {v5}, Ljava/lang/Boolean;->booleanValue()Z
move-result v5
move v0, v5
.line 114
const/4 v5, 0x0
.line 115
.local v5, "percent":I
if-eqz v0, :cond_176
.line 117
iget-object v8, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mStatsData:[J
aget-wide v11, v8, v6
iput-wide v11, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mProcessUserTime:J
.line 118
iget-object v8, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mStatsData:[J
aget-wide v13, v8, v10
iput-wide v13, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mProcessSystemTime:J
.line 119
move v15, v5
.end local v5 # "percent":I
.local v15, "percent":I
iget-wide v4, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mProcessBaseUserTime:J
cmp-long v16, v11, v4
if-ltz v16, :cond_7a
iget-wide v4, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mProcessBaseSystemTime:J
cmp-long v16, v13, v4
if-ltz v16, :cond_7a
.line 120
iget-wide v4, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mProcessBaseUserTime:J
sub-long/2addr v11, v4
long-to-int v4, v11
iput v4, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mProcessRelUserTime:I
.line 121
iget-wide v4, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mProcessBaseSystemTime:J
sub-long/2addr v13, v4
long-to-int v4, v13
iput v4, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mProcessRelSystemTime:I
goto :goto_7e
.line 124
:cond_7a
iput v3, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mProcessRelUserTime:I
.line 125
iput v3, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mProcessRelSystemTime:I
.line 128
:goto_7e
iget-object v4, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mSysCpu:[J
aget-wide v11, v4, v3
iget-object v4, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mSysCpu:[J
aget-wide v13, v4, v7
add-long/2addr v11, v13
.line 130
.local v11, "usertime":J
iget-object v4, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mSysCpu:[J
aget-wide v5, v4, v6
move-wide v4, v5
.line 132
.local v4, "systemtime":J
iget-object v6, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mSysCpu:[J
aget-wide v13, v6, v10
move-wide v6, v13
.line 134
.local v6, "idletime":J
iget-object v10, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mSysCpu:[J
aget-wide v9, v10, v9
.line 135
.local v9, "iowaittime":J
iget-object v13, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mSysCpu:[J
const/4 v8, 0x5
aget-wide v16, v13, v8
move-wide/from16 v13, v16
.line 136
.local v13, "irqtime":J
iget-object v8, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mSysCpu:[J
const/16 v16, 0x6
aget-wide v16, v8, v16
move-wide/from16 v18, v16
.line 137
.local v18, "softirqtime":J
move-wide/from16 v16, v4
.end local v4 # "systemtime":J
.local v16, "systemtime":J
iget-wide v3, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mBaseUserTime:J
cmp-long v5, v11, v3
if-ltz v5, :cond_143
iget-wide v3, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mBaseSystemTime:J
cmp-long v5, v16, v3
if-ltz v5, :cond_143
iget-wide v3, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mBaseIoWaitTime:J
cmp-long v5, v9, v3
if-ltz v5, :cond_143
iget-wide v3, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mBaseIrqTime:J
cmp-long v5, v13, v3
if-ltz v5, :cond_143
iget-wide v3, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mBaseSoftIrqTime:J
move-wide/from16 v20, v9
move-wide/from16 v8, v18
.end local v9 # "iowaittime":J
.end local v18 # "softirqtime":J
.local v8, "softirqtime":J
.local v20, "iowaittime":J
cmp-long v10, v8, v3
if-ltz v10, :cond_13e
iget-wide v3, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mBaseIdleTime:J
cmp-long v10, v6, v3
if-ltz v10, :cond_13e
.line 140
iget-wide v3, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mBaseUserTime:J
sub-long v3, v11, v3
long-to-int v4, v3
iput v4, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mRelUserTime:I
.line 141
move-wide/from16 v18, v6
.end local v6 # "idletime":J
.local v18, "idletime":J
iget-wide v5, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mBaseSystemTime:J
sub-long v5, v16, v5
long-to-int v6, v5
iput v6, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mRelSystemTime:I
.line 142
move v5, v4
iget-wide v3, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mBaseIoWaitTime:J
sub-long v3, v20, v3
long-to-int v4, v3
iput v4, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mRelIoWaitTime:I
.line 143
move-wide/from16 v22, v8
.end local v8 # "softirqtime":J
.local v22, "softirqtime":J
iget-wide v7, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mBaseIrqTime:J
sub-long v7, v13, v7
long-to-int v8, v7
iput v8, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mRelIrqTime:I
.line 144
iget-wide v9, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mBaseSoftIrqTime:J
sub-long v9, v22, v9
long-to-int v7, v9
iput v7, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mRelSoftIrqTime:I
.line 145
iget-wide v9, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mBaseIdleTime:J
sub-long v9, v18, v9
long-to-int v10, v9
iput v10, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mRelIdleTime:I
.line 146
add-int/2addr v5, v6
add-int/2addr v5, v4
add-int/2addr v5, v8
add-int/2addr v5, v7
add-int/2addr v5, v10
int-to-long v4, v5
.line 147
.local v4, "totalTime":J
const-wide/16 v6, 0x1
cmp-long v8, v4, v6
if-lez v8, :cond_13b
.line 148
iget v6, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mProcessRelUserTime:I
iget v7, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mProcessRelSystemTime:I
add-int/2addr v6, v7
const/16 v7, 0x64
mul-int/lit8 v6, v6, 0x64
int-to-long v8, v6
div-long/2addr v8, v4
long-to-int v6, v8
invoke-static {v6}, Ljava/lang/Math;->abs(I)I
move-result v6
.line 149
.end local v15 # "percent":I
.local v6, "percent":I
iget v8, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mRelUserTime:I
iget v9, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mRelSystemTime:I
add-int/2addr v8, v9
mul-int/lit8 v8, v8, 0x64
int-to-long v8, v8
div-long/2addr v8, v4
long-to-int v9, v8
invoke-static {v9}, Ljava/lang/Math;->abs(I)I
move-result v8
iput v8, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mTotalSysPercent:I
.line 150
iput v6, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mMyPidPercent:I
.line 151
if-le v8, v7, :cond_12f
.line 152
iput v7, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mTotalSysPercent:I
.line 154
:cond_12f
iget v7, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mMyPidPercent:I
iget v8, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mTotalSysPercent:I
if-le v7, v8, :cond_139
.line 155
iget v7, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mTotalSysPercent:I
iput v7, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mMyPidPercent:I
.line 158
.end local v4 # "totalTime":J
:cond_139
move v5, v6
goto :goto_13c
.line 147
.end local v6 # "percent":I
.restart local v4 # "totalTime":J
.restart local v15 # "percent":I
:cond_13b
move v5, v15
.line 158
.end local v4 # "totalTime":J
.end local v15 # "percent":I
.restart local v5 # "percent":I
:goto_13c
const/4 v3, 0x0
goto :goto_157
.line 137
.end local v5 # "percent":I
.end local v18 # "idletime":J
.end local v22 # "softirqtime":J
.local v6, "idletime":J
.restart local v8 # "softirqtime":J
.restart local v15 # "percent":I
:cond_13e
move-wide/from16 v18, v6
move-wide/from16 v22, v8
.end local v6 # "idletime":J
.end local v8 # "softirqtime":J
.restart local v18 # "idletime":J
.restart local v22 # "softirqtime":J
goto :goto_149
.end local v20 # "iowaittime":J
.end local v22 # "softirqtime":J
.restart local v6 # "idletime":J
.restart local v9 # "iowaittime":J
.local v18, "softirqtime":J
:cond_143
move-wide/from16 v20, v9
move-wide/from16 v22, v18
move-wide/from16 v18, v6
.line 159
.end local v6 # "idletime":J
.end local v9 # "iowaittime":J
.local v18, "idletime":J
.restart local v20 # "iowaittime":J
.restart local v22 # "softirqtime":J
:goto_149
const/4 v3, 0x0
iput v3, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mRelUserTime:I
.line 160
iput v3, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mRelSystemTime:I
.line 161
iput v3, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mRelIoWaitTime:I
.line 162
iput v3, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mRelIrqTime:I
.line 163
iput v3, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mRelSoftIrqTime:I
.line 164
iput v3, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mRelIdleTime:I
move v5, v15
.line 166
.end local v15 # "percent":I
.restart local v5 # "percent":I
:goto_157
iget-wide v6, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mProcessUserTime:J
iput-wide v6, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mProcessBaseUserTime:J
.line 167
iget-wide v6, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mProcessSystemTime:J
iput-wide v6, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mProcessBaseSystemTime:J
.line 168
iput-wide v11, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mBaseUserTime:J
.line 169
move-wide/from16 v6, v16
.end local v16 # "systemtime":J
.local v6, "systemtime":J
iput-wide v6, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mBaseSystemTime:J
.line 170
move-wide/from16 v8, v20
.end local v20 # "iowaittime":J
.local v8, "iowaittime":J
iput-wide v8, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mBaseIoWaitTime:J
.line 171
iput-wide v13, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mBaseIrqTime:J
.line 172
move-wide/from16 v3, v22
.end local v22 # "softirqtime":J
.local v3, "softirqtime":J
iput-wide v3, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mBaseSoftIrqTime:J
.line 173
move-wide/from16 v16, v11
move-wide/from16 v10, v18
.end local v11 # "usertime":J
.end local v18 # "idletime":J
.local v10, "idletime":J
.local v16, "usertime":J
iput-wide v10, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mBaseIdleTime:J
:try_end_175
.catch Ljava/lang/Exception; {:try_start_e .. :try_end_175} :catch_178
goto :goto_177
.line 115
.end local v3 # "softirqtime":J
.end local v6 # "systemtime":J
.end local v8 # "iowaittime":J
.end local v10 # "idletime":J
.end local v13 # "irqtime":J
.end local v16 # "usertime":J
:cond_176
move v15, v5
.line 176
.end local v0 # "invokeRet":Z
.end local v5 # "percent":I
:goto_177
goto :goto_179
.line 175
:catch_178
move-exception v0
.line 179
:cond_179
:goto_179
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v3, 0x18
if-lt v0, v3, :cond_1a4
if-eqz v2, :cond_1a4
.line 181
:try_start_181
const-string v0, "hardware_properties"
invoke-virtual {v2, v0}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Landroid/os/HardwarePropertiesManager;
.line 182
.local v0, "manager":Landroid/os/HardwarePropertiesManager;
if-eqz v0, :cond_1a2
.line 183
invoke-virtual {v0}, Landroid/os/HardwarePropertiesManager;->getCpuUsages()[Landroid/os/CpuUsageInfo;
move-result-object v3
.line 184
.local v3, "cpuUsages":[Landroid/os/CpuUsageInfo;
const/4 v4, 0x0
.line 185
.local v4, "cpuPercent":I
array-length v5, v3
const/4 v12, 0x0
:goto_192
if-ge v12, v5, :cond_1a0
aget-object v6, v3, v12
.line 186
.local v6, "usageInfo":Landroid/os/CpuUsageInfo;
int-to-long v7, v4
invoke-virtual {v6}, Landroid/os/CpuUsageInfo;->getActive()J
move-result-wide v9
add-long/2addr v7, v9
long-to-int v4, v7
.line 185
.end local v6 # "usageInfo":Landroid/os/CpuUsageInfo;
add-int/lit8 v12, v12, 0x1
goto :goto_192
.line 188
:cond_1a0
iput v4, v1, Lcom/alivc/rtc/ProcessCpuTracker;->mMyPidPercent:I
:try_end_1a2
.catch Ljava/lang/Exception; {:try_start_181 .. :try_end_1a2} :catch_1a3
.line 191
.end local v0 # "manager":Landroid/os/HardwarePropertiesManager;
.end local v3 # "cpuUsages":[Landroid/os/CpuUsageInfo;
.end local v4 # "cpuPercent":I
:cond_1a2
goto :goto_1a4
.line 190
:catch_1a3
move-exception v0
.line 193
:cond_1a4
:goto_1a4
return-void
.end method