diff options
author | Chet Haase <chet@google.com> | 2011-10-28 15:13:27 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-10-28 15:13:27 -0700 |
commit | d568bba507b0f66d4d57c67b08ade894d2c75e53 (patch) | |
tree | a69d650ae295d479170f0f0ddf67dd87e3e4c4df /services | |
parent | c00d2ddcc343b7bcdce30925df90523bb7371f83 (diff) | |
parent | a8e5a2bcd6a0d35893187c6df42425c03be005da (diff) | |
download | frameworks_base-d568bba507b0f66d4d57c67b08ade894d2c75e53.zip frameworks_base-d568bba507b0f66d4d57c67b08ade894d2c75e53.tar.gz frameworks_base-d568bba507b0f66d4d57c67b08ade894d2c75e53.tar.bz2 |
Merge "Optimize handling of scrolled wallpapers" into ics-mr1
Diffstat (limited to 'services')
-rw-r--r-- | services/java/com/android/server/wm/WindowManagerService.java | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index 792ef70..08797dd 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -1836,7 +1836,8 @@ public class WindowManagerService extends IWindowManager.Stub rawChanged = true; } - if (rawChanged) { + if (rawChanged && (wallpaperWin.getAttrs().privateFlags & + WindowManager.LayoutParams.PRIVATE_FLAG_WANTS_OFFSET_NOTIFICATIONS) != 0) { try { if (DEBUG_WALLPAPER) Slog.v(TAG, "Report new wp offset " + wallpaperWin + " x=" + wallpaperWin.mWallpaperX @@ -1886,12 +1887,10 @@ public class WindowManagerService extends IWindowManager.Stub } } - boolean updateWallpaperOffsetLocked(WindowState changingTarget, boolean sync) { + void updateWallpaperOffsetLocked(WindowState changingTarget, boolean sync) { final int dw = mAppDisplayWidth; final int dh = mAppDisplayHeight; - boolean changed = false; - WindowState target = mWallpaperTarget; if (target != null) { if (target.mWallpaperX >= 0) { @@ -1916,14 +1915,31 @@ public class WindowManagerService extends IWindowManager.Stub WindowState wallpaper = token.windows.get(curWallpaperIndex); if (updateWallpaperOffsetLocked(wallpaper, dw, dh, sync)) { wallpaper.computeShownFrameLocked(); - changed = true; + // No need to lay out the windows - we can just set the wallpaper position + // directly. + if (wallpaper.mSurfaceX != wallpaper.mShownFrame.left + || wallpaper.mSurfaceY != wallpaper.mShownFrame.top) { + Surface.openTransaction(); + try { + if (SHOW_TRANSACTIONS) logSurface(wallpaper, + "POS " + wallpaper.mShownFrame.left + + ", " + wallpaper.mShownFrame.top, null); + wallpaper.mSurfaceX = wallpaper.mShownFrame.left; + wallpaper.mSurfaceY = wallpaper.mShownFrame.top; + wallpaper.mSurface.setPosition(wallpaper.mShownFrame.left, + wallpaper.mShownFrame.top); + } catch (RuntimeException e) { + Slog.w(TAG, "Error positioning surface of " + wallpaper + + " pos=(" + wallpaper.mShownFrame.left + + "," + wallpaper.mShownFrame.top + ")", e); + } + Surface.closeTransaction(); + } // We only want to be synchronous with one wallpaper. sync = false; } } } - - return changed; } void updateWallpaperVisibilityLocked() { @@ -2436,9 +2452,7 @@ public class WindowManagerService extends IWindowManager.Stub window.mWallpaperY = y; window.mWallpaperXStep = xStep; window.mWallpaperYStep = yStep; - if (updateWallpaperOffsetLocked(window, true)) { - performLayoutAndPlaceSurfacesLocked(); - } + updateWallpaperOffsetLocked(window, true); } } |