Loading apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java +87 −87 Original line number Diff line number Diff line Loading @@ -438,12 +438,9 @@ public class AppStandbyController implements AppStandbyInternal { } if (!packageName.equals(providerPkgName)) { synchronized (mAppIdleLock) { AppUsageHistory appUsage = mAppIdleHistory.reportUsage(packageName, userId, STANDBY_BUCKET_ACTIVE, REASON_SUB_USAGE_SYNC_ADAPTER, 0, elapsedRealtime + mSyncAdapterTimeoutMillis); maybeInformListeners(packageName, userId, elapsedRealtime, appUsage.currentBucket, appUsage.bucketingReason, false); reportNoninteractiveUsageLocked(packageName, userId, STANDBY_BUCKET_ACTIVE, REASON_SUB_USAGE_SYNC_ADAPTER, elapsedRealtime, mSyncAdapterTimeoutMillis); } } } catch (PackageManager.NameNotFoundException e) { Loading Loading @@ -474,12 +471,8 @@ public class AppStandbyController implements AppStandbyInternal { final long elapsedRealtime = mInjector.elapsedRealtime(); synchronized (mAppIdleLock) { AppUsageHistory appUsage = mAppIdleHistory.reportUsage(packageName, userId, bucketToPromote, usageReason, 0, elapsedRealtime + durationMillis); maybeInformListeners(packageName, userId, elapsedRealtime, appUsage.currentBucket, appUsage.bucketingReason, false); reportNoninteractiveUsageLocked(packageName, userId, bucketToPromote, usageReason, elapsedRealtime, durationMillis); } } Loading @@ -492,12 +485,9 @@ public class AppStandbyController implements AppStandbyInternal { mAppIdleHistory.getAppStandbyBucket(packageName, userId, elapsedRealtime); if (currentBucket == STANDBY_BUCKET_NEVER) { // Bring the app out of the never bucket AppUsageHistory appUsage = mAppIdleHistory.reportUsage(packageName, userId, STANDBY_BUCKET_WORKING_SET, REASON_SUB_USAGE_UNEXEMPTED_SYNC_SCHEDULED, 0, elapsedRealtime + mUnexemptedSyncScheduledTimeoutMillis); maybeInformListeners(packageName, userId, elapsedRealtime, appUsage.currentBucket, appUsage.bucketingReason, false); reportNoninteractiveUsageLocked(packageName, userId, STANDBY_BUCKET_WORKING_SET, REASON_SUB_USAGE_UNEXEMPTED_SYNC_SCHEDULED, elapsedRealtime, mUnexemptedSyncScheduledTimeoutMillis); } } } Loading @@ -508,13 +498,21 @@ public class AppStandbyController implements AppStandbyInternal { final long elapsedRealtime = mInjector.elapsedRealtime(); synchronized (mAppIdleLock) { AppUsageHistory appUsage = mAppIdleHistory.reportUsage(packageName, userId, STANDBY_BUCKET_ACTIVE, REASON_SUB_USAGE_EXEMPTED_SYNC_START, 0, elapsedRealtime + mExemptedSyncStartTimeoutMillis); maybeInformListeners(packageName, userId, elapsedRealtime, appUsage.currentBucket, appUsage.bucketingReason, false); reportNoninteractiveUsageLocked(packageName, userId, STANDBY_BUCKET_ACTIVE, REASON_SUB_USAGE_EXEMPTED_SYNC_START, elapsedRealtime, mExemptedSyncStartTimeoutMillis); } } private void reportNoninteractiveUsageLocked(String packageName, int userId, int bucket, int subReason, long elapsedRealtime, long nextCheckDelay) { final AppUsageHistory appUsage = mAppIdleHistory.reportUsage(packageName, userId, bucket, subReason, 0, elapsedRealtime + nextCheckDelay); mHandler.sendMessageDelayed( mHandler.obtainMessage(MSG_CHECK_PACKAGE_IDLE_STATE, userId, -1, packageName), nextCheckDelay); maybeInformListeners(packageName, userId, elapsedRealtime, appUsage.currentBucket, appUsage.bucketingReason, false); } @Override Loading Loading @@ -741,14 +739,7 @@ public class AppStandbyController implements AppStandbyInternal { @Override public void reportEvent(UsageEvents.Event event, long elapsedRealtime, int userId) { if (!mAppIdleEnabled) return; synchronized (mAppIdleLock) { final String pkg = event.getPackageName(); final int eventType = event.getEventType(); // TODO: Ideally this should call isAppIdleFiltered() to avoid calling back // about apps that are on some kind of whitelist anyway. final boolean previouslyIdle = mAppIdleHistory.isIdle( pkg, userId, elapsedRealtime); // Inform listeners if necessary if ((eventType == UsageEvents.Event.ACTIVITY_RESUMED || eventType == UsageEvents.Event.ACTIVITY_PAUSED || eventType == UsageEvents.Event.SYSTEM_INTERACTION Loading @@ -757,12 +748,23 @@ public class AppStandbyController implements AppStandbyInternal { || eventType == UsageEvents.Event.SLICE_PINNED || eventType == UsageEvents.Event.SLICE_PINNED_PRIV || eventType == UsageEvents.Event.FOREGROUND_SERVICE_START)) { synchronized (mAppIdleLock) { reportEventLocked(event.getPackageName(), eventType, elapsedRealtime, userId); } } } private void reportEventLocked(String pkg, int eventType, long elapsedRealtime, int userId) { // TODO: Ideally this should call isAppIdleFiltered() to avoid calling back // about apps that are on some kind of whitelist anyway. final boolean previouslyIdle = mAppIdleHistory.isIdle( pkg, userId, elapsedRealtime); final AppUsageHistory appHistory = mAppIdleHistory.getAppUsageHistory( pkg, userId, elapsedRealtime); final int prevBucket = appHistory.currentBucket; final int prevBucketReason = appHistory.bucketingReason; final long nextCheckTime; final long nextCheckDelay; final int subReason = usageEventToSubReason(eventType); final int reason = REASON_MAIN_USAGE | subReason; if (eventType == UsageEvents.Event.NOTIFICATION_SEEN Loading @@ -771,29 +773,29 @@ public class AppStandbyController implements AppStandbyInternal { mAppIdleHistory.reportUsage(appHistory, pkg, STANDBY_BUCKET_WORKING_SET, subReason, 0, elapsedRealtime + mNotificationSeenTimeoutMillis); nextCheckTime = mNotificationSeenTimeoutMillis; nextCheckDelay = mNotificationSeenTimeoutMillis; } else if (eventType == UsageEvents.Event.SYSTEM_INTERACTION) { mAppIdleHistory.reportUsage(appHistory, pkg, STANDBY_BUCKET_ACTIVE, subReason, 0, elapsedRealtime + mSystemInteractionTimeoutMillis); nextCheckTime = mSystemInteractionTimeoutMillis; nextCheckDelay = mSystemInteractionTimeoutMillis; } else if (eventType == UsageEvents.Event.FOREGROUND_SERVICE_START) { // Only elevate bucket if this is the first usage of the app if (prevBucket != STANDBY_BUCKET_NEVER) return; mAppIdleHistory.reportUsage(appHistory, pkg, STANDBY_BUCKET_ACTIVE, subReason, 0, elapsedRealtime + mInitialForegroundServiceStartTimeoutMillis); nextCheckTime = mInitialForegroundServiceStartTimeoutMillis; nextCheckDelay = mInitialForegroundServiceStartTimeoutMillis; } else { mAppIdleHistory.reportUsage(appHistory, pkg, STANDBY_BUCKET_ACTIVE, subReason, elapsedRealtime, elapsedRealtime + mStrongUsageTimeoutMillis); nextCheckTime = mStrongUsageTimeoutMillis; nextCheckDelay = mStrongUsageTimeoutMillis; } if (appHistory.currentBucket != prevBucket) { mHandler.sendMessageDelayed( mHandler.obtainMessage(MSG_CHECK_PACKAGE_IDLE_STATE, userId, -1, pkg), nextCheckTime); nextCheckDelay); final boolean userStartedInteracting = appHistory.currentBucket == STANDBY_BUCKET_ACTIVE && (prevBucketReason & REASON_MAIN_MASK) != REASON_MAIN_USAGE; Loading @@ -805,8 +807,6 @@ public class AppStandbyController implements AppStandbyInternal { notifyBatteryStats(pkg, userId, false); } } } } private int usageEventToSubReason(int eventType) { switch (eventType) { Loading Loading
apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java +87 −87 Original line number Diff line number Diff line Loading @@ -438,12 +438,9 @@ public class AppStandbyController implements AppStandbyInternal { } if (!packageName.equals(providerPkgName)) { synchronized (mAppIdleLock) { AppUsageHistory appUsage = mAppIdleHistory.reportUsage(packageName, userId, STANDBY_BUCKET_ACTIVE, REASON_SUB_USAGE_SYNC_ADAPTER, 0, elapsedRealtime + mSyncAdapterTimeoutMillis); maybeInformListeners(packageName, userId, elapsedRealtime, appUsage.currentBucket, appUsage.bucketingReason, false); reportNoninteractiveUsageLocked(packageName, userId, STANDBY_BUCKET_ACTIVE, REASON_SUB_USAGE_SYNC_ADAPTER, elapsedRealtime, mSyncAdapterTimeoutMillis); } } } catch (PackageManager.NameNotFoundException e) { Loading Loading @@ -474,12 +471,8 @@ public class AppStandbyController implements AppStandbyInternal { final long elapsedRealtime = mInjector.elapsedRealtime(); synchronized (mAppIdleLock) { AppUsageHistory appUsage = mAppIdleHistory.reportUsage(packageName, userId, bucketToPromote, usageReason, 0, elapsedRealtime + durationMillis); maybeInformListeners(packageName, userId, elapsedRealtime, appUsage.currentBucket, appUsage.bucketingReason, false); reportNoninteractiveUsageLocked(packageName, userId, bucketToPromote, usageReason, elapsedRealtime, durationMillis); } } Loading @@ -492,12 +485,9 @@ public class AppStandbyController implements AppStandbyInternal { mAppIdleHistory.getAppStandbyBucket(packageName, userId, elapsedRealtime); if (currentBucket == STANDBY_BUCKET_NEVER) { // Bring the app out of the never bucket AppUsageHistory appUsage = mAppIdleHistory.reportUsage(packageName, userId, STANDBY_BUCKET_WORKING_SET, REASON_SUB_USAGE_UNEXEMPTED_SYNC_SCHEDULED, 0, elapsedRealtime + mUnexemptedSyncScheduledTimeoutMillis); maybeInformListeners(packageName, userId, elapsedRealtime, appUsage.currentBucket, appUsage.bucketingReason, false); reportNoninteractiveUsageLocked(packageName, userId, STANDBY_BUCKET_WORKING_SET, REASON_SUB_USAGE_UNEXEMPTED_SYNC_SCHEDULED, elapsedRealtime, mUnexemptedSyncScheduledTimeoutMillis); } } } Loading @@ -508,13 +498,21 @@ public class AppStandbyController implements AppStandbyInternal { final long elapsedRealtime = mInjector.elapsedRealtime(); synchronized (mAppIdleLock) { AppUsageHistory appUsage = mAppIdleHistory.reportUsage(packageName, userId, STANDBY_BUCKET_ACTIVE, REASON_SUB_USAGE_EXEMPTED_SYNC_START, 0, elapsedRealtime + mExemptedSyncStartTimeoutMillis); maybeInformListeners(packageName, userId, elapsedRealtime, appUsage.currentBucket, appUsage.bucketingReason, false); reportNoninteractiveUsageLocked(packageName, userId, STANDBY_BUCKET_ACTIVE, REASON_SUB_USAGE_EXEMPTED_SYNC_START, elapsedRealtime, mExemptedSyncStartTimeoutMillis); } } private void reportNoninteractiveUsageLocked(String packageName, int userId, int bucket, int subReason, long elapsedRealtime, long nextCheckDelay) { final AppUsageHistory appUsage = mAppIdleHistory.reportUsage(packageName, userId, bucket, subReason, 0, elapsedRealtime + nextCheckDelay); mHandler.sendMessageDelayed( mHandler.obtainMessage(MSG_CHECK_PACKAGE_IDLE_STATE, userId, -1, packageName), nextCheckDelay); maybeInformListeners(packageName, userId, elapsedRealtime, appUsage.currentBucket, appUsage.bucketingReason, false); } @Override Loading Loading @@ -741,14 +739,7 @@ public class AppStandbyController implements AppStandbyInternal { @Override public void reportEvent(UsageEvents.Event event, long elapsedRealtime, int userId) { if (!mAppIdleEnabled) return; synchronized (mAppIdleLock) { final String pkg = event.getPackageName(); final int eventType = event.getEventType(); // TODO: Ideally this should call isAppIdleFiltered() to avoid calling back // about apps that are on some kind of whitelist anyway. final boolean previouslyIdle = mAppIdleHistory.isIdle( pkg, userId, elapsedRealtime); // Inform listeners if necessary if ((eventType == UsageEvents.Event.ACTIVITY_RESUMED || eventType == UsageEvents.Event.ACTIVITY_PAUSED || eventType == UsageEvents.Event.SYSTEM_INTERACTION Loading @@ -757,12 +748,23 @@ public class AppStandbyController implements AppStandbyInternal { || eventType == UsageEvents.Event.SLICE_PINNED || eventType == UsageEvents.Event.SLICE_PINNED_PRIV || eventType == UsageEvents.Event.FOREGROUND_SERVICE_START)) { synchronized (mAppIdleLock) { reportEventLocked(event.getPackageName(), eventType, elapsedRealtime, userId); } } } private void reportEventLocked(String pkg, int eventType, long elapsedRealtime, int userId) { // TODO: Ideally this should call isAppIdleFiltered() to avoid calling back // about apps that are on some kind of whitelist anyway. final boolean previouslyIdle = mAppIdleHistory.isIdle( pkg, userId, elapsedRealtime); final AppUsageHistory appHistory = mAppIdleHistory.getAppUsageHistory( pkg, userId, elapsedRealtime); final int prevBucket = appHistory.currentBucket; final int prevBucketReason = appHistory.bucketingReason; final long nextCheckTime; final long nextCheckDelay; final int subReason = usageEventToSubReason(eventType); final int reason = REASON_MAIN_USAGE | subReason; if (eventType == UsageEvents.Event.NOTIFICATION_SEEN Loading @@ -771,29 +773,29 @@ public class AppStandbyController implements AppStandbyInternal { mAppIdleHistory.reportUsage(appHistory, pkg, STANDBY_BUCKET_WORKING_SET, subReason, 0, elapsedRealtime + mNotificationSeenTimeoutMillis); nextCheckTime = mNotificationSeenTimeoutMillis; nextCheckDelay = mNotificationSeenTimeoutMillis; } else if (eventType == UsageEvents.Event.SYSTEM_INTERACTION) { mAppIdleHistory.reportUsage(appHistory, pkg, STANDBY_BUCKET_ACTIVE, subReason, 0, elapsedRealtime + mSystemInteractionTimeoutMillis); nextCheckTime = mSystemInteractionTimeoutMillis; nextCheckDelay = mSystemInteractionTimeoutMillis; } else if (eventType == UsageEvents.Event.FOREGROUND_SERVICE_START) { // Only elevate bucket if this is the first usage of the app if (prevBucket != STANDBY_BUCKET_NEVER) return; mAppIdleHistory.reportUsage(appHistory, pkg, STANDBY_BUCKET_ACTIVE, subReason, 0, elapsedRealtime + mInitialForegroundServiceStartTimeoutMillis); nextCheckTime = mInitialForegroundServiceStartTimeoutMillis; nextCheckDelay = mInitialForegroundServiceStartTimeoutMillis; } else { mAppIdleHistory.reportUsage(appHistory, pkg, STANDBY_BUCKET_ACTIVE, subReason, elapsedRealtime, elapsedRealtime + mStrongUsageTimeoutMillis); nextCheckTime = mStrongUsageTimeoutMillis; nextCheckDelay = mStrongUsageTimeoutMillis; } if (appHistory.currentBucket != prevBucket) { mHandler.sendMessageDelayed( mHandler.obtainMessage(MSG_CHECK_PACKAGE_IDLE_STATE, userId, -1, pkg), nextCheckTime); nextCheckDelay); final boolean userStartedInteracting = appHistory.currentBucket == STANDBY_BUCKET_ACTIVE && (prevBucketReason & REASON_MAIN_MASK) != REASON_MAIN_USAGE; Loading @@ -805,8 +807,6 @@ public class AppStandbyController implements AppStandbyInternal { notifyBatteryStats(pkg, userId, false); } } } } private int usageEventToSubReason(int eventType) { switch (eventType) { Loading