OSDN Git Service

Make the min layer go down through all windows
authorCraig Mautner <cmautner@google.com>
Thu, 28 Mar 2013 22:28:55 +0000 (15:28 -0700)
committerCraig Mautner <cmautner@google.com>
Fri, 5 Apr 2013 17:26:19 +0000 (10:26 -0700)
The min layer was set to only show the windows that matched
the specified app token. But that meant when dialogs were
launched it only showed the dialogs and not the background
windows.

Added improved debugging.

fixes bug 8502844.

Change-Id: I26b49568b872801ec9aa088df20317aa752dacd6

services/java/com/android/server/wm/WindowManagerService.java

index 34052f3..3c40238 100644 (file)
@@ -5365,6 +5365,9 @@ public class WindowManagerService extends IWindowManager.Stub
                     if (maxLayer < winAnim.mSurfaceLayer) {
                         maxLayer = winAnim.mSurfaceLayer;
                     }
+                    if (minLayer > winAnim.mSurfaceLayer) {
+                        minLayer = winAnim.mSurfaceLayer;
+                    }
 
                     // Don't include wallpaper in bounds calculation
                     if (!ws.mIsWallpaper) {
@@ -5377,17 +5380,14 @@ public class WindowManagerService extends IWindowManager.Stub
                         frame.union(left, top, right, bottom);
                     }
 
-                    if (ws.mAppToken != null && ws.mAppToken.token == appToken) {
-                        if (minLayer > ws.mWinAnimator.mSurfaceLayer) {
-                            minLayer = ws.mWinAnimator.mSurfaceLayer;
-                        }
-                        if (ws.isDisplayedLw()) {
-                            screenshotReady = true;
-                        }
-                        if (fullscreen) {
-                            // No point in continuing down through windows.
-                            break;
-                        }
+                    if (ws.mAppToken != null && ws.mAppToken.token == appToken &&
+                            ws.isDisplayedLw()) {
+                        screenshotReady = true;
+                    }
+
+                    if (fullscreen) {
+                        // No point in continuing down through windows.
+                        break;
                     }
                 }
 
@@ -5461,14 +5461,12 @@ public class WindowManagerService extends IWindowManager.Stub
                 rawss = SurfaceControl.screenshot(dw, dh, minLayer, maxLayer);
             }
         } while (!screenshotReady && retryCount <= MAX_SCREENSHOT_RETRIES);
-        if (DEBUG_SCREENSHOT && retryCount > MAX_SCREENSHOT_RETRIES) {
-            Slog.i(TAG, "Screenshot max retries " + retryCount + " of " + appToken + " appWin="
-                    + (appWin == null ? "null" : (appWin + " drawState="
-                            + appWin.mWinAnimator.mDrawState)));
-        }
+        if (retryCount > MAX_SCREENSHOT_RETRIES)  Slog.i(TAG, "Screenshot max retries " +
+                retryCount + " of " + appToken + " appWin=" + (appWin == null ?
+                        "null" : (appWin + " drawState=" + appWin.mWinAnimator.mDrawState)));
 
         if (rawss == null) {
-            Slog.w(TAG, "Failure taking screenshot for (" + dw + "x" + dh
+            Slog.w(TAG, "Screenshot failure taking screenshot for (" + dw + "x" + dh
                     + ") to layer " + maxLayer);
             return null;
         }
@@ -5481,7 +5479,7 @@ public class WindowManagerService extends IWindowManager.Stub
         canvas.drawBitmap(rawss, matrix, null);
         canvas.setBitmap(null);
 
-        if (DEBUG_SCREENSHOT) {
+        if (true || DEBUG_SCREENSHOT) {
             // TEST IF IT's ALL BLACK
             int[] buffer = new int[bm.getWidth() * bm.getHeight()];
             bm.getPixels(buffer, 0, bm.getWidth(), 0, 0, bm.getWidth(), bm.getHeight());
@@ -5494,7 +5492,8 @@ public class WindowManagerService extends IWindowManager.Stub
             }
             if (allBlack) {
                 Slog.i(TAG, "Screenshot " + appWin + " was all black! mSurfaceLayer=" +
-                        (appWin != null ? appWin.mWinAnimator.mSurfaceLayer : "null"));
+                        (appWin != null ? appWin.mWinAnimator.mSurfaceLayer : "null") +
+                        " minLayer=" + minLayer + " maxLayer=" + maxLayer);
             }
         }