diff options
| author | 2021-03-29 20:07:44 -0700 | |
|---|---|---|
| committer | 2021-03-29 21:20:31 -0700 | |
| commit | 0da64913b9a5561d75b8d2f534f7173c52fcb9dc (patch) | |
| tree | 46c9ba9f19ba7a0dabdff1edf1134a34c6d7ed8a | |
| parent | aa029a25262074834a6610b84632db5299d575da (diff) | |
Add OEM-configurable flag for OAT artifact deletion
As per feedback from OEM partners, we are adding a configurable build
time flag that determines whether hibernation performs OAT artifact
deletion. This flag is only for this specific sub-optimization the other
parts of hibernation would occur regardless of the flag.
Bug: 183563260
Test: atest AppHibernationServiceTest
Change-Id: Ic798f3ed4c340b84f4c97f118e07767d36211a97
4 files changed, 22 insertions, 1 deletions
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index b6c22bb68086..368ebcc950ef 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -4838,4 +4838,7 @@ <bool name="config_cecRcProfileSourceMediaContextSensitiveMenuHandled_default">false</bool> <bool name="config_cecRcProfileSourceMediaContextSensitiveMenuNotHandled_allowed">true</bool> <bool name="config_cecRcProfileSourceMediaContextSensitiveMenuNotHandled_default">true</bool> + + <!-- Whether app hibernation deletes OAT artifact files as part of global hibernation. --> + <bool name="config_hibernationDeletesOatArtifactsEnabled">true</bool> </resources> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index b5f476475b84..f611c25902f4 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -480,6 +480,7 @@ <java-symbol type="string" name="config_bandwidthEstimateSource" /> <java-symbol type="integer" name="config_smartSelectionInitializedTimeoutMillis" /> <java-symbol type="integer" name="config_smartSelectionInitializingTimeoutMillis" /> + <java-symbol type="bool" name="config_hibernationDeletesOatArtifactsEnabled"/> <java-symbol type="color" name="tab_indicator_text_v4" /> diff --git a/services/core/java/com/android/server/apphibernation/AppHibernationService.java b/services/core/java/com/android/server/apphibernation/AppHibernationService.java index 5a99e0e77a6c..a12b2130b7dc 100644 --- a/services/core/java/com/android/server/apphibernation/AppHibernationService.java +++ b/services/core/java/com/android/server/apphibernation/AppHibernationService.java @@ -106,6 +106,7 @@ public final class AppHibernationService extends SystemService { private final HibernationStateDiskStore<GlobalLevelState> mGlobalLevelHibernationDiskStore; private final Injector mInjector; private final Executor mBackgroundExecutor; + private final boolean mOatArtifactDeletionEnabled; @VisibleForTesting boolean mIsServiceEnabled; @@ -133,6 +134,7 @@ public final class AppHibernationService extends SystemService { mUserManager = injector.getUserManager(); mGlobalLevelHibernationDiskStore = injector.getGlobalLevelDiskStore(); mBackgroundExecutor = injector.getBackgroundExecutor(); + mOatArtifactDeletionEnabled = injector.isOatArtifactDeletionEnabled(); mInjector = injector; final Context userAllContext = mContext.createContextAsUser(UserHandle.ALL, 0 /* flags */); @@ -371,7 +373,9 @@ public final class AppHibernationService extends SystemService { @GuardedBy("mLock") private void hibernatePackageGlobally(@NonNull String packageName, GlobalLevelState state) { Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "hibernatePackageGlobally"); - mPackageManagerInternal.deleteOatArtifactsOfPackage(packageName); + if (mOatArtifactDeletionEnabled) { + mPackageManagerInternal.deleteOatArtifactsOfPackage(packageName); + } state.hibernated = true; Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); } @@ -744,6 +748,8 @@ public final class AppHibernationService extends SystemService { HibernationStateDiskStore<GlobalLevelState> getGlobalLevelDiskStore(); HibernationStateDiskStore<UserLevelState> getUserLevelDiskStore(int userId); + + boolean isOatArtifactDeletionEnabled(); } private static final class InjectorImpl implements Injector { @@ -801,5 +807,11 @@ public final class AppHibernationService extends SystemService { return new HibernationStateDiskStore<>( dir, mUserLevelHibernationProto, mScheduledExecutorService); } + + @Override + public boolean isOatArtifactDeletionEnabled() { + return mContext.getResources().getBoolean( + com.android.internal.R.bool.config_hibernationDeletesOatArtifactsEnabled); + } } } diff --git a/services/tests/servicestests/src/com/android/server/apphibernation/AppHibernationServiceTest.java b/services/tests/servicestests/src/com/android/server/apphibernation/AppHibernationServiceTest.java index 0dbf3fe0cea3..9a430e4a0f86 100644 --- a/services/tests/servicestests/src/com/android/server/apphibernation/AppHibernationServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/apphibernation/AppHibernationServiceTest.java @@ -282,5 +282,10 @@ public final class AppHibernationServiceTest { public HibernationStateDiskStore<UserLevelState> getUserLevelDiskStore(int userId) { return mock(HibernationStateDiskStore.class); } + + @Override + public boolean isOatArtifactDeletionEnabled() { + return true; + } } } |