summaryrefslogtreecommitdiffstats
path: root/packages/SystemUI/src
diff options
context:
space:
mode:
authorChet Haase <chet@google.com>2012-10-11 08:03:04 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-10-11 08:03:04 -0700
commite1f4ebf559f7ddbfe19ea9a1823a62f3d8b80d71 (patch)
treeff46e4762c1a579b273cd15cb2f056b56cc8330b /packages/SystemUI/src
parenta517de36c44ab8cad5a267315aedf940aefa44cb (diff)
parentc61d70ec46bc44344a419a0a15ccbecd1f8f1a2d (diff)
downloadframeworks_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.java41
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;
}