MemoryMonitor.smali
.class public Lorg/webrtc/utils/MemoryMonitor;
.super Ljava/lang/Object;
.source "MemoryMonitor.java"
# static fields
.field private static final CPU_STAT_SAMPLE_PERIOD_MS:I = 0x7d0
.field private static final TAG:Ljava/lang/String;
# instance fields
.field private contextWeakReference:Ljava/lang/ref/WeakReference;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/lang/ref/WeakReference<",
"Landroid/content/Context;",
">;"
}
.end annotation
.end field
.field private executor:Ljava/util/concurrent/ScheduledExecutorService;
.field private free_memory:J
.field private total_memory:J
.field private userMemory:J
# direct methods
.method static constructor <clinit>()V
.registers 1
.line 23
const-class v0, Lorg/webrtc/utils/MemoryMonitor;
invoke-virtual {v0}, Ljava/lang/Class;->getSimpleName()Ljava/lang/String;
move-result-object v0
sput-object v0, Lorg/webrtc/utils/MemoryMonitor;->TAG:Ljava/lang/String;
return-void
.end method
.method public constructor <init>(Landroid/content/Context;)V
.registers 3
.param p1, "context" # Landroid/content/Context;
.line 32
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 33
new-instance v0, Ljava/lang/ref/WeakReference;
invoke-direct {v0, p1}, Ljava/lang/ref/WeakReference;-><init>(Ljava/lang/Object;)V
iput-object v0, p0, Lorg/webrtc/utils/MemoryMonitor;->contextWeakReference:Ljava/lang/ref/WeakReference;
.line 34
return-void
.end method
.method static synthetic access$000(Lorg/webrtc/utils/MemoryMonitor;)V
.registers 1
.param p0, "x0" # Lorg/webrtc/utils/MemoryMonitor;
.line 21
invoke-direct {p0}, Lorg/webrtc/utils/MemoryMonitor;->memoryUtilization()V
return-void
.end method
.method private getFreeMemorySize(Landroid/content/Context;)J
.registers 8
.param p1, "context" # Landroid/content/Context;
.line 89
new-instance v0, Landroid/app/ActivityManager$MemoryInfo;
invoke-direct {v0}, Landroid/app/ActivityManager$MemoryInfo;-><init>()V
.line 90
.local v0, "outInfo":Landroid/app/ActivityManager$MemoryInfo;
const-string v1, "activity"
invoke-virtual {p1, v1}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
move-result-object v1
check-cast v1, Landroid/app/ActivityManager;
.line 91
.local v1, "am":Landroid/app/ActivityManager;
invoke-virtual {v1, v0}, Landroid/app/ActivityManager;->getMemoryInfo(Landroid/app/ActivityManager$MemoryInfo;)V
.line 92
iget-wide v2, v0, Landroid/app/ActivityManager$MemoryInfo;->availMem:J
.line 93
.local v2, "avaliMem":J
const-wide/16 v4, 0x400
div-long v4, v2, v4
return-wide v4
.end method
.method private getTotalMemory()J
.registers 12
.line 58
const-string v0, "/proc/meminfo"
.line 59
.local v0, "memInfoPath":Ljava/lang/String;
const-string v1, ""
.line 60
.local v1, "readTemp":Ljava/lang/String;
const-string v2, ""
.line 61
.local v2, "memTotal":Ljava/lang/String;
const-wide/16 v3, 0x0
.line 63
.local v3, "memory":J
:try_start_8
new-instance v5, Ljava/io/FileReader;
invoke-direct {v5, v0}, Ljava/io/FileReader;-><init>(Ljava/lang/String;)V
.line 64
.local v5, "fr":Ljava/io/FileReader;
new-instance v6, Ljava/io/BufferedReader;
const/16 v7, 0x2000
invoke-direct {v6, v5, v7}, Ljava/io/BufferedReader;-><init>(Ljava/io/Reader;I)V
.line 65
.local v6, "localBufferedReader":Ljava/io/BufferedReader;
:cond_14
:goto_14
invoke-virtual {v6}, Ljava/io/BufferedReader;->readLine()Ljava/lang/String;
move-result-object v7
move-object v1, v7
if-eqz v7, :cond_32
.line 66
const-string v7, "MemTotal"
invoke-virtual {v1, v7}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
move-result v7
if-eqz v7, :cond_14
.line 67
const-string v7, ":"
invoke-virtual {v1, v7}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;
move-result-object v7
.line 68
.local v7, "total":[Ljava/lang/String;
const/4 v8, 0x1
aget-object v8, v7, v8
invoke-virtual {v8}, Ljava/lang/String;->trim()Ljava/lang/String;
move-result-object v8
move-object v2, v8
.line 69
.end local v7 # "total":[Ljava/lang/String;
goto :goto_14
.line 71
:cond_32
invoke-virtual {v6}, Ljava/io/BufferedReader;->close()V
.line 72
const-string v7, " "
invoke-virtual {v2, v7}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;
move-result-object v7
.line 73
.local v7, "memKb":[Ljava/lang/String;
const/4 v8, 0x0
aget-object v8, v7, v8
invoke-virtual {v8}, Ljava/lang/String;->trim()Ljava/lang/String;
move-result-object v8
move-object v2, v8
.line 74
sget-object v8, Lorg/webrtc/utils/MemoryMonitor;->TAG:Ljava/lang/String;
new-instance v9, Ljava/lang/StringBuilder;
invoke-direct {v9}, Ljava/lang/StringBuilder;-><init>()V
const-string v10, "memTotal: "
invoke-virtual {v9, v10}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v9, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v9}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v9
invoke-static {v8, v9}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
.line 75
invoke-static {v2}, Ljava/lang/Long;->parseLong(Ljava/lang/String;)J
move-result-wide v8
:try_end_5d
.catch Ljava/io/IOException; {:try_start_8 .. :try_end_5d} :catch_5f
move-wide v3, v8
.line 78
.end local v5 # "fr":Ljava/io/FileReader;
.end local v6 # "localBufferedReader":Ljava/io/BufferedReader;
.end local v7 # "memKb":[Ljava/lang/String;
goto :goto_7a
.line 76
:catch_5f
move-exception v5
.line 77
.local v5, "e":Ljava/io/IOException;
sget-object v6, Lorg/webrtc/utils/MemoryMonitor;->TAG:Ljava/lang/String;
new-instance v7, Ljava/lang/StringBuilder;
invoke-direct {v7}, Ljava/lang/StringBuilder;-><init>()V
const-string v8, "IOException: "
invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v5}, Ljava/io/IOException;->getMessage()Ljava/lang/String;
move-result-object v8
invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v7
invoke-static {v6, v7}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
.line 79
.end local v5 # "e":Ljava/io/IOException;
:goto_7a
return-wide v3
.end method
.method private getUserMemorySize(Landroid/content/Context;)I
.registers 9
.param p1, "context" # Landroid/content/Context;
.line 105
const-string v0, "activity"
invoke-virtual {p1, v0}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Landroid/app/ActivityManager;
.line 106
.local v0, "am":Landroid/app/ActivityManager;
invoke-virtual {v0}, Landroid/app/ActivityManager;->getRunningAppProcesses()Ljava/util/List;
move-result-object v1
.line 107
.local v1, "pids":Ljava/util/List;, "Ljava/util/List<Landroid/app/ActivityManager$RunningAppProcessInfo;>;"
const/4 v2, 0x0
.line 108
.local v2, "processid":I
const/4 v3, 0x0
.local v3, "i":I
:goto_e
invoke-interface {v1}, Ljava/util/List;->size()I
move-result v4
if-ge v3, v4, :cond_29
.line 109
invoke-interface {v1, v3}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v4
check-cast v4, Landroid/app/ActivityManager$RunningAppProcessInfo;
.line 110
.local v4, "info":Landroid/app/ActivityManager$RunningAppProcessInfo;
iget-object v5, v4, Landroid/app/ActivityManager$RunningAppProcessInfo;->processName:Ljava/lang/String;
const-string v6, "com.aliyun.sophon.demo"
invoke-virtual {v5, v6}, Ljava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z
move-result v5
if-eqz v5, :cond_26
.line 111
iget v2, v4, Landroid/app/ActivityManager$RunningAppProcessInfo;->pid:I
.line 108
.end local v4 # "info":Landroid/app/ActivityManager$RunningAppProcessInfo;
:cond_26
add-int/lit8 v3, v3, 0x1
goto :goto_e
.line 115
.end local v3 # "i":I
:cond_29
const/4 v3, 0x1
new-array v3, v3, [I
const/4 v4, 0x0
aput v2, v3, v4
.line 116
.local v3, "myMempid":[I
invoke-virtual {v0, v3}, Landroid/app/ActivityManager;->getProcessMemoryInfo([I)[Landroid/os/Debug$MemoryInfo;
move-result-object v5
.line 117
.local v5, "memoryInfo":[Landroid/os/Debug$MemoryInfo;
aget-object v6, v5, v4
invoke-virtual {v6}, Landroid/os/Debug$MemoryInfo;->getTotalSharedDirty()I
.line 118
aget-object v4, v5, v4
invoke-virtual {v4}, Landroid/os/Debug$MemoryInfo;->getTotalPss()I
move-result v4
.line 119
.local v4, "memSize":I
return v4
.end method
.method private memoryUtilization()V
.registers 3
.line 149
invoke-direct {p0}, Lorg/webrtc/utils/MemoryMonitor;->getTotalMemory()J
move-result-wide v0
iput-wide v0, p0, Lorg/webrtc/utils/MemoryMonitor;->total_memory:J
.line 150
iget-object v0, p0, Lorg/webrtc/utils/MemoryMonitor;->contextWeakReference:Ljava/lang/ref/WeakReference;
invoke-virtual {v0}, Ljava/lang/ref/WeakReference;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Landroid/content/Context;
invoke-direct {p0, v0}, Lorg/webrtc/utils/MemoryMonitor;->getFreeMemorySize(Landroid/content/Context;)J
move-result-wide v0
iput-wide v0, p0, Lorg/webrtc/utils/MemoryMonitor;->free_memory:J
.line 151
iget-object v0, p0, Lorg/webrtc/utils/MemoryMonitor;->contextWeakReference:Ljava/lang/ref/WeakReference;
invoke-virtual {v0}, Ljava/lang/ref/WeakReference;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Landroid/content/Context;
invoke-direct {p0, v0}, Lorg/webrtc/utils/MemoryMonitor;->getUserMemorySize(Landroid/content/Context;)I
move-result v0
int-to-long v0, v0
iput-wide v0, p0, Lorg/webrtc/utils/MemoryMonitor;->userMemory:J
.line 152
return-void
.end method
.method private scheduleMemoryUtilizationTask()V
.registers 9
.line 133
iget-object v0, p0, Lorg/webrtc/utils/MemoryMonitor;->executor:Ljava/util/concurrent/ScheduledExecutorService;
if-eqz v0, :cond_a
.line 134
invoke-interface {v0}, Ljava/util/concurrent/ScheduledExecutorService;->shutdownNow()Ljava/util/List;
.line 135
const/4 v0, 0x0
iput-object v0, p0, Lorg/webrtc/utils/MemoryMonitor;->executor:Ljava/util/concurrent/ScheduledExecutorService;
.line 138
:cond_a
invoke-static {}, Ljava/util/concurrent/Executors;->newSingleThreadScheduledExecutor()Ljava/util/concurrent/ScheduledExecutorService;
move-result-object v1
iput-object v1, p0, Lorg/webrtc/utils/MemoryMonitor;->executor:Ljava/util/concurrent/ScheduledExecutorService;
.line 140
new-instance v2, Lorg/webrtc/utils/MemoryMonitor$1;
invoke-direct {v2, p0}, Lorg/webrtc/utils/MemoryMonitor$1;-><init>(Lorg/webrtc/utils/MemoryMonitor;)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 146
.local v0, "possiblyIgnoredError":Ljava/util/concurrent/Future;, "Ljava/util/concurrent/Future<*>;"
return-void
.end method
# virtual methods
.method public declared-synchronized getMemoryUsageCurrent()Ljava/lang/String;
.registers 4
monitor-enter p0
.line 123
:try_start_1
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v1, "Memory\nTotal_Memory:"
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-wide v1, p0, Lorg/webrtc/utils/MemoryMonitor;->total_memory:J
invoke-virtual {v0, v1, v2}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
const-string v1, "\nFree_Memory"
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-wide v1, p0, Lorg/webrtc/utils/MemoryMonitor;->free_memory:J
invoke-virtual {v0, v1, v2}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
const-string v1, "\nUserMemoryByPid"
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-wide v1, p0, Lorg/webrtc/utils/MemoryMonitor;->userMemory:J
invoke-virtual {v0, v1, v2}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
:try_end_28
.catchall {:try_start_1 .. :try_end_28} :catchall_2a
.line 124
.local v0, "memory":Ljava/lang/String;
monitor-exit p0
return-object v0
.line 122
.end local v0 # "memory":Ljava/lang/String;
.end local p0 # "this":Lorg/webrtc/utils/MemoryMonitor;
:catchall_2a
move-exception v0
monitor-exit p0
throw v0
.end method
.method public declared-synchronized getMemoryUsageCurrentByPid()J
.registers 3
monitor-enter p0
.line 128
:try_start_1
iget-wide v0, p0, Lorg/webrtc/utils/MemoryMonitor;->userMemory:J
:try_end_3
.catchall {:try_start_1 .. :try_end_3} :catchall_5
monitor-exit p0
return-wide v0
.end local p0 # "this":Lorg/webrtc/utils/MemoryMonitor;
:catchall_5
move-exception v0
monitor-exit p0
throw v0
.end method
.method public pause()V
.registers 3
.line 37
iget-object v0, p0, Lorg/webrtc/utils/MemoryMonitor;->executor:Ljava/util/concurrent/ScheduledExecutorService;
if-eqz v0, :cond_13
.line 38
sget-object v0, Lorg/webrtc/utils/MemoryMonitor;->TAG:Ljava/lang/String;
const-string v1, "pause"
invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
.line 39
iget-object v0, p0, Lorg/webrtc/utils/MemoryMonitor;->executor:Ljava/util/concurrent/ScheduledExecutorService;
invoke-interface {v0}, Ljava/util/concurrent/ScheduledExecutorService;->shutdownNow()Ljava/util/List;
.line 40
const/4 v0, 0x0
iput-object v0, p0, Lorg/webrtc/utils/MemoryMonitor;->executor:Ljava/util/concurrent/ScheduledExecutorService;
.line 42
:cond_13
return-void
.end method
.method public resume()V
.registers 3
.line 45
sget-object v0, Lorg/webrtc/utils/MemoryMonitor;->TAG:Ljava/lang/String;
const-string v1, "resume"
invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
.line 46
const-wide/16 v0, 0x0
iput-wide v0, p0, Lorg/webrtc/utils/MemoryMonitor;->total_memory:J
.line 47
iput-wide v0, p0, Lorg/webrtc/utils/MemoryMonitor;->free_memory:J
.line 48
iput-wide v0, p0, Lorg/webrtc/utils/MemoryMonitor;->userMemory:J
.line 49
invoke-direct {p0}, Lorg/webrtc/utils/MemoryMonitor;->scheduleMemoryUtilizationTask()V
.line 50
return-void
.end method