am 26153a33: Fix bug 3163052 - always use 32-bit drawing caches when destination window is 32-bit
* commit '26153a33df8e6608bd37da7d44214b2a0db3195f': Fix bug 3163052 - always use 32-bit drawing caches when destination window is 32-bit
This commit is contained in:
@@ -6534,11 +6534,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;
|
||||
@@ -6568,7 +6568,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
|
||||
@@ -6582,7 +6582,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
|
||||
@@ -9316,9 +9316,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
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user