9494import android .os .SystemProperties ;
9595import android .os .TokenWatcher ;
9696import android .os .Trace ;
97+ import android .os .WorkSource ;
9798import android .provider .Settings ;
9899import android .util .DisplayMetrics ;
99100import android .util .EventLog ;
@@ -923,7 +924,7 @@ private WindowManagerService(Context context, PowerManagerService pm,
923924 mContext .registerReceiver (mBroadcastReceiver , filter );
924925
925926 mHoldingScreenWakeLock = pmc .newWakeLock (PowerManager .SCREEN_BRIGHT_WAKE_LOCK
926- | PowerManager .ON_AFTER_RELEASE , PowerManager . KEEP_SCREEN_ON_FLAG_TAG );
927+ | PowerManager .ON_AFTER_RELEASE , TAG );
927928 mHoldingScreenWakeLock .setReferenceCounted (false );
928929
929930 mInputManager = new InputManagerService (context , mInputMonitor );
@@ -7020,7 +7021,7 @@ final class H extends Handler {
70207021 public static final int REPORT_APPLICATION_TOKEN_WINDOWS = 8 ;
70217022 public static final int REPORT_APPLICATION_TOKEN_DRAWN = 9 ;
70227023 public static final int WINDOW_FREEZE_TIMEOUT = 11 ;
7023- public static final int HOLD_SCREEN_CHANGED = 12 ;
7024+
70247025 public static final int APP_TRANSITION_TIMEOUT = 13 ;
70257026 public static final int PERSIST_ANIMATION_SCALE = 14 ;
70267027 public static final int FORCE_GC = 15 ;
@@ -7041,8 +7042,6 @@ final class H extends Handler {
70417042 public static final int SET_TRANSPARENT_REGION = ANIMATOR_WHAT_OFFSET + 1 ;
70427043 public static final int CLEAR_PENDING_ACTIONS = ANIMATOR_WHAT_OFFSET + 2 ;
70437044
7044- private Session mLastReportedHold ;
7045-
70467045 public H () {
70477046 }
70487047
@@ -7294,33 +7293,6 @@ public void handleMessage(Message msg) {
72947293 break ;
72957294 }
72967295
7297- case HOLD_SCREEN_CHANGED : {
7298- Session oldHold ;
7299- Session newHold ;
7300- synchronized (mWindowMap ) {
7301- oldHold = mLastReportedHold ;
7302- newHold = (Session )msg .obj ;
7303- mLastReportedHold = newHold ;
7304- }
7305-
7306- if (oldHold != newHold ) {
7307- try {
7308- if (oldHold != null ) {
7309- mBatteryStats .noteStopWakelock (oldHold .mUid , -1 ,
7310- "window" ,
7311- BatteryStats .WAKE_TYPE_WINDOW );
7312- }
7313- if (newHold != null ) {
7314- mBatteryStats .noteStartWakelock (newHold .mUid , -1 ,
7315- "window" ,
7316- BatteryStats .WAKE_TYPE_WINDOW );
7317- }
7318- } catch (RemoteException e ) {
7319- }
7320- }
7321- break ;
7322- }
7323-
73247296 case APP_TRANSITION_TIMEOUT : {
73257297 synchronized (mWindowMap ) {
73267298 if (mNextAppTransition != WindowManagerPolicy .TRANSIT_UNSET ) {
@@ -9134,7 +9106,7 @@ private final void performLayoutAndPlaceSurfacesLockedInner(
91349106 // Finally update all input windows now that the window changes have stabilized.
91359107 mInputMonitor .updateInputWindowsLw (true /*force*/ );
91369108
9137- setHoldScreenLocked (mInnerFields .mHoldScreen != null );
9109+ setHoldScreenLocked (mInnerFields .mHoldScreen );
91389110 if (!mDisplayFrozen ) {
91399111 if (mInnerFields .mScreenBrightness < 0 || mInnerFields .mScreenBrightness > 1.0f ) {
91409112 mPowerManager .setScreenBrightnessOverrideFromWindowManager (-1 );
@@ -9149,11 +9121,6 @@ private final void performLayoutAndPlaceSurfacesLockedInner(
91499121 toBrightnessOverride (mInnerFields .mButtonBrightness ));
91509122 }
91519123 }
9152- if (mInnerFields .mHoldScreen != mHoldingScreenOn ) {
9153- mHoldingScreenOn = mInnerFields .mHoldScreen ;
9154- Message m = mH .obtainMessage (H .HOLD_SCREEN_CHANGED , mInnerFields .mHoldScreen );
9155- mH .sendMessage (m );
9156- }
91579124
91589125 if (mTurnOnScreen ) {
91599126 if (DEBUG_VISIBILITY ) Slog .v (TAG , "Turning screen on after layout!" );
@@ -9237,13 +9204,17 @@ public void waitForWindowDrawn(IBinder token, IRemoteCallback callback) {
92379204 }
92389205 }
92399206
9240- /**
9241- * Must be called with the main window manager lock held.
9242- */
9243- void setHoldScreenLocked (boolean holding ) {
9244- boolean state = mHoldingScreenWakeLock .isHeld ();
9245- if (holding != state ) {
9246- if (holding ) {
9207+ void setHoldScreenLocked (final Session newHoldScreen ) {
9208+ final boolean hold = newHoldScreen != null ;
9209+
9210+ if (hold && mHoldingScreenOn != newHoldScreen ) {
9211+ mHoldingScreenWakeLock .setWorkSource (new WorkSource (newHoldScreen .mUid ));
9212+ }
9213+ mHoldingScreenOn = newHoldScreen ;
9214+
9215+ final boolean state = mHoldingScreenWakeLock .isHeld ();
9216+ if (hold != state ) {
9217+ if (hold ) {
92479218 mPolicy .screenOnStartedLw ();
92489219 mHoldingScreenWakeLock .acquire ();
92499220 } else {
0 commit comments