diff options
| author | 2016-04-07 10:59:47 +0000 | |
|---|---|---|
| committer | 2016-04-07 10:59:48 +0000 | |
| commit | 70f08d9eb176b47568b92c9486c2ac702911a864 (patch) | |
| tree | 2374068857022446298f7f8a397f0c53df783919 | |
| parent | d15191076dca0500bb623dbf317d09eb2634c31e (diff) | |
| parent | ae4cde1ccebd41c9ca1af555c0a1a2580c3d7e1c (diff) | |
Merge "Do not update idle apps on OTA" into nyc-dev
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 33 | ||||
| -rw-r--r-- | services/usage/java/com/android/server/usage/UsageStatsService.java | 41 |
2 files changed, 46 insertions, 28 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index fbf4c0cb9cc0..31eac1f3e0ec 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -110,6 +110,7 @@ import android.app.admin.DevicePolicyManagerInternal; import android.app.admin.IDevicePolicyManager; import android.app.admin.SecurityLog; import android.app.backup.IBackupManager; +import android.app.usage.UsageStatsManager; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; @@ -7005,11 +7006,28 @@ public class PackageManagerService extends IPackageManager.Stub { pkgs = PackageManagerServiceUtils.getPackagesForDexopt(mPackages.values(), this); } + UsageStatsManager usageMgr = + (UsageStatsManager) mContext.getSystemService(Context.USAGE_STATS_SERVICE); + int curr = 0; int total = pkgs.size(); for (PackageParser.Package pkg : pkgs) { curr++; + if (!PackageDexOptimizer.canOptimizePackage(pkg)) { + if (DEBUG_DEXOPT) { + Log.i(TAG, "Skipping update of of non-optimizable app " + pkg.packageName); + } + continue; + } + + if (!causeFirstBoot && usageMgr.isAppInactive(pkg.packageName)) { + if (DEBUG_DEXOPT) { + Log.i(TAG, "Skipping update of of idle app " + pkg.packageName); + } + continue; + } + if (DEBUG_DEXOPT) { Log.i(TAG, "Extracting app " + curr + " of " + total + ": " + pkg.packageName); } @@ -7023,16 +7041,11 @@ public class PackageManagerService extends IPackageManager.Stub { } } - if (PackageDexOptimizer.canOptimizePackage(pkg)) { - // If the cache was pruned, any compiled odex files will likely be out of date - // and would have to be patched (would be SELF_PATCHOAT, which is deprecated). - // Instead, force the extraction in this case. - performDexOpt(pkg.packageName, - null /* instructionSet */, - false /* checkProfiles */, - causeFirstBoot ? REASON_FIRST_BOOT : REASON_BOOT, - false /* force */); - } + performDexOpt(pkg.packageName, + null /* instructionSet */, + false /* checkProfiles */, + causeFirstBoot ? REASON_FIRST_BOOT : REASON_BOOT, + false /* force */); } } diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java index beec40f8b0fa..0aeb96f52181 100644 --- a/services/usage/java/com/android/server/usage/UsageStatsService.java +++ b/services/usage/java/com/android/server/usage/UsageStatsService.java @@ -144,6 +144,7 @@ public class UsageStatsService extends SystemService implements private long mLastAppIdleParoledTime; private volatile boolean mPendingOneTimeCheckIdleStates; + private boolean mSystemServicesReady = false; @GuardedBy("mLock") private AppIdleHistory mAppIdleHistory; @@ -232,6 +233,8 @@ public class UsageStatsService extends SystemService implements if (mPendingOneTimeCheckIdleStates) { postOneTimeCheckIdleStates(); } + + mSystemServicesReady = true; } else if (phase == PHASE_BOOT_COMPLETED) { setAppIdleParoled(getContext().getSystemService(BatteryManager.class).isCharging()); } @@ -810,28 +813,30 @@ public class UsageStatsService extends SystemService implements // retain this for safety). return false; } - try { - // We allow all whitelisted apps, including those that don't want to be whitelisted - // for idle mode, because app idle (aka app standby) is really not as big an issue - // for controlling who participates vs. doze mode. - if (mDeviceIdleController.isPowerSaveWhitelistExceptIdleApp(packageName)) { - return false; + if (mSystemServicesReady) { + try { + // We allow all whitelisted apps, including those that don't want to be whitelisted + // for idle mode, because app idle (aka app standby) is really not as big an issue + // for controlling who participates vs. doze mode. + if (mDeviceIdleController.isPowerSaveWhitelistExceptIdleApp(packageName)) { + return false; + } + } catch (RemoteException re) { + throw re.rethrowFromSystemServer(); } - } catch (RemoteException re) { - throw re.rethrowFromSystemServer(); - } - if (isActiveDeviceAdmin(packageName, userId)) { - return false; - } + if (isActiveDeviceAdmin(packageName, userId)) { + return false; + } - if (isActiveNetworkScorer(packageName)) { - return false; - } + if (isActiveNetworkScorer(packageName)) { + return false; + } - if (mAppWidgetManager != null - && mAppWidgetManager.isBoundWidgetPackage(packageName, userId)) { - return false; + if (mAppWidgetManager != null + && mAppWidgetManager.isBoundWidgetPackage(packageName, userId)) { + return false; + } } if (!isAppIdleUnfiltered(packageName, userId, elapsedRealtime)) { |