Don't draw layers in buildLayer()
Creating the layer, if necessary, takes the bulk
of the time - just do the creation, and schedule a
deferred update
Change-Id: I21399ebd5d2929a4f242ec1c08e3f97fed1ef58a
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index ecfca74..aea7c30 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -10220,7 +10220,7 @@
if (mAttachInfo.mHardwareRenderer != null &&
mAttachInfo.mHardwareRenderer.isEnabled() &&
mAttachInfo.mHardwareRenderer.validate()) {
- getHardwareLayer(true);
+ getHardwareLayer();
}
break;
case LAYER_TYPE_SOFTWARE:
@@ -10242,7 +10242,7 @@
*
* @return A HardwareLayer ready to render, or null if an error occurred.
*/
- HardwareLayer getHardwareLayer(boolean immediateRefresh) {
+ HardwareLayer getHardwareLayer() {
if (mAttachInfo == null || mAttachInfo.mHardwareRenderer == null ||
!mAttachInfo.mHardwareRenderer.isEnabled()) {
return null;
@@ -10272,33 +10272,8 @@
return null;
}
- if (!immediateRefresh) {
- mHardwareLayer.redraw(getDisplayList(), mLocalDirtyRect);
- mLocalDirtyRect.setEmpty();
- } else {
- HardwareCanvas currentCanvas = mAttachInfo.mHardwareCanvas;
- final HardwareCanvas canvas = mHardwareLayer.start(currentCanvas);
-
- // Make sure all the GPU resources have been properly allocated
- if (canvas == null) {
- mHardwareLayer.end(currentCanvas);
- return null;
- }
-
- mAttachInfo.mHardwareCanvas = canvas;
- try {
- canvas.setViewport(width, height);
- canvas.onPreDraw(mLocalDirtyRect);
- mLocalDirtyRect.setEmpty();
-
- canvas.drawDisplayList(getDisplayList(), mRight - mLeft, mBottom - mTop, null,
- DisplayList.FLAG_CLIP_CHILDREN);
- } finally {
- canvas.onPostDraw();
- mHardwareLayer.end(currentCanvas);
- mAttachInfo.mHardwareCanvas = currentCanvas;
- }
- }
+ mHardwareLayer.redraw(getDisplayList(), mLocalDirtyRect);
+ mLocalDirtyRect.setEmpty();
}
return mHardwareLayer;
@@ -11265,7 +11240,7 @@
if (hasNoCache) {
boolean layerRendered = false;
if (layerType == LAYER_TYPE_HARDWARE) {
- final HardwareLayer layer = getHardwareLayer(false);
+ final HardwareLayer layer = getHardwareLayer();
if (layer != null && layer.isValid()) {
mLayerPaint.setAlpha((int) (alpha * 255));
((HardwareCanvas) canvas).drawHardwareLayer(layer, 0, 0, mLayerPaint);