From 709758d4482a3010a278cfa294daec668c69b733 Mon Sep 17 00:00:00 2001 From: Michael Wachenschwanz Date: Wed, 17 Jun 2020 16:00:03 -0700 Subject: Small Fix to App Usage logging Relocated MOVE_TO_FOREGROUND so that it will get logged for Activity Paused to Activity Resumed transitions. Also moved some calls into PackageManager outside of the UsageStats lock Bug: 159165822 Test: builds and flashes Change-Id: I8e9e96ae1fc3b77535514df2422ce3b7935d850f --- .../android/server/usage/UsageStatsService.java | 37 ++++++++++++++-------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java index 060ed51951e4..a98da959aff9 100644 --- a/services/usage/java/com/android/server/usage/UsageStatsService.java +++ b/services/usage/java/com/android/server/usage/UsageStatsService.java @@ -780,6 +780,22 @@ public class UsageStatsService extends SystemService implements * Called by the Binder stub. */ void reportEvent(Event event, int userId) { + final int uid; + // Acquire uid outside of mLock for events that need it + switch (event.mEventType) { + case Event.ACTIVITY_RESUMED: + case Event.ACTIVITY_PAUSED: + uid = mPackageManagerInternal.getPackageUid(event.mPackage, 0, userId); + break; + default: + uid = 0; + } + + if (event.mPackage != null + && mPackageManagerInternal.isPackageEphemeral(userId, event.mPackage)) { + event.mFlags |= Event.FLAG_IS_PACKAGE_INSTANT_APP; + } + synchronized (mLock) { // This should never be called directly when the user is locked if (!mUserUnlockedStates.get(userId)) { @@ -792,13 +808,15 @@ public class UsageStatsService extends SystemService implements final long elapsedRealtime = SystemClock.elapsedRealtime(); - if (event.mPackage != null - && mPackageManagerInternal.isPackageEphemeral(userId, event.mPackage)) { - event.mFlags |= Event.FLAG_IS_PACKAGE_INSTANT_APP; - } - switch (event.mEventType) { case Event.ACTIVITY_RESUMED: + FrameworkStatsLog.write( + FrameworkStatsLog.APP_USAGE_EVENT_OCCURRED, + uid, + event.mPackage, + event.mClass, + FrameworkStatsLog + .APP_USAGE_EVENT_OCCURRED__EVENT_TYPE__MOVE_TO_FOREGROUND); // check if this activity has already been resumed if (mVisibleActivities.get(event.mInstanceId) != null) break; mVisibleActivities.put(event.mInstanceId, @@ -816,13 +834,6 @@ public class UsageStatsService extends SystemService implements } catch (IllegalArgumentException iae) { Slog.e(TAG, "Failed to note usage start", iae); } - FrameworkStatsLog.write( - FrameworkStatsLog.APP_USAGE_EVENT_OCCURRED, - mPackageManagerInternal.getPackageUid(event.mPackage, 0, userId), - event.mPackage, - event.mClass, - FrameworkStatsLog - .APP_USAGE_EVENT_OCCURRED__EVENT_TYPE__MOVE_TO_FOREGROUND); break; case Event.ACTIVITY_PAUSED: if (event.mTaskRootPackage == null) { @@ -839,7 +850,7 @@ public class UsageStatsService extends SystemService implements } FrameworkStatsLog.write( FrameworkStatsLog.APP_USAGE_EVENT_OCCURRED, - mPackageManagerInternal.getPackageUid(event.mPackage, 0, userId), + uid, event.mPackage, event.mClass, FrameworkStatsLog -- cgit v1.2.3-59-g8ed1b