diff options
author | Chet Haase <chet@google.com> | 2012-10-11 08:03:04 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-10-11 08:03:04 -0700 |
commit | e1f4ebf559f7ddbfe19ea9a1823a62f3d8b80d71 (patch) | |
tree | ff46e4762c1a579b273cd15cb2f056b56cc8330b /packages/SystemUI/src | |
parent | a517de36c44ab8cad5a267315aedf940aefa44cb (diff) | |
parent | c61d70ec46bc44344a419a0a15ccbecd1f8f1a2d (diff) | |
download | frameworks_base-e1f4ebf559f7ddbfe19ea9a1823a62f3d8b80d71.zip frameworks_base-e1f4ebf559f7ddbfe19ea9a1823a62f3d8b80d71.tar.gz frameworks_base-e1f4ebf559f7ddbfe19ea9a1823a62f3d8b80d71.tar.bz2 |
Merge "Cache wallpaper bitmap to avoid re-loading on rotation" into jb-mr1-dev
Diffstat (limited to 'packages/SystemUI/src')
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/ImageWallpaper.java | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java index a98c4dc..a874c6d 100644 --- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java +++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java @@ -19,6 +19,7 @@ package com.android.systemui; import android.app.ActivityManager; import android.app.WallpaperManager; import android.content.BroadcastReceiver; +import android.content.ComponentCallbacks2; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; @@ -62,6 +63,8 @@ public class ImageWallpaper extends WallpaperService { WallpaperManager mWallpaperManager; + DrawableEngine mEngine; + boolean mIsHwAccelerated; @Override @@ -77,12 +80,20 @@ public class ImageWallpaper extends WallpaperService { } } + @Override + public void onTrimMemory(int level) { + if (mEngine != null) { + mEngine.trimMemory(level); + } + } + private static boolean isEmulator() { return "1".equals(SystemProperties.get(PROPERTY_KERNEL_QEMU, "0")); } public Engine onCreateEngine() { - return new DrawableEngine(); + mEngine = new DrawableEngine(); + return mEngine; } class DrawableEngine extends Engine { @@ -155,6 +166,15 @@ public class ImageWallpaper extends WallpaperService { setFixedSizeAllowed(true); } + public void trimMemory(int level) { + if (level >= ComponentCallbacks2.TRIM_MEMORY_RUNNING_LOW && + mBackground != null && mIsHwAccelerated) { + mBackground.recycle(); + mBackground = null; + mWallpaperManager.forgetLoadedWallpaper(); + } + } + @Override public void onCreate(SurfaceHolder surfaceHolder) { if (DEBUG) { @@ -329,16 +349,17 @@ public class ImageWallpaper extends WallpaperService { } } else { drawWallpaperWithCanvas(sh, availw, availh, xPixels, yPixels); + if (FIXED_SIZED_SURFACE) { + // If the surface is fixed-size, we should only need to + // draw it once and then we'll let the window manager + // position it appropriately. As such, we no longer needed + // the loaded bitmap. Yay! + // hw-accelerated path retains bitmap for faster rotation + mBackground = null; + mWallpaperManager.forgetLoadedWallpaper(); + } } - if (FIXED_SIZED_SURFACE) { - // If the surface is fixed-size, we should only need to - // draw it once and then we'll let the window manager - // position it appropriately. As such, we no longer needed - // the loaded bitmap. Yay! - mBackground = null; - mWallpaperManager.forgetLoadedWallpaper(); - } } void updateWallpaperLocked() { @@ -489,8 +510,6 @@ public class ImageWallpaper extends WallpaperService { GLUtils.texImage2D(GL_TEXTURE_2D, 0, GL_RGBA, bitmap, GL_UNSIGNED_BYTE, 0); checkGlError(); - bitmap.recycle(); - return texture; } |