summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorChet Haase <chet@google.com>2011-10-28 15:13:27 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-10-28 15:13:27 -0700
commitd568bba507b0f66d4d57c67b08ade894d2c75e53 (patch)
treea69d650ae295d479170f0f0ddf67dd87e3e4c4df /services
parentc00d2ddcc343b7bcdce30925df90523bb7371f83 (diff)
parenta8e5a2bcd6a0d35893187c6df42425c03be005da (diff)
downloadframeworks_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.java34
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);
}
}