summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDaniel Sandler <dsandler@android.com>2013-07-07 17:16:49 -0500
committerDaniel Sandler <dsandler@android.com>2013-07-07 23:13:51 -0500
commit0adfc5a75580dcf3294da95b378a27c4bcd015fb (patch)
treedc0a5ee64376ba344ef587106367f7c635e4f7af /src
parenta29949d2efae23166e95817a068aff517f81cde2 (diff)
downloadandroid_packages_apps_Trebuchet-0adfc5a75580dcf3294da95b378a27c4bcd015fb.tar.gz
android_packages_apps_Trebuchet-0adfc5a75580dcf3294da95b378a27c4bcd015fb.tar.bz2
android_packages_apps_Trebuchet-0adfc5a75580dcf3294da95b378a27c4bcd015fb.zip
Further MemoryTracker robustness:
- grab a copy of the tracked processes list in the dumper - scan running processes when memorytracker starts to catch pids that may have survived a crash of the tracker's process - use RunningServiceInfo to figure out roughly how long a service scanned in this way has been alive Change-Id: I861642f07183e3945f7a7a41e1e5144567e17e13
Diffstat (limited to 'src')
-rw-r--r--src/com/android/launcher3/MemoryDumpActivity.java5
-rw-r--r--src/com/android/launcher3/MemoryTracker.java28
-rw-r--r--src/com/android/launcher3/WeightWatcher.java6
3 files changed, 32 insertions, 7 deletions
diff --git a/src/com/android/launcher3/MemoryDumpActivity.java b/src/com/android/launcher3/MemoryDumpActivity.java
index 447f0dd01..d79be8007 100644
--- a/src/com/android/launcher3/MemoryDumpActivity.java
+++ b/src/com/android/launcher3/MemoryDumpActivity.java
@@ -28,6 +28,7 @@ import android.util.Log;
import java.io.*;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@@ -85,7 +86,9 @@ public class MemoryDumpActivity extends Activity {
final ArrayList<String> paths = new ArrayList<String>();
final int myPid = android.os.Process.myPid();
- for (int pid : tracker.getTrackedProcesses()) {
+ final int[] pids_orig = tracker.getTrackedProcesses();
+ final int[] pids_copy = Arrays.copyOf(pids_orig, pids_orig.length);
+ for (int pid : pids_copy) {
MemoryTracker.ProcessMemInfo info = tracker.getMemInfo(pid);
if (info != null) {
body.append("pid ").append(pid).append(":")
diff --git a/src/com/android/launcher3/MemoryTracker.java b/src/com/android/launcher3/MemoryTracker.java
index 87a73f3b5..d3bb77c77 100644
--- a/src/com/android/launcher3/MemoryTracker.java
+++ b/src/com/android/launcher3/MemoryTracker.java
@@ -26,6 +26,7 @@ import android.util.Log;
import android.util.LongSparseArray;
import java.util.ArrayList;
+import java.util.List;
public class MemoryTracker extends Service {
public static final String TAG = MemoryTracker.class.getSimpleName();
@@ -47,10 +48,10 @@ public class MemoryTracker extends Service {
//= new Meminfo[(int) (30 * 60 / (UPDATE_RATE / 1000))]; // 30 minutes
public long max = 1;
public int head = 0;
- public ProcessMemInfo(int pid, String name) {
+ public ProcessMemInfo(int pid, String name, long start) {
this.pid = pid;
this.name = name;
- this.startTime = System.currentTimeMillis();
+ this.startTime = start;
}
public long getUptime() {
return System.currentTimeMillis() - startTime;
@@ -99,7 +100,7 @@ public class MemoryTracker extends Service {
return mPidsArray;
}
- public void startTrackingProcess(int pid, String name) {
+ public void startTrackingProcess(int pid, String name, long start) {
synchronized (mLock) {
final Long lpid = new Long(pid);
@@ -114,7 +115,7 @@ public class MemoryTracker extends Service {
mPidsArray[i] = p;
sb.append(p); sb.append(" ");
}
- mData.put(pid, new ProcessMemInfo(pid, name));
+ mData.put(pid, new ProcessMemInfo(pid, name, start));
Log.v(TAG, sb.toString());
}
}
@@ -149,6 +150,22 @@ public class MemoryTracker extends Service {
@Override
public void onCreate() {
mAm = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
+
+ // catch up in case we crashed but other processes are still running
+ List<ActivityManager.RunningServiceInfo> svcs = mAm.getRunningServices(256);
+ for (ActivityManager.RunningServiceInfo svc : svcs) {
+ if (svc.service.getPackageName().equals(getPackageName())) {
+ startTrackingProcess(svc.pid, svc.process, System.currentTimeMillis() - (SystemClock.elapsedRealtime() - svc.activeSince));
+ }
+ }
+
+ List<ActivityManager.RunningAppProcessInfo> procs = mAm.getRunningAppProcesses();
+ for (ActivityManager.RunningAppProcessInfo proc : procs) {
+ final String pname = proc.processName;
+ if (pname.startsWith(getPackageName())) {
+ startTrackingProcess(proc.pid, pname, System.currentTimeMillis());
+ }
+ }
}
@Override
@@ -164,7 +181,8 @@ public class MemoryTracker extends Service {
if (ACTION_START_TRACKING.equals(intent.getAction())) {
final int pid = intent.getIntExtra("pid", -1);
final String name = intent.getStringExtra("name");
- startTrackingProcess(pid, name);
+ final long start = intent.getLongExtra("start", System.currentTimeMillis());
+ startTrackingProcess(pid, name, start);
}
}
diff --git a/src/com/android/launcher3/WeightWatcher.java b/src/com/android/launcher3/WeightWatcher.java
index 2eac063c0..70b8afea8 100644
--- a/src/com/android/launcher3/WeightWatcher.java
+++ b/src/com/android/launcher3/WeightWatcher.java
@@ -213,7 +213,11 @@ public class WeightWatcher extends LinearLayout {
public void update() {
//Log.v("WeightWatcher.ProcessWatcher",
// "MSG_UPDATE pss=" + mMemInfo.currentPss);
- mText.setText("(" + mMemInfo.name + "/" + mPid + ") up " + getUptimeString()
+ mText.setText("(" + mPid
+ + (mPid == android.os.Process.myPid()
+ ? "/A" // app
+ : "/S") // service
+ + ") up " + getUptimeString()
+ " P=" + mMemInfo.currentPss
+ " U=" + mMemInfo.currentUss
);