am 67c0d589
: Merge "bug:3343038 reset mAppsSize everytime ALL package sizes are computed" into honeycomb
* commit '67c0d5899278230ce5c1ec3734c843e8710bbefd': bug:3343038 reset mAppsSize everytime ALL package sizes are computed
This commit is contained in:
@@ -180,8 +180,6 @@ public class MemoryMeasurement {
|
|||||||
|
|
||||||
public static final int MSG_INVALIDATE = 6;
|
public static final int MSG_INVALIDATE = 6;
|
||||||
|
|
||||||
private List<String> mPendingApps = new ArrayList<String>();
|
|
||||||
|
|
||||||
private Object mLock = new Object();
|
private Object mLock = new Object();
|
||||||
|
|
||||||
private IMediaContainerService mDefaultContainer;
|
private IMediaContainerService mDefaultContainer;
|
||||||
@@ -190,7 +188,7 @@ public class MemoryMeasurement {
|
|||||||
|
|
||||||
private volatile boolean mMeasured = false;
|
private volatile boolean mMeasured = false;
|
||||||
|
|
||||||
private long mAppsSize = 0;
|
private StatsObserver mStatsObserver;
|
||||||
|
|
||||||
private final WeakReference<Context> mContext;
|
private final WeakReference<Context> mContext;
|
||||||
|
|
||||||
@@ -287,39 +285,49 @@ public class MemoryMeasurement {
|
|||||||
sendEmptyMessage(MSG_DISCONNECT);
|
sendEmptyMessage(MSG_DISCONNECT);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void queuePackageMeasurementLocked(String packageName) {
|
|
||||||
mPendingApps.add(packageName);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request measurement of each package.
|
* Request measurement of each package.
|
||||||
*
|
*
|
||||||
* @param pm PackageManager instance to query
|
* @param pm PackageManager instance to query
|
||||||
*/
|
*/
|
||||||
public void requestQueuedMeasurementsLocked(PackageManager pm) {
|
public void requestQueuedMeasurementsLocked(PackageManager pm) {
|
||||||
final int N = mPendingApps.size();
|
final List<String> appsList = mStatsObserver.getAppsList();
|
||||||
|
final int N = appsList.size();
|
||||||
for (int i = 0; i < N; i++) {
|
for (int i = 0; i < N; i++) {
|
||||||
pm.getPackageSizeInfo(mPendingApps.get(i), mStatsObserver);
|
pm.getPackageSizeInfo(appsList.get(i), mStatsObserver);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final IPackageStatsObserver.Stub mStatsObserver = new IPackageStatsObserver.Stub() {
|
private class StatsObserver extends IPackageStatsObserver.Stub {
|
||||||
|
private long mAppsSizeForThisStatsObserver = 0;
|
||||||
|
private final List<String> mAppsList = new ArrayList<String>();
|
||||||
public void onGetStatsCompleted(PackageStats stats, boolean succeeded) {
|
public void onGetStatsCompleted(PackageStats stats, boolean succeeded) {
|
||||||
|
if (!mStatsObserver.equals(this)) {
|
||||||
|
// this callback's class object is no longer in use. ignore this callback.
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (succeeded) {
|
if (succeeded) {
|
||||||
mAppsSize += stats.codeSize + stats.dataSize;
|
mAppsSizeForThisStatsObserver += stats.codeSize + stats.dataSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
synchronized (mPendingApps) {
|
synchronized (mAppsList) {
|
||||||
mPendingApps.remove(stats.packageName);
|
mAppsList.remove(stats.packageName);
|
||||||
|
|
||||||
if (mPendingApps.size() == 0) {
|
if (mAppsList.size() == 0) {
|
||||||
mInternalAppsSize = mAppsSize;
|
mInternalAppsSize = mAppsSizeForThisStatsObserver;
|
||||||
|
|
||||||
onInternalMeasurementComplete();
|
onInternalMeasurementComplete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
public void queuePackageMeasurementLocked(String packageName) {
|
||||||
|
mAppsList.add(packageName);
|
||||||
|
}
|
||||||
|
public List<String> getAppsList() {
|
||||||
|
return mAppsList;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void onInternalMeasurementComplete() {
|
private void onInternalMeasurementComplete() {
|
||||||
sendEmptyMessage(MSG_COMPLETED);
|
sendEmptyMessage(MSG_COMPLETED);
|
||||||
@@ -368,10 +376,12 @@ public class MemoryMeasurement {
|
|||||||
.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES
|
.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES
|
||||||
| PackageManager.GET_DISABLED_COMPONENTS);
|
| PackageManager.GET_DISABLED_COMPONENTS);
|
||||||
if (apps != null) {
|
if (apps != null) {
|
||||||
synchronized (mPendingApps) {
|
// initiate measurement of all package sizes. need new StatsObserver object.
|
||||||
|
mStatsObserver = new StatsObserver();
|
||||||
|
synchronized (mStatsObserver.mAppsList) {
|
||||||
for (int i = 0; i < apps.size(); i++) {
|
for (int i = 0; i < apps.size(); i++) {
|
||||||
final ApplicationInfo info = apps.get(i);
|
final ApplicationInfo info = apps.get(i);
|
||||||
queuePackageMeasurementLocked(info.packageName);
|
mStatsObserver.queuePackageMeasurementLocked(info.packageName);
|
||||||
}
|
}
|
||||||
|
|
||||||
requestQueuedMeasurementsLocked(pm);
|
requestQueuedMeasurementsLocked(pm);
|
||||||
|
Reference in New Issue
Block a user