bug:3343038 reset mAppsSize everytime ALL package sizes are computed

Change-Id: I981d84a165777246dd9744b0f8f7bc6fc0cb3e33
This commit is contained in:
Vasu Nori
2011-01-16 14:01:40 -08:00
parent f6bbf11a05
commit d31f4925d1

View File

@@ -180,8 +180,6 @@ public class MemoryMeasurement {
public static final int MSG_INVALIDATE = 6;
private List<String> mPendingApps = new ArrayList<String>();
private Object mLock = new Object();
private IMediaContainerService mDefaultContainer;
@@ -190,7 +188,7 @@ public class MemoryMeasurement {
private volatile boolean mMeasured = false;
private long mAppsSize = 0;
private StatsObserver mStatsObserver;
private final WeakReference<Context> mContext;
@@ -287,39 +285,49 @@ public class MemoryMeasurement {
sendEmptyMessage(MSG_DISCONNECT);
}
public void queuePackageMeasurementLocked(String packageName) {
mPendingApps.add(packageName);
}
/**
* Request measurement of each package.
*
* @param pm PackageManager instance to query
*/
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++) {
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) {
if (!mStatsObserver.equals(this)) {
// this callback's class object is no longer in use. ignore this callback.
return;
}
if (succeeded) {
mAppsSize += stats.codeSize + stats.dataSize;
mAppsSizeForThisStatsObserver += stats.codeSize + stats.dataSize;
}
synchronized (mPendingApps) {
mPendingApps.remove(stats.packageName);
synchronized (mAppsList) {
mAppsList.remove(stats.packageName);
if (mPendingApps.size() == 0) {
mInternalAppsSize = mAppsSize;
if (mAppsList.size() == 0) {
mInternalAppsSize = mAppsSizeForThisStatsObserver;
onInternalMeasurementComplete();
}
}
}
};
public void queuePackageMeasurementLocked(String packageName) {
mAppsList.add(packageName);
}
public List<String> getAppsList() {
return mAppsList;
}
}
private void onInternalMeasurementComplete() {
sendEmptyMessage(MSG_COMPLETED);
@@ -368,10 +376,12 @@ public class MemoryMeasurement {
.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES
| PackageManager.GET_DISABLED_COMPONENTS);
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++) {
final ApplicationInfo info = apps.get(i);
queuePackageMeasurementLocked(info.packageName);
mStatsObserver.queuePackageMeasurementLocked(info.packageName);
}
requestQueuedMeasurementsLocked(pm);