summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/MemoryTracker.java
diff options
context:
space:
mode:
authorDaniel Sandler <dsandler@android.com>2013-07-07 20:09:05 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-07-07 20:09:05 +0000
commita29949d2efae23166e95817a068aff517f81cde2 (patch)
tree33cbfd2cf05ea733ae11a87fd4cc126a09070307 /src/com/android/launcher3/MemoryTracker.java
parent70c987a0fea53583b22650bed6251e2dcc68bdac (diff)
parent2566b574d8db2d2285cf6592219f165230db5fc9 (diff)
downloadandroid_packages_apps_Trebuchet-a29949d2efae23166e95817a068aff517f81cde2.tar.gz
android_packages_apps_Trebuchet-a29949d2efae23166e95817a068aff517f81cde2.tar.bz2
android_packages_apps_Trebuchet-a29949d2efae23166e95817a068aff517f81cde2.zip
Merge changes I454a09c4,Ic0113388 into jb-ub-gel-agar
* changes: Add mutex around memory tracker data. Don't dump hprof for other processes.
Diffstat (limited to 'src/com/android/launcher3/MemoryTracker.java')
-rw-r--r--src/com/android/launcher3/MemoryTracker.java73
1 files changed, 38 insertions, 35 deletions
diff --git a/src/com/android/launcher3/MemoryTracker.java b/src/com/android/launcher3/MemoryTracker.java
index 8595d55be..87a73f3b5 100644
--- a/src/com/android/launcher3/MemoryTracker.java
+++ b/src/com/android/launcher3/MemoryTracker.java
@@ -59,6 +59,7 @@ public class MemoryTracker extends Service {
public final LongSparseArray<ProcessMemInfo> mData = new LongSparseArray<ProcessMemInfo>();
public final ArrayList<Long> mPids = new ArrayList<Long>();
private int[] mPidsArray = new int[0];
+ private final Object mLock = new Object();
Handler mHandler = new Handler() {
@Override
@@ -99,48 +100,50 @@ public class MemoryTracker extends Service {
}
public void startTrackingProcess(int pid, String name) {
- final Long lpid = new Long(pid);
-
- if (mPids.contains(lpid)) return;
-
- mPids.add(lpid);
- final int N = mPids.size();
- mPidsArray = new int[N];
- StringBuffer sb = new StringBuffer("Now tracking processes: ");
- for (int i=0; i<N; i++) {
- final int p = mPids.get(i).intValue();
- mPidsArray[i] = p;
- sb.append(p); sb.append(" ");
+ synchronized (mLock) {
+ final Long lpid = new Long(pid);
+
+ if (mPids.contains(lpid)) return;
+
+ mPids.add(lpid);
+ final int N = mPids.size();
+ mPidsArray = new int[N];
+ StringBuffer sb = new StringBuffer("Now tracking processes: ");
+ for (int i=0; i<N; i++) {
+ final int p = mPids.get(i).intValue();
+ mPidsArray[i] = p;
+ sb.append(p); sb.append(" ");
+ }
+ mData.put(pid, new ProcessMemInfo(pid, name));
+ Log.v(TAG, sb.toString());
}
- mData.put(pid, new ProcessMemInfo(pid, name));
- Log.v(TAG, sb.toString());
}
void update() {
- Debug.MemoryInfo[] dinfos = mAm.getProcessMemoryInfo(mPidsArray);
- for (int i=0; i<dinfos.length; i++) {
- Debug.MemoryInfo dinfo = dinfos[i];
- final long pid = mPids.get(i).intValue();
- final ProcessMemInfo info = mData.get(pid);
- info.head = (info.head+1) % info.pss.length;
- info.pss[info.head] = info.currentPss = dinfo.getTotalPss();
- info.uss[info.head] = info.currentUss = dinfo.getTotalPrivateDirty();
- if (info.currentPss > info.max) info.max = info.currentPss;
- if (info.currentUss > info.max) info.max = info.currentUss;
- // Log.v(TAG, "update: pid " + pid + " pss=" + info.currentPss + " uss=" + info.currentUss);
- if (info.currentPss == 0) {
- Log.v(TAG, "update: pid " + pid + " has pss=0, it probably died");
- mData.remove(pid);
+ synchronized (mLock) {
+ Debug.MemoryInfo[] dinfos = mAm.getProcessMemoryInfo(mPidsArray);
+ for (int i=0; i<dinfos.length; i++) {
+ Debug.MemoryInfo dinfo = dinfos[i];
+ final long pid = mPids.get(i).intValue();
+ final ProcessMemInfo info = mData.get(pid);
+ info.head = (info.head+1) % info.pss.length;
+ info.pss[info.head] = info.currentPss = dinfo.getTotalPss();
+ info.uss[info.head] = info.currentUss = dinfo.getTotalPrivateDirty();
+ if (info.currentPss > info.max) info.max = info.currentPss;
+ if (info.currentUss > info.max) info.max = info.currentUss;
+ // Log.v(TAG, "update: pid " + pid + " pss=" + info.currentPss + " uss=" + info.currentUss);
+ if (info.currentPss == 0) {
+ Log.v(TAG, "update: pid " + pid + " has pss=0, it probably died");
+ mData.remove(pid);
+ }
}
- }
- for (int i=mPids.size()-1; i>=0; i--) {
- final long pid = mPids.get(i).intValue();
- if (mData.get(pid) == null) {
- mPids.remove(i);
+ for (int i=mPids.size()-1; i>=0; i--) {
+ final long pid = mPids.get(i).intValue();
+ if (mData.get(pid) == null) {
+ mPids.remove(i);
+ }
}
}
-
- // XXX: notify listeners
}
@Override