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
This commit is contained in:
Michael Jurka
2012-03-06 15:57:06 -08:00
parent 6be5247cc5
commit 7e52caf6db
3 changed files with 7 additions and 32 deletions

View File

@@ -167,7 +167,7 @@ abstract class HardwareLayer {
/**
* Specifies the display list to use to refresh the layer.
*
*
* @param displayList The display list containing the drawing commands to
* execute in this layer
* @param dirtyRect The dirty region of the layer that needs to be redrawn

View File

@@ -315,7 +315,7 @@ public class TextureView extends View {
}
@Override
HardwareLayer getHardwareLayer(boolean immediateRefresh) {
HardwareLayer getHardwareLayer() {
if (mLayer == null) {
if (mAttachInfo == null || mAttachInfo.mHardwareRenderer == null) {
return null;

View File

@@ -10220,7 +10220,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
if (mAttachInfo.mHardwareRenderer != null &&
mAttachInfo.mHardwareRenderer.isEnabled() &&
mAttachInfo.mHardwareRenderer.validate()) {
getHardwareLayer(true);
getHardwareLayer();
}
break;
case LAYER_TYPE_SOFTWARE:
@@ -10242,7 +10242,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
*
* @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 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
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 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
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);