From 0da64913b9a5561d75b8d2f534f7173c52fcb9dc Mon Sep 17 00:00:00 2001 From: Kevin Han Date: Mon, 29 Mar 2021 20:07:44 -0700 Subject: 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 --- core/res/res/values/config.xml | 3 +++ core/res/res/values/symbols.xml | 1 + .../server/apphibernation/AppHibernationService.java | 14 +++++++++++++- .../server/apphibernation/AppHibernationServiceTest.java | 5 +++++ 4 files changed, 22 insertions(+), 1 deletion(-) 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 @@ false true true + + + true 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 @@ + 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 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 getGlobalLevelDiskStore(); HibernationStateDiskStore 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 getUserLevelDiskStore(int userId) { return mock(HibernationStateDiskStore.class); } + + @Override + public boolean isOatArtifactDeletionEnabled() { + return true; + } } } -- cgit v1.2.3-59-g8ed1b