diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 1cf121cc9fabd..1d1dc2b47a85d 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -870,6 +870,8 @@ public final class ActivityStackSupervisor implements DisplayListener { } } } + // Send launch end powerhint when idle + mService.mActivityStarter.sendPowerHintForLaunchEndIfNeeded(); return true; } @@ -2755,6 +2757,9 @@ public final class ActivityStackSupervisor implements DisplayListener { } } + // Send launch end powerhint before going sleep + mService.mActivityStarter.sendPowerHintForLaunchEndIfNeeded(); + for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) { final ArrayList stacks = mActivityDisplays.valueAt(displayNdx).mStacks; for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) { @@ -4422,7 +4427,7 @@ public final class ActivityStackSupervisor implements DisplayListener { // Work Challenge is present) let startActivityInPackage handle the intercepting. if (!mService.mUserController.shouldConfirmCredentials(task.userId) && task.getRootActivity() != null) { - mService.mActivityStarter.sendPowerHintForLaunchIfNeeded(true /* forceSend */); + mService.mActivityStarter.sendPowerHintForLaunchStartIfNeeded(true /* forceSend */); mActivityMetricsLogger.notifyActivityLaunching(); mService.moveTaskToFrontLocked(task.taskId, 0, bOptions); mActivityMetricsLogger.notifyActivityLaunched(ActivityManager.START_TASK_TO_FRONT, diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java index b022c4f409a13..b89cae7ca4bde 100644 --- a/services/core/java/com/android/server/am/ActivityStarter.java +++ b/services/core/java/com/android/server/am/ActivityStarter.java @@ -212,8 +212,6 @@ class ActivityStarter { mKeepCurTransition = false; mAvoidMoveToFront = false; - mPowerHintSent = false; - mVoiceSession = null; mVoiceInteractor = null; } @@ -947,8 +945,8 @@ class ActivityStarter { return START_SUCCESS; } - void sendPowerHintForLaunchIfNeeded(boolean forceSend) { - // Trigger launch power hint if activity is not in the current task + void sendPowerHintForLaunchStartIfNeeded(boolean forceSend) { + // Trigger launch power hint if activity being launched is not in the current task final ActivityStack focusStack = mSupervisor.getFocusedStack(); final ActivityRecord curTop = (focusStack == null) ? null : focusStack.topRunningNonDelayedActivityLocked(mNotTop); @@ -956,11 +954,19 @@ class ActivityStarter { curTop.task != null && mStartActivity != null && curTop.task != mStartActivity.task )) && mService.mLocalPowerManager != null) { - mService.mLocalPowerManager.powerHint(PowerManagerInternal.POWER_HINT_LAUNCH, 0); + mService.mLocalPowerManager.powerHint(PowerManagerInternal.POWER_HINT_LAUNCH, 1); mPowerHintSent = true; } } + void sendPowerHintForLaunchEndIfNeeded() { + // Trigger launch power hint if activity is launched + if (mPowerHintSent && mService.mLocalPowerManager != null) { + mService.mLocalPowerManager.powerHint(PowerManagerInternal.POWER_HINT_LAUNCH, 0); + mPowerHintSent = false; + } + } + private int startActivityUnchecked(final ActivityRecord r, ActivityRecord sourceRecord, IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor, int startFlags, boolean doResume, ActivityOptions options, TaskRecord inTask) { @@ -1022,7 +1028,7 @@ class ActivityStarter { } } - sendPowerHintForLaunchIfNeeded(false /* forceSend */); + sendPowerHintForLaunchStartIfNeeded(false /* forceSend */); mReusedActivity = setTargetStackAndMoveToFrontIfNeeded(mReusedActivity); @@ -1147,7 +1153,7 @@ class ActivityStarter { EventLogTags.AM_CREATE_ACTIVITY, mStartActivity, mStartActivity.task); mTargetStack.mLastPausedActivity = null; - sendPowerHintForLaunchIfNeeded(false /* forceSend */); + sendPowerHintForLaunchStartIfNeeded(false /* forceSend */); mTargetStack.startActivityLocked(mStartActivity, newTask, mKeepCurTransition, mOptions); if (mDoResume) {