summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2011-10-26 12:22:31 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2011-10-26 12:22:31 +0000
commitc6592d2eb808befedc3d9c842b61e21cc6bedbf3 (patch)
tree7db5fa56f1170c8562fecae9a0c24ec79320c85e /services
parent7acd70f180d15e6da80d137d7cf0730e11dbd472 (diff)
parent67a1b7d6e5857d0ecdd1aa9d50d10189e5776c11 (diff)
downloadframeworks_base-c6592d2eb808befedc3d9c842b61e21cc6bedbf3.zip
frameworks_base-c6592d2eb808befedc3d9c842b61e21cc6bedbf3.tar.gz
frameworks_base-c6592d2eb808befedc3d9c842b61e21cc6bedbf3.tar.bz2
am 67a1b7d6: Merge "Fix issue #5508024: Rotation jank seen in live wallpapers" into ics-mr0
* commit '67a1b7d6e5857d0ecdd1aa9d50d10189e5776c11': Fix issue #5508024: Rotation jank seen in live wallpapers
Diffstat (limited to 'services')
-rw-r--r--services/java/com/android/server/wm/WindowManagerService.java49
-rw-r--r--services/java/com/android/server/wm/WindowState.java5
2 files changed, 35 insertions, 19 deletions
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index f52a580..792ef70 100644
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -3969,6 +3969,7 @@ public class WindowManagerService extends IWindowManager.Stub
if (w.mAppFreezing) {
w.mAppFreezing = false;
if (w.mSurface != null && !w.mOrientationChanging) {
+ if (DEBUG_ORIENTATION) Slog.v(TAG, "set mOrientationChanging of " + w);
w.mOrientationChanging = true;
}
unfrozeWindows = true;
@@ -5102,7 +5103,7 @@ public class WindowManagerService extends IWindowManager.Stub
}
if (rawss == null) {
- Log.w(TAG, "Failure taking screenshot for (" + dw + "x" + dh
+ Slog.w(TAG, "Failure taking screenshot for (" + dw + "x" + dh
+ ") to layer " + maxLayer);
return null;
}
@@ -5308,6 +5309,7 @@ public class WindowManagerService extends IWindowManager.Stub
for (int i=mWindows.size()-1; i>=0; i--) {
WindowState w = mWindows.get(i);
if (w.mSurface != null) {
+ if (DEBUG_ORIENTATION) Slog.v(TAG, "Set mOrientationChanging of " + w);
w.mOrientationChanging = true;
}
}
@@ -7124,7 +7126,7 @@ public class WindowManagerService extends IWindowManager.Stub
if (DEBUG_LAYERS) {
RuntimeException here = new RuntimeException("here");
here.fillInStackTrace();
- Log.v(TAG, "Assigning layers", here);
+ Slog.v(TAG, "Assigning layers", here);
}
for (i=0; i<N; i++) {
@@ -7363,6 +7365,25 @@ public class WindowManagerService extends IWindowManager.Stub
return mPolicy.finishLayoutLw();
}
+ void makeWindowFreezingScreenIfNeededLocked(WindowState w) {
+ // If the screen is currently frozen or off, then keep
+ // it frozen/off until this window draws at its new
+ // orientation.
+ if (mDisplayFrozen || !mPolicy.isScreenOnFully()) {
+ if (DEBUG_ORIENTATION) Slog.v(TAG,
+ "Changing surface while display frozen: " + w);
+ w.mOrientationChanging = true;
+ if (!mWindowsFreezingScreen) {
+ mWindowsFreezingScreen = true;
+ // XXX should probably keep timeout from
+ // when we first froze the display.
+ mH.removeMessages(H.WINDOW_FREEZE_TIMEOUT);
+ mH.sendMessageDelayed(mH.obtainMessage(
+ H.WINDOW_FREEZE_TIMEOUT), 2000);
+ }
+ }
+ }
+
// "Something has changed! Let's make it correct now."
private final void performLayoutAndPlaceSurfacesLockedInner(
boolean recoveringMemory) {
@@ -7714,6 +7735,10 @@ public class WindowManagerService extends IWindowManager.Stub
+ " drawn=" + wtoken.numDrawnWindows);
wtoken.showAllWindowsLocked();
unsetAppFreezingScreenLocked(wtoken, false, true);
+ if (DEBUG_ORIENTATION) Slog.i(TAG,
+ "Setting orientationChangeComplete=true because wtoken "
+ + wtoken + " numInteresting=" + numInteresting
+ + " numDrawn=" + wtoken.numDrawnWindows);
orientationChangeComplete = true;
}
} else if (!wtoken.allDrawn) {
@@ -8221,22 +8246,7 @@ public class WindowManagerService extends IWindowManager.Stub
w.mLastContentInsets.set(w.mContentInsets);
w.mLastVisibleInsets.set(w.mVisibleInsets);
- // If the screen is currently frozen or off, then keep
- // it frozen/off until this window draws at its new
- // orientation.
- if (mDisplayFrozen || !mPolicy.isScreenOnFully()) {
- if (DEBUG_ORIENTATION) Slog.v(TAG,
- "Resizing while display frozen: " + w);
- w.mOrientationChanging = true;
- if (!mWindowsFreezingScreen) {
- mWindowsFreezingScreen = true;
- // XXX should probably keep timeout from
- // when we first froze the display.
- mH.removeMessages(H.WINDOW_FREEZE_TIMEOUT);
- mH.sendMessageDelayed(mH.obtainMessage(
- H.WINDOW_FREEZE_TIMEOUT), 2000);
- }
- }
+ makeWindowFreezingScreenIfNeededLocked(w);
// If the orientation is changing, then we need to
// hold off on unfreezing the display until this
// window has been redrawn; to do that, we need
@@ -8559,6 +8569,8 @@ public class WindowManagerService extends IWindowManager.Stub
+ Integer.toHexString(diff));
}
win.mConfiguration = mCurConfiguration;
+ if (DEBUG_ORIENTATION && win.mDrawPending) Slog.i(
+ TAG, "Resizing " + win + " WITH DRAW PENDING");
win.mClient.resized((int)win.mSurfaceW, (int)win.mSurfaceH,
win.mLastContentInsets, win.mLastVisibleInsets, win.mDrawPending,
configChanged ? win.mConfiguration : null);
@@ -9083,6 +9095,7 @@ public class WindowManagerService extends IWindowManager.Stub
if (CUSTOM_SCREEN_ROTATION && mScreenRotationAnimation != null
&& mScreenRotationAnimation.hasScreenshot()) {
+ if (DEBUG_ORIENTATION) Slog.i(TAG, "**** Dismissing screen rotation animation");
if (mScreenRotationAnimation.dismiss(mFxSession, MAX_ANIMATION_DURATION,
mTransitionAnimationScale, mCurDisplayWidth, mCurDisplayHeight)) {
requestAnimationLocked(0);
diff --git a/services/java/com/android/server/wm/WindowState.java b/services/java/com/android/server/wm/WindowState.java
index 6988979..f442003 100644
--- a/services/java/com/android/server/wm/WindowState.java
+++ b/services/java/com/android/server/wm/WindowState.java
@@ -612,6 +612,7 @@ final class WindowState implements WindowManagerPolicy.WindowState {
if (mSurface == null) {
mReportDestroySurface = false;
mSurfacePendingDestroy = false;
+ Slog.i(WindowManagerService.TAG, "createSurface " + this + ": DRAW NOW PENDING");
mDrawPending = true;
mCommitDrawPending = false;
mReadyToShow = false;
@@ -619,6 +620,8 @@ final class WindowState implements WindowManagerPolicy.WindowState {
mAppToken.allDrawn = false;
}
+ mService.makeWindowFreezingScreenIfNeededLocked(this);
+
int flags = 0;
if ((mAttrs.flags&WindowManager.LayoutParams.FLAG_SECURE) != 0) {
@@ -783,7 +786,7 @@ final class WindowState implements WindowManagerPolicy.WindowState {
boolean finishDrawingLocked() {
if (mDrawPending) {
if (SHOW_TRANSACTIONS || WindowManagerService.DEBUG_ORIENTATION) Slog.v(
- WindowManagerService.TAG, "finishDrawingLocked: " + mSurface);
+ WindowManagerService.TAG, "finishDrawingLocked: " + this + " in " + mSurface);
mCommitDrawPending = true;
mDrawPending = false;
return true;