From 0d07ec01ea344aaa1968799d62873b8202b5a338 Mon Sep 17 00:00:00 2001 From: Zhen Zhang Date: Thu, 15 Apr 2021 14:12:59 -0700 Subject: [PATCH] Refactor isAppHibernationEnabled check in AppHibernationService Directly return the static field to avoid querying DeviceConfig everytime. Bug: 181183614 Test: atest AppHibernationServiceTest Test: atest CtsWindowManagerDeviceTestCases:ActivityMetricsLoggerTests Test: atest CtsStatsdAtomHostTestCases:AppStartStatsTests Change-Id: Id01a701dadb76655a24effbd9d3ce011d7f2f686 --- .../apphibernation/AppHibernationService.java | 14 +++++++++----- .../android/server/wm/ActivityMetricsLogger.java | 5 ++--- .../apphibernation/AppHibernationServiceTest.java | 2 +- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/services/core/java/com/android/server/apphibernation/AppHibernationService.java b/services/core/java/com/android/server/apphibernation/AppHibernationService.java index 540589bd3bfda..fd829fae57596 100644 --- a/services/core/java/com/android/server/apphibernation/AppHibernationService.java +++ b/services/core/java/com/android/server/apphibernation/AppHibernationService.java @@ -109,7 +109,7 @@ public final class AppHibernationService extends SystemService { private final boolean mOatArtifactDeletionEnabled; @VisibleForTesting - boolean mIsServiceEnabled; + static boolean sIsServiceEnabled; /** * Initializes the system service. @@ -165,7 +165,7 @@ public final class AppHibernationService extends SystemService { }); } if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY) { - mIsServiceEnabled = isAppHibernationEnabled(); + sIsServiceEnabled = isDeviceConfigAppHibernationEnabled(); DeviceConfig.addOnPropertiesChangedListener( NAMESPACE_APP_HIBERNATION, ActivityThread.currentApplication().getMainExecutor(), @@ -536,7 +536,7 @@ public final class AppHibernationService extends SystemService { private void onDeviceConfigChanged(Properties properties) { for (String key : properties.getKeyset()) { if (TextUtils.equals(KEY_APP_HIBERNATION_ENABLED, key)) { - mIsServiceEnabled = isAppHibernationEnabled(); + sIsServiceEnabled = isDeviceConfigAppHibernationEnabled(); break; } } @@ -574,10 +574,10 @@ public final class AppHibernationService extends SystemService { } private boolean checkHibernationEnabled(String methodName) { - if (!mIsServiceEnabled) { + if (!sIsServiceEnabled) { Slog.w(TAG, String.format("Attempted to call %s on unsupported device.", methodName)); } - return mIsServiceEnabled; + return sIsServiceEnabled; } private void dump(PrintWriter pw) { @@ -725,6 +725,10 @@ public final class AppHibernationService extends SystemService { * @return true if enabled, false otherwise */ public static boolean isAppHibernationEnabled() { + return sIsServiceEnabled; + } + + private static boolean isDeviceConfigAppHibernationEnabled() { return DeviceConfig.getBoolean( NAMESPACE_APP_HIBERNATION, KEY_APP_HIBERNATION_ENABLED, diff --git a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java index f021072871235..561f1ad75c12c 100644 --- a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java +++ b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java @@ -167,7 +167,6 @@ class ActivityMetricsLogger { @VisibleForTesting static final int LAUNCH_OBSERVER_ACTIVITY_RECORD_PROTO_CHUNK_SIZE = 512; private final ArrayMap mLastHibernationStates = new ArrayMap<>(); private AppHibernationManagerInternal mAppHibernationManagerInternal; - private boolean mIsAppHibernationEnabled; /** * The information created when an intent is incoming but we do not yet know whether it will be @@ -796,8 +795,8 @@ class ActivityMetricsLogger { @Nullable private AppHibernationManagerInternal getAppHibernationManagerInternal() { + if (!AppHibernationService.isAppHibernationEnabled()) return null; if (mAppHibernationManagerInternal == null) { - mIsAppHibernationEnabled = AppHibernationService.isAppHibernationEnabled(); mAppHibernationManagerInternal = LocalServices.getService(AppHibernationManagerInternal.class); } @@ -810,7 +809,7 @@ class ActivityMetricsLogger { */ void notifyBeforePackageUnstopped(@NonNull String packageName) { final AppHibernationManagerInternal ahmInternal = getAppHibernationManagerInternal(); - if (ahmInternal != null && mIsAppHibernationEnabled) { + if (ahmInternal != null) { mLastHibernationStates.put(packageName, ahmInternal.isHibernatingGlobally(packageName)); } } 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 9a430e4a0f869..f280aea928518 100644 --- a/services/tests/servicestests/src/com/android/server/apphibernation/AppHibernationServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/apphibernation/AppHibernationServiceTest.java @@ -123,7 +123,7 @@ public final class AppHibernationServiceTest { doReturn(true).when(mUserManager).isUserUnlockingOrUnlocked(USER_ID_1); mAppHibernationService.onUserUnlocking(new SystemService.TargetUser(userInfo)); - mAppHibernationService.mIsServiceEnabled = true; + mAppHibernationService.sIsServiceEnabled = true; } @Test