From ead4b44c0a116f1c954a73c6a86639244a9ab377 Mon Sep 17 00:00:00 2001 From: Zhen Zhang Date: Tue, 4 May 2021 14:22:57 -0700 Subject: [PATCH] Log GlobalHibernatedApps atom Log the pull atom -- GlobalHibernatedApps in AppHibernationService Bug: 186159449 Test: atest AppHibernationService Test: statsd_testdrive 10109, pulled data is correct Change-Id: Iefbdf6206b2615c5486aa6b22c0ef901bf2dcd76 --- .../apphibernation/AppHibernationService.java | 65 +++++++++++++------ 1 file changed, 44 insertions(+), 21 deletions(-) diff --git a/services/core/java/com/android/server/apphibernation/AppHibernationService.java b/services/core/java/com/android/server/apphibernation/AppHibernationService.java index 9396241c3f982..78ff67a63dcbc 100644 --- a/services/core/java/com/android/server/apphibernation/AppHibernationService.java +++ b/services/core/java/com/android/server/apphibernation/AppHibernationService.java @@ -182,12 +182,18 @@ public final class AppHibernationService extends SystemService { NAMESPACE_APP_HIBERNATION, ActivityThread.currentApplication().getMainExecutor(), this::onDeviceConfigChanged); - getContext().getSystemService(StatsManager.class) - .setPullAtomCallback( - FrameworkStatsLog.USER_LEVEL_HIBERNATED_APPS, - /* metadata */ null, // use default PullAtomMetadata values - mBackgroundExecutor, - new StatsPullAtomCallbackImpl()); + final StatsManager statsManager = getContext().getSystemService(StatsManager.class); + final StatsPullAtomCallbackImpl pullAtomCallback = new StatsPullAtomCallbackImpl(); + statsManager.setPullAtomCallback( + FrameworkStatsLog.USER_LEVEL_HIBERNATED_APPS, + /* metadata */ null, // use default PullAtomMetadata values + mBackgroundExecutor, + pullAtomCallback); + statsManager.setPullAtomCallback( + FrameworkStatsLog.GLOBAL_HIBERNATED_APPS, + /* metadata */ null, // use default PullAtomMetadata values + mBackgroundExecutor, + pullAtomCallback); } } @@ -291,6 +297,7 @@ public final class AppHibernationService extends SystemService { stateSnapshot.packageName, userIdSnapshot, stateSnapshot.hibernated, + // TODO(b/187224817): This isn't the expected value right now. stateSnapshot.lastUnhibernatedMs); }); List states = new ArrayList<>(mUserStates.get(userId).values()); @@ -938,23 +945,39 @@ public final class AppHibernationService extends SystemService { private final class StatsPullAtomCallbackImpl implements StatsPullAtomCallback { @Override public int onPullAtom(int atomTag, @NonNull List data) { - if (atomTag != FrameworkStatsLog.USER_LEVEL_HIBERNATED_APPS) { - return StatsManager.PULL_SKIP; + if (!isAppHibernationEnabled() + && (atomTag == FrameworkStatsLog.USER_LEVEL_HIBERNATED_APPS + || atomTag == FrameworkStatsLog.GLOBAL_HIBERNATED_APPS)) { + return StatsManager.PULL_SUCCESS; } - if (isAppHibernationEnabled()) { - List userInfos = mUserManager.getAliveUsers(); - final int numUsers = userInfos.size(); - for (int i = 0; i < numUsers; ++i) { - final int userId = userInfos.get(i).id; - if (mUserManager.isUserUnlockingOrUnlocked(userId)) { - data.add( - FrameworkStatsLog.buildStatsEvent( - atomTag, - getHibernatingPackagesForUser(userId).size(), - userId) - ); + + switch (atomTag) { + case FrameworkStatsLog.USER_LEVEL_HIBERNATED_APPS: + List userInfos = mUserManager.getAliveUsers(); + final int numUsers = userInfos.size(); + for (int i = 0; i < numUsers; ++i) { + final int userId = userInfos.get(i).id; + if (mUserManager.isUserUnlockingOrUnlocked(userId)) { + data.add( + FrameworkStatsLog.buildStatsEvent( + atomTag, + getHibernatingPackagesForUser(userId).size(), + userId) + ); + } } - } + break; + case FrameworkStatsLog.GLOBAL_HIBERNATED_APPS: + int hibernatedAppCount = 0; + synchronized (mLock) { + for (GlobalLevelState state : mGlobalHibernationStates.values()) { + if (state.hibernated) hibernatedAppCount++; + } + } + data.add(FrameworkStatsLog.buildStatsEvent(atomTag, hibernatedAppCount)); + break; + default: + return StatsManager.PULL_SKIP; } return StatsManager.PULL_SUCCESS; }