Loading core/res/res/values/config.xml +3 −0 Original line number Diff line number Diff line Loading @@ -4834,4 +4834,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> core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -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" /> Loading services/core/java/com/android/server/apphibernation/AppHibernationService.java +13 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 */); Loading Loading @@ -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"); if (mOatArtifactDeletionEnabled) { mPackageManagerInternal.deleteOatArtifactsOfPackage(packageName); } state.hibernated = true; Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); } Loading Loading @@ -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 { Loading Loading @@ -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); } } } services/tests/servicestests/src/com/android/server/apphibernation/AppHibernationServiceTest.java +5 −0 Original line number Diff line number Diff line Loading @@ -282,5 +282,10 @@ public final class AppHibernationServiceTest { public HibernationStateDiskStore<UserLevelState> getUserLevelDiskStore(int userId) { return mock(HibernationStateDiskStore.class); } @Override public boolean isOatArtifactDeletionEnabled() { return true; } } } Loading
core/res/res/values/config.xml +3 −0 Original line number Diff line number Diff line Loading @@ -4834,4 +4834,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>
core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -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" /> Loading
services/core/java/com/android/server/apphibernation/AppHibernationService.java +13 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 */); Loading Loading @@ -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"); if (mOatArtifactDeletionEnabled) { mPackageManagerInternal.deleteOatArtifactsOfPackage(packageName); } state.hibernated = true; Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); } Loading Loading @@ -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 { Loading Loading @@ -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); } } }
services/tests/servicestests/src/com/android/server/apphibernation/AppHibernationServiceTest.java +5 −0 Original line number Diff line number Diff line Loading @@ -282,5 +282,10 @@ public final class AppHibernationServiceTest { public HibernationStateDiskStore<UserLevelState> getUserLevelDiskStore(int userId) { return mock(HibernationStateDiskStore.class); } @Override public boolean isOatArtifactDeletionEnabled() { return true; } } }