diff options
| author | Adam Powell <adamp@google.com> | 2010-11-08 15:22:27 -0800 |
|---|---|---|
| committer | Adam Powell <adamp@google.com> | 2010-11-08 18:09:12 -0800 |
| commit | 26153a33df8e6608bd37da7d44214b2a0db3195f (patch) | |
| tree | 0fd1db3816e45662c4e77046b62533e6415f0260 | |
| parent | d2d62d04fc387e2f51d414e101a3e8e3c45f415e (diff) | |
| download | frameworks_base-26153a33df8e6608bd37da7d44214b2a0db3195f.zip frameworks_base-26153a33df8e6608bd37da7d44214b2a0db3195f.tar.gz frameworks_base-26153a33df8e6608bd37da7d44214b2a0db3195f.tar.bz2 | |
Fix bug 3163052 - always use 32-bit drawing caches when destination
window is 32-bit
Change-Id: I0b6de28eb2de583e1d10d0a65c1ab534ef5bb047
| -rw-r--r-- | core/java/android/view/View.java | 12 | ||||
| -rw-r--r-- | core/java/android/view/ViewRoot.java | 3 |
2 files changed, 8 insertions, 7 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index acda3e1..6590497 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -6533,11 +6533,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility final int drawingCacheBackgroundColor = mDrawingCacheBackgroundColor; final boolean opaque = drawingCacheBackgroundColor != 0 || isOpaque(); - final boolean translucentWindow = attachInfo != null && attachInfo.mTranslucentWindow; + final boolean use32BitCache = attachInfo != null && attachInfo.mUse32BitDrawingCache; if (width <= 0 || height <= 0 || // Projected bitmap size in bytes - (width * height * (opaque && !translucentWindow ? 2 : 4) > + (width * height * (opaque && !use32BitCache ? 2 : 4) > ViewConfiguration.get(mContext).getScaledMaximumDrawingCacheSize())) { destroyDrawingCache(); return; @@ -6567,7 +6567,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility } else { // Optimization for translucent windows // If the window is translucent, use a 32 bits bitmap to benefit from memcpy() - quality = translucentWindow ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565; + quality = use32BitCache ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565; } // Try to cleanup memory @@ -6581,7 +6581,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility } else { mUnscaledDrawingCache = new SoftReference<Bitmap>(bitmap); } - if (opaque && translucentWindow) bitmap.setHasAlpha(false); + if (opaque && use32BitCache) bitmap.setHasAlpha(false); } catch (OutOfMemoryError e) { // If there is not enough memory to create the bitmap cache, just // ignore the issue as bitmap caches are not required to draw the @@ -9315,9 +9315,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility int mWindowTop; /** - * Indicates whether the window is translucent/transparent + * Indicates whether views need to use 32-bit drawing caches */ - boolean mTranslucentWindow; + boolean mUse32BitDrawingCache; /** * For windows that are full-screen but using insets to layout inside diff --git a/core/java/android/view/ViewRoot.java b/core/java/android/view/ViewRoot.java index a039777..c58207e 100644 --- a/core/java/android/view/ViewRoot.java +++ b/core/java/android/view/ViewRoot.java @@ -754,7 +754,8 @@ public final class ViewRoot extends Handler implements ViewParent, // object is not initialized to its backing store, but soon it // will be (assuming the window is visible). attachInfo.mSurface = mSurface; - attachInfo.mTranslucentWindow = PixelFormat.formatHasAlpha(lp.format); + attachInfo.mUse32BitDrawingCache = PixelFormat.formatHasAlpha(lp.format) || + lp.format == PixelFormat.RGBX_8888; attachInfo.mHasWindowFocus = false; attachInfo.mWindowVisibility = viewVisibility; attachInfo.mRecomputeGlobalAttributes = false; |
