Merge "Don't draw layers in buildLayer()"
This commit is contained in:
committed by
Android (Google) Code Review
commit
1ce1307641
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -10221,7 +10221,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:
|
||||
@@ -10243,7 +10243,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;
|
||||
@@ -10273,33 +10273,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;
|
||||
@@ -11266,7 +11241,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);
|
||||
|
||||
Reference in New Issue
Block a user