summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Kevin Han <kevhan@google.com> 2021-03-29 20:07:44 -0700
committer Kevin Han <kevhan@google.com> 2021-03-29 21:20:31 -0700
commit0da64913b9a5561d75b8d2f534f7173c52fcb9dc (patch)
tree46c9ba9f19ba7a0dabdff1edf1134a34c6d7ed8a
parentaa029a25262074834a6610b84632db5299d575da (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
-rw-r--r--core/res/res/values/config.xml3
-rw-r--r--core/res/res/values/symbols.xml1
-rw-r--r--services/core/java/com/android/server/apphibernation/AppHibernationService.java14
-rw-r--r--services/tests/servicestests/src/com/android/server/apphibernation/AppHibernationServiceTest.java5
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;
+ }
}
}