summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/WeightWatcher.java
diff options
context:
space:
mode:
authorDaniel Sandler <dsandler@android.com>2013-06-25 01:37:11 -0400
committerDaniel Sandler <dsandler@android.com>2013-06-25 13:20:36 -0400
commitb61a35b809666bd58695c988106844b54df3ce6b (patch)
treec1af503476cf237aa8f800bbd07cf4d1cf195823 /src/com/android/launcher3/WeightWatcher.java
parent49883409ff9bbdbaa327c98cdd75e109b6a46be7 (diff)
downloadandroid_packages_apps_Trebuchet-b61a35b809666bd58695c988106844b54df3ce6b.tar.gz
android_packages_apps_Trebuchet-b61a35b809666bd58695c988106844b54df3ce6b.tar.bz2
android_packages_apps_Trebuchet-b61a35b809666bd58695c988106844b54df3ce6b.zip
Handle pids coming and going in the memory tracker.
Change-Id: If705e62c876243299adc7ed451a419c552b556b2
Diffstat (limited to 'src/com/android/launcher3/WeightWatcher.java')
-rw-r--r--src/com/android/launcher3/WeightWatcher.java28
1 files changed, 26 insertions, 2 deletions
diff --git a/src/com/android/launcher3/WeightWatcher.java b/src/com/android/launcher3/WeightWatcher.java
index 91d79a814..410856a63 100644
--- a/src/com/android/launcher3/WeightWatcher.java
+++ b/src/com/android/launcher3/WeightWatcher.java
@@ -46,6 +46,13 @@ public class WeightWatcher extends LinearLayout {
private static final int MSG_STOP = 2;
private static final int MSG_UPDATE = 3;
+ static int indexOf(int[] a, int x) {
+ for (int i=0; i<a.length; i++) {
+ if (a[i] == x) return i;
+ }
+ return -1;
+ }
+
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message m) {
@@ -57,9 +64,17 @@ public class WeightWatcher extends LinearLayout {
mHandler.removeMessages(MSG_UPDATE);
break;
case MSG_UPDATE:
+ int[] pids = mMemoryService.getTrackedProcesses();
+
final int N = getChildCount();
- for (int i=0; i<N; i++) {
- ((ProcessWatcher) getChildAt(i)).update();
+ if (pids.length != N) initViews();
+ else for (int i=0; i<N; i++) {
+ ProcessWatcher pw = ((ProcessWatcher) getChildAt(i));
+ if (indexOf(pids, pw.getPid()) < 0) {
+ initViews();
+ break;
+ }
+ pw.update();
}
mHandler.sendEmptyMessageDelayed(MSG_UPDATE, UPDATE_RATE);
break;
@@ -90,6 +105,7 @@ public class WeightWatcher extends LinearLayout {
}
public void initViews() {
+ removeAllViews();
int[] processes = mMemoryService.getTrackedProcesses();
for (int i=0; i<processes.length; i++) {
final ProcessWatcher v = new ProcessWatcher(getContext());
@@ -184,6 +200,14 @@ public class WeightWatcher extends LinearLayout {
public void setPid(int pid) {
mPid = pid;
mMemInfo = mMemoryService.getMemInfo(mPid);
+ if (mMemInfo == null) {
+ Log.v("WeightWatcher", "Missing info for pid " + mPid + ", removing view: " + this);
+ initViews();
+ }
+ }
+
+ public int getPid() {
+ return mPid;
}
public void update() {