summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Aaron Whyte <awhyte@google.com> 2018-01-23 12:06:02 -0800
committer Aaron Whyte <awhyte@google.com> 2018-01-24 00:33:56 +0000
commit8cbdf04eb83ec8ca62701fe5de9c7809b7a43f0c (patch)
treed22abefbcc4776de1dc91345be4f6d9a50c4b6dc
parentd9ca4189c1e9cde8ce2ade4eb2a1a2dbc07f39be (diff)
Fix race condition when evaluating screen timeout.
When deciding whether or not to honor a window's timeout override, do not require that the window has already been drawn this frame. BUG=70225679 Change-Id: I4070f465b5c57d4de08807bfe3d4e67034b56827
-rw-r--r--services/core/java/com/android/server/wm/RootWindowContainer.java19
1 files changed, 16 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index 2a77c92b5c87..c3b2c24e89ec 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -897,10 +897,26 @@ class RootWindowContainer extends WindowContainer<DisplayContent> {
boolean handleNotObscuredLocked(WindowState w, boolean obscured, boolean syswin) {
final WindowManager.LayoutParams attrs = w.mAttrs;
final int attrFlags = attrs.flags;
+ final boolean onScreen = w.isOnScreen();
final boolean canBeSeen = w.isDisplayedLw();
final int privateflags = attrs.privateFlags;
boolean displayHasContent = false;
+ if (DEBUG_KEEP_SCREEN_ON) {
+ Slog.d(TAG_KEEP_SCREEN_ON, "handleNotObscuredLocked w: " + w
+ + ", w.mHasSurface: " + w.mHasSurface
+ + ", w.isOnScreen(): " + onScreen
+ + ", w.isDisplayedLw(): " + w.isDisplayedLw()
+ + ", w.mAttrs.userActivityTimeout: " + w.mAttrs.userActivityTimeout);
+ }
+ if (w.mHasSurface && onScreen) {
+ if (!syswin && w.mAttrs.userActivityTimeout >= 0 && mUserActivityTimeout < 0) {
+ mUserActivityTimeout = w.mAttrs.userActivityTimeout;
+ if (DEBUG_KEEP_SCREEN_ON) {
+ Slog.d(TAG, "mUserActivityTimeout set to " + mUserActivityTimeout);
+ }
+ }
+ }
if (w.mHasSurface && canBeSeen) {
if ((attrFlags & FLAG_KEEP_SCREEN_ON) != 0) {
mHoldScreen = w.mSession;
@@ -913,9 +929,6 @@ class RootWindowContainer extends WindowContainer<DisplayContent> {
if (!syswin && w.mAttrs.screenBrightness >= 0 && mScreenBrightness < 0) {
mScreenBrightness = w.mAttrs.screenBrightness;
}
- if (!syswin && w.mAttrs.userActivityTimeout >= 0 && mUserActivityTimeout < 0) {
- mUserActivityTimeout = w.mAttrs.userActivityTimeout;
- }
final int type = attrs.type;
// This function assumes that the contents of the default display are processed first