Merge "Debug traces to facilitate screen timeout debugging" into nyc-dev
am: 6afe594461
* commit '6afe594461930e83cbf5ecf181bf43fcba0060dd':
Debug traces to facilitate screen timeout debugging
Change-Id: I89dad5e66db460af83deac679f2f81bef34d0e69
This commit is contained in:
@@ -562,6 +562,11 @@ public final class ViewRootImpl implements ViewParent,
|
||||
}
|
||||
attrs = mWindowAttributes;
|
||||
setTag();
|
||||
|
||||
if ((mClientWindowLayoutFlags&WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) != 0
|
||||
&& (attrs.flags&WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) == 0) {
|
||||
Slog.d(mTag, "setView: FLAG_KEEP_SCREEN_ON changed from true to false!!!");
|
||||
}
|
||||
// Keep track of the actual window flags supplied by the client.
|
||||
mClientWindowLayoutFlags = attrs.flags;
|
||||
|
||||
@@ -889,6 +894,10 @@ public final class ViewRootImpl implements ViewParent,
|
||||
final int oldInsetBottom = mWindowAttributes.surfaceInsets.bottom;
|
||||
final int oldSoftInputMode = mWindowAttributes.softInputMode;
|
||||
final boolean oldHasManualSurfaceInsets = mWindowAttributes.hasManualSurfaceInsets;
|
||||
if ((mClientWindowLayoutFlags&WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) != 0
|
||||
&& (attrs.flags&WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) == 0) {
|
||||
Slog.d(mTag, "setLayoutParams: FLAG_KEEP_SCREEN_ON from true to false!!!");
|
||||
}
|
||||
|
||||
// Keep track of the actual window flags supplied by the client.
|
||||
mClientWindowLayoutFlags = attrs.flags;
|
||||
|
||||
@@ -73,4 +73,7 @@ public class WindowManagerDebugConfig {
|
||||
static final boolean SHOW_LIGHT_TRANSACTIONS = false || SHOW_TRANSACTIONS;
|
||||
static final boolean SHOW_STACK_CRAWLS = false;
|
||||
static final boolean DEBUG_WINDOW_CROP = false;
|
||||
|
||||
static final String TAG_KEEP_SCREEN_ON = "DebugKeepScreenOn";
|
||||
static final boolean DEBUG_KEEP_SCREEN_ON = true;
|
||||
}
|
||||
|
||||
@@ -221,6 +221,7 @@ import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS;
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS_LIGHT;
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_INPUT_METHOD;
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_KEYGUARD;
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_KEEP_SCREEN_ON;
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYOUT;
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ORIENTATION;
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_RESIZE;
|
||||
@@ -240,6 +241,7 @@ import static com.android.server.wm.WindowManagerDebugConfig.SHOW_STACK_CRAWLS;
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.SHOW_SURFACE_ALLOC;
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.SHOW_TRANSACTIONS;
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.SHOW_VERBOSE_TRANSACTIONS;
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.TAG_KEEP_SCREEN_ON;
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
|
||||
import static com.android.server.wm.WindowStateAnimator.DRAW_PENDING;
|
||||
@@ -509,6 +511,10 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
boolean mShowingBootMessages = false;
|
||||
boolean mBootAnimationStopped = false;
|
||||
|
||||
// Following variables are for debugging screen wakelock only.
|
||||
WindowState mLastWakeLockHoldingWindow = null;
|
||||
WindowState mLastWakeLockObscuringWindow = null;
|
||||
|
||||
/** Dump of the windows and app tokens at the time of the last ANR. Cleared after
|
||||
* LAST_ANR_LIFETIME_DURATION_MSECS */
|
||||
String mLastANRState;
|
||||
@@ -9279,9 +9285,21 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
final boolean state = mHoldingScreenWakeLock.isHeld();
|
||||
if (hold != state) {
|
||||
if (hold) {
|
||||
if (DEBUG_KEEP_SCREEN_ON) {
|
||||
Slog.d(TAG_KEEP_SCREEN_ON, "Acquiring screen wakelock due to " +
|
||||
mWindowPlacerLocked.mHoldScreenWindow);
|
||||
}
|
||||
mLastWakeLockHoldingWindow = mWindowPlacerLocked.mHoldScreenWindow;
|
||||
mLastWakeLockObscuringWindow = null;
|
||||
mHoldingScreenWakeLock.acquire();
|
||||
mPolicy.keepScreenOnStartedLw();
|
||||
} else {
|
||||
if (DEBUG_KEEP_SCREEN_ON) {
|
||||
Slog.d(TAG_KEEP_SCREEN_ON, "Releasing screen wakelock, obscured by " +
|
||||
mWindowPlacerLocked.mObsuringWindow);
|
||||
}
|
||||
mLastWakeLockHoldingWindow = null;
|
||||
mLastWakeLockObscuringWindow = mWindowPlacerLocked.mObsuringWindow;
|
||||
mPolicy.keepScreenOnStoppedLw();
|
||||
mHoldingScreenWakeLock.release();
|
||||
}
|
||||
@@ -10212,6 +10230,9 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
pw.print(mLastFinishedFreezeSource);
|
||||
}
|
||||
pw.println();
|
||||
pw.print(" mLastWakeLockHoldingWindow=");pw.print(mLastWakeLockHoldingWindow);
|
||||
pw.print(" mLastWakeLockObscuringWindow="); pw.print(mLastWakeLockObscuringWindow);
|
||||
pw.println();
|
||||
|
||||
mInputMonitor.dump(pw, " ");
|
||||
|
||||
|
||||
@@ -31,8 +31,10 @@ import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_TOKEN_MOVEMEN
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_VISIBILITY;
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WALLPAPER_LIGHT;
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WINDOW_TRACE;
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_KEEP_SCREEN_ON;
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.SHOW_LIGHT_TRANSACTIONS;
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.SHOW_TRANSACTIONS;
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.TAG_KEEP_SCREEN_ON;
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
|
||||
import static com.android.server.wm.WindowManagerService.H.DO_TRAVERSAL;
|
||||
@@ -132,6 +134,12 @@ class WindowSurfacePlacer {
|
||||
private boolean mSustainedPerformanceModeEnabled = false;
|
||||
private boolean mSustainedPerformanceModeCurrent = false;
|
||||
|
||||
// Following variables are for debugging screen wakelock only.
|
||||
// Last window that requires screen wakelock
|
||||
WindowState mHoldScreenWindow = null;
|
||||
// Last window that obscures all windows below
|
||||
WindowState mObsuringWindow = null;
|
||||
|
||||
private static final class LayerAndToken {
|
||||
public int layer;
|
||||
public AppWindowToken token;
|
||||
@@ -288,6 +296,8 @@ class WindowSurfacePlacer {
|
||||
}
|
||||
|
||||
mHoldScreen = null;
|
||||
mHoldScreenWindow = null;
|
||||
mObsuringWindow = null;
|
||||
mScreenBrightness = -1;
|
||||
mButtonBrightness = -1;
|
||||
mUserActivityTimeout = -1;
|
||||
@@ -1425,12 +1435,21 @@ class WindowSurfacePlacer {
|
||||
// This window completely covers everything behind it,
|
||||
// so we want to leave all of them as undimmed (for
|
||||
// performance reasons).
|
||||
if (!mObscured) {
|
||||
mObsuringWindow = w;
|
||||
}
|
||||
|
||||
mObscured = true;
|
||||
}
|
||||
|
||||
if (w.mHasSurface) {
|
||||
if ((attrFlags&FLAG_KEEP_SCREEN_ON) != 0) {
|
||||
mHoldScreen = w.mSession;
|
||||
mHoldScreenWindow = w;
|
||||
} else if (DEBUG_KEEP_SCREEN_ON && w == mService.mLastWakeLockHoldingWindow) {
|
||||
Slog.d(TAG_KEEP_SCREEN_ON, "handleNotObscuredLocked: " + w + " was holding "
|
||||
+ "screen wakelock but no longer has FLAG_KEEP_SCREEN_ON!!! called by"
|
||||
+ Debug.getCallers(10));
|
||||
}
|
||||
if (!mSyswin && w.mAttrs.screenBrightness >= 0
|
||||
&& mScreenBrightness < 0) {
|
||||
@@ -1686,5 +1705,7 @@ class WindowSurfacePlacer {
|
||||
|
||||
public void dump(PrintWriter pw, String prefix) {
|
||||
pw.print(prefix); pw.print("mTraversalScheduled="); pw.println(mTraversalScheduled);
|
||||
pw.print(prefix); pw.print("mHoldScreenWindow="); pw.println(mHoldScreenWindow);
|
||||
pw.print(prefix); pw.print("mObsuringWindow="); pw.println(mObsuringWindow);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user