DeviceUtils.smali
.class public Lcn/rongcloud/rtc/utils/DeviceUtils;
.super Ljava/lang/Object;
.source "DeviceUtils.java"
# static fields
.field private static final CPU_FILTER:Ljava/io/FileFilter;
.field private static final TAG:Ljava/lang/String; = "DeviceUtils"
# direct methods
.method static constructor <clinit>()V
.registers 1
.line 1
new-instance v0, Lcn/rongcloud/rtc/utils/DeviceUtils$1;
invoke-direct {v0}, Lcn/rongcloud/rtc/utils/DeviceUtils$1;-><init>()V
sput-object v0, Lcn/rongcloud/rtc/utils/DeviceUtils;->CPU_FILTER:Ljava/io/FileFilter;
return-void
.end method
.method public constructor <init>()V
.registers 1
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method private static closeStream(Ljava/io/Closeable;)V
.registers 1
if-eqz p0, :cond_5
.line 1
:try_start_2
invoke-interface {p0}, Ljava/io/Closeable;->close()V
:try_end_5
.catch Ljava/io/IOException; {:try_start_2 .. :try_end_5} :catch_5
:catch_5
:cond_5
return-void
.end method
.method public static getAvaiableCoreCurFreq(I)J
.registers 3
.line 1
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v1, "/sys/devices/system/cpu/cpu"
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string p0, "/cpufreq/scaling_cur_freq"
invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p0
.line 2
invoke-static {p0}, Lcn/rongcloud/rtc/utils/DeviceUtils;->readProcFile(Ljava/lang/String;)Ljava/lang/String;
move-result-object p0
.line 3
invoke-static {p0}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z
move-result v0
if-eqz v0, :cond_23
const-wide/16 v0, 0x0
return-wide v0
.line 4
:cond_23
invoke-static {p0}, Ljava/lang/Long;->parseLong(Ljava/lang/String;)J
move-result-wide v0
return-wide v0
.end method
.method public static getCoreMaxFreq(I)J
.registers 3
.line 1
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v1, "/sys/devices/system/cpu/cpu"
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string p0, "/cpufreq/cpuinfo_max_freq"
invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p0
.line 2
invoke-static {p0}, Lcn/rongcloud/rtc/utils/DeviceUtils;->readProcFile(Ljava/lang/String;)Ljava/lang/String;
move-result-object p0
.line 3
invoke-static {p0}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z
move-result v0
if-eqz v0, :cond_23
const-wide/16 v0, 0x0
return-wide v0
.line 4
:cond_23
invoke-static {p0}, Ljava/lang/Long;->parseLong(Ljava/lang/String;)J
move-result-wide v0
return-wide v0
.end method
.method public static getCoreMinFreq(I)J
.registers 3
.line 1
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v1, "/sys/devices/system/cpu/cpu"
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string p0, "/cpufreq/cpuinfo_min_freq"
invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p0
.line 2
invoke-static {p0}, Lcn/rongcloud/rtc/utils/DeviceUtils;->readProcFile(Ljava/lang/String;)Ljava/lang/String;
move-result-object p0
.line 3
invoke-static {p0}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z
move-result v0
if-eqz v0, :cond_23
const-wide/16 v0, 0x0
return-wide v0
.line 4
:cond_23
invoke-static {p0}, Ljava/lang/Long;->parseLong(Ljava/lang/String;)J
move-result-wide v0
return-wide v0
.end method
.method private static getCoresFromCPUFileList()I
.registers 2
.line 1
new-instance v0, Ljava/io/File;
const-string v1, "/sys/devices/system/cpu"
invoke-direct {v0, v1}, Ljava/io/File;-><init>(Ljava/lang/String;)V
sget-object v1, Lcn/rongcloud/rtc/utils/DeviceUtils;->CPU_FILTER:Ljava/io/FileFilter;
invoke-virtual {v0, v1}, Ljava/io/File;->listFiles(Ljava/io/FileFilter;)[Ljava/io/File;
move-result-object v0
array-length v0, v0
return v0
.end method
.method private static getCoresFromFileInfo(Ljava/lang/String;)I
.registers 5
const/4 v0, 0x0
.line 1
:try_start_1
new-instance v1, Ljava/io/FileInputStream;
invoke-direct {v1, p0}, Ljava/io/FileInputStream;-><init>(Ljava/lang/String;)V
:try_end_6
.catch Ljava/io/IOException; {:try_start_1 .. :try_end_6} :catch_32
.catchall {:try_start_1 .. :try_end_6} :catchall_29
.line 2
:try_start_6
new-instance p0, Ljava/io/BufferedReader;
new-instance v2, Ljava/io/InputStreamReader;
invoke-direct {v2, v1}, Ljava/io/InputStreamReader;-><init>(Ljava/io/InputStream;)V
invoke-direct {p0, v2}, Ljava/io/BufferedReader;-><init>(Ljava/io/Reader;)V
:try_end_10
.catch Ljava/io/IOException; {:try_start_6 .. :try_end_10} :catch_33
.catchall {:try_start_6 .. :try_end_10} :catchall_27
.line 3
:try_start_10
invoke-virtual {p0}, Ljava/io/BufferedReader;->readLine()Ljava/lang/String;
move-result-object v0
.line 4
invoke-static {v0}, Lcn/rongcloud/rtc/utils/DeviceUtils;->getCoresFromFileString(Ljava/lang/String;)I
move-result v0
:try_end_18
.catch Ljava/io/IOException; {:try_start_10 .. :try_end_18} :catch_25
.catchall {:try_start_10 .. :try_end_18} :catchall_20
.line 5
invoke-static {v1}, Lcn/rongcloud/rtc/utils/DeviceUtils;->closeStream(Ljava/io/Closeable;)V
.line 6
invoke-static {p0}, Lcn/rongcloud/rtc/utils/DeviceUtils;->closeStream(Ljava/io/Closeable;)V
move p0, v0
goto :goto_3a
:catchall_20
move-exception v0
move-object v3, v0
move-object v0, p0
move-object p0, v3
goto :goto_2b
:catch_25
move-object v0, p0
goto :goto_33
:catchall_27
move-exception p0
goto :goto_2b
:catchall_29
move-exception p0
move-object v1, v0
.line 7
:goto_2b
invoke-static {v1}, Lcn/rongcloud/rtc/utils/DeviceUtils;->closeStream(Ljava/io/Closeable;)V
.line 8
invoke-static {v0}, Lcn/rongcloud/rtc/utils/DeviceUtils;->closeStream(Ljava/io/Closeable;)V
throw p0
:catch_32
move-object v1, v0
:catch_33
:goto_33
const/4 p0, -0x1
.line 9
invoke-static {v1}, Lcn/rongcloud/rtc/utils/DeviceUtils;->closeStream(Ljava/io/Closeable;)V
.line 10
invoke-static {v0}, Lcn/rongcloud/rtc/utils/DeviceUtils;->closeStream(Ljava/io/Closeable;)V
:goto_3a
return p0
.end method
.method private static getCoresFromFileString(Ljava/lang/String;)I
.registers 2
if-eqz p0, :cond_1a
const-string v0, "0-[\\d]+$"
.line 1
invoke-virtual {p0, v0}, Ljava/lang/String;->matches(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_1a
const/4 v0, 0x2
.line 2
invoke-virtual {p0, v0}, Ljava/lang/String;->substring(I)Ljava/lang/String;
move-result-object p0
invoke-static {p0}, Ljava/lang/Integer;->valueOf(Ljava/lang/String;)Ljava/lang/Integer;
move-result-object p0
invoke-virtual {p0}, Ljava/lang/Integer;->intValue()I
move-result p0
add-int/lit8 p0, p0, 0x1
return p0
:cond_1a
const/4 p0, -0x1
return p0
.end method
.method public static getNumberOfCPUCores()I
.registers 2
.line 1
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v1, 0xa
if-gt v0, v1, :cond_8
const/4 v0, 0x1
return v0
:cond_8
const/4 v0, -0x1
:try_start_9
const-string v1, "/sys/devices/system/cpu/possible"
.line 2
invoke-static {v1}, Lcn/rongcloud/rtc/utils/DeviceUtils;->getCoresFromFileInfo(Ljava/lang/String;)I
move-result v1
if-ne v1, v0, :cond_17
const-string v1, "/sys/devices/system/cpu/present"
.line 3
invoke-static {v1}, Lcn/rongcloud/rtc/utils/DeviceUtils;->getCoresFromFileInfo(Ljava/lang/String;)I
move-result v1
:cond_17
if-ne v1, v0, :cond_1e
.line 4
invoke-static {}, Lcn/rongcloud/rtc/utils/DeviceUtils;->getCoresFromCPUFileList()I
move-result v0
:try_end_1d
.catch Ljava/lang/SecurityException; {:try_start_9 .. :try_end_1d} :catch_1f
.catch Ljava/lang/NullPointerException; {:try_start_9 .. :try_end_1d} :catch_1f
goto :goto_1f
:cond_1e
move v0, v1
:catch_1f
:goto_1f
return v0
.end method
.method public static getProcessCpuRate(I)F
.registers 19
move/from16 v0, p0
.line 1
invoke-static {}, Ljava/lang/System;->currentTimeMillis()J
.line 2
invoke-static {}, Lcn/rongcloud/rtc/utils/DeviceUtils;->getNumberOfCPUCores()I
move-result v1
.line 3
new-array v2, v0, [F
const/4 v3, 0x0
const/4 v4, 0x0
:goto_d
if-ge v4, v0, :cond_44
const/high16 v5, 0x3f800000 # 1.0f
int-to-float v6, v1
div-float/2addr v5, v6
const/4 v6, 0x0
const/4 v7, 0x0
const/4 v8, 0x0
:goto_16
if-ge v7, v1, :cond_3f
.line 4
invoke-static {v7}, Lcn/rongcloud/rtc/utils/DeviceUtils;->getAvaiableCoreCurFreq(I)J
move-result-wide v9
.line 5
invoke-static {v7}, Lcn/rongcloud/rtc/utils/DeviceUtils;->getCoreMaxFreq(I)J
move-result-wide v11
.line 6
invoke-static {v7}, Lcn/rongcloud/rtc/utils/DeviceUtils;->getCoreMinFreq(I)J
move-result-wide v13
const-wide/16 v15, 0x0
cmp-long v17, v11, v15
if-eqz v17, :cond_3e
sub-long/2addr v11, v13
cmp-long v17, v11, v15
if-nez v17, :cond_30
goto :goto_3e
:cond_30
const/high16 v15, 0x42c80000 # 100.0f
mul-float v15, v15, v5
sub-long/2addr v9, v13
long-to-float v9, v9
mul-float v15, v15, v9
long-to-float v9, v11
div-float/2addr v15, v9
add-float/2addr v8, v15
add-int/lit8 v7, v7, 0x1
goto :goto_16
:cond_3e
:goto_3e
return v6
.line 7
:cond_3f
aput v8, v2, v4
add-int/lit8 v4, v4, 0x1
goto :goto_d
.line 8
:cond_44
invoke-static {v2}, Ljava/util/Arrays;->sort([F)V
add-int/lit8 v0, v0, -0x1
.line 9
div-int/lit8 v0, v0, 0x2
aget v0, v2, v0
return v0
.end method
.method private static readProcFile(Ljava/lang/String;)Ljava/lang/String;
.registers 5
const/4 v0, 0x0
.line 1
:try_start_1
new-instance v1, Ljava/io/FileInputStream;
invoke-direct {v1, p0}, Ljava/io/FileInputStream;-><init>(Ljava/lang/String;)V
:try_end_6
.catch Ljava/io/IOException; {:try_start_1 .. :try_end_6} :catch_2f
.catchall {:try_start_1 .. :try_end_6} :catchall_2c
.line 2
:try_start_6
new-instance p0, Ljava/io/BufferedReader;
new-instance v2, Ljava/io/InputStreamReader;
invoke-direct {v2, v1}, Ljava/io/InputStreamReader;-><init>(Ljava/io/InputStream;)V
invoke-direct {p0, v2}, Ljava/io/BufferedReader;-><init>(Ljava/io/Reader;)V
:try_end_10
.catch Ljava/io/IOException; {:try_start_6 .. :try_end_10} :catch_27
.catchall {:try_start_6 .. :try_end_10} :catchall_25
.line 3
:try_start_10
invoke-virtual {p0}, Ljava/io/BufferedReader;->readLine()Ljava/lang/String;
move-result-object v0
:try_end_14
.catch Ljava/io/IOException; {:try_start_10 .. :try_end_14} :catch_20
.catchall {:try_start_10 .. :try_end_14} :catchall_1b
.line 4
invoke-static {v1}, Lcn/rongcloud/rtc/utils/DeviceUtils;->closeStream(Ljava/io/Closeable;)V
.line 5
invoke-static {p0}, Lcn/rongcloud/rtc/utils/DeviceUtils;->closeStream(Ljava/io/Closeable;)V
goto :goto_3c
:catchall_1b
move-exception v0
move-object v3, v0
move-object v0, p0
move-object p0, v3
goto :goto_41
:catch_20
move-exception v0
move-object v3, v1
move-object v1, p0
move-object p0, v0
goto :goto_2a
:catchall_25
move-exception p0
goto :goto_41
:catch_27
move-exception p0
move-object v3, v1
move-object v1, v0
:goto_2a
move-object v0, v3
goto :goto_31
:catchall_2c
move-exception p0
move-object v1, v0
goto :goto_41
:catch_2f
move-exception p0
move-object v1, v0
.line 6
:goto_31
:try_start_31
invoke-virtual {p0}, Ljava/io/IOException;->printStackTrace()V
:try_end_34
.catchall {:try_start_31 .. :try_end_34} :catchall_3d
.line 7
invoke-static {v0}, Lcn/rongcloud/rtc/utils/DeviceUtils;->closeStream(Ljava/io/Closeable;)V
.line 8
invoke-static {v1}, Lcn/rongcloud/rtc/utils/DeviceUtils;->closeStream(Ljava/io/Closeable;)V
const-string v0, ""
:goto_3c
return-object v0
:catchall_3d
move-exception p0
move-object v3, v1
move-object v1, v0
move-object v0, v3
.line 9
:goto_41
invoke-static {v1}, Lcn/rongcloud/rtc/utils/DeviceUtils;->closeStream(Ljava/io/Closeable;)V
.line 10
invoke-static {v0}, Lcn/rongcloud/rtc/utils/DeviceUtils;->closeStream(Ljava/io/Closeable;)V
throw p0
.end method