diff options
author | Daniel Sandler <dsandler@android.com> | 2013-07-07 17:16:49 -0500 |
---|---|---|
committer | Daniel Sandler <dsandler@android.com> | 2013-07-07 23:13:51 -0500 |
commit | 0adfc5a75580dcf3294da95b378a27c4bcd015fb (patch) | |
tree | dc0a5ee64376ba344ef587106367f7c635e4f7af | |
parent | a29949d2efae23166e95817a068aff517f81cde2 (diff) | |
download | android_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
-rw-r--r-- | src/com/android/launcher3/MemoryDumpActivity.java | 5 | ||||
-rw-r--r-- | src/com/android/launcher3/MemoryTracker.java | 28 | ||||
-rw-r--r-- | src/com/android/launcher3/WeightWatcher.java | 6 |
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 ); |