Skip to content

Commit 7e52caf

Browse files
committed
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
1 parent 6be5247 commit 7e52caf

File tree

3 files changed

+7
-32
lines changed

3 files changed

+7
-32
lines changed

core/java/android/view/HardwareLayer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ void update(int width, int height, boolean isOpaque) {
167167

168168
/**
169169
* Specifies the display list to use to refresh the layer.
170-
*
170+
*
171171
* @param displayList The display list containing the drawing commands to
172172
* execute in this layer
173173
* @param dirtyRect The dirty region of the layer that needs to be redrawn

core/java/android/view/TextureView.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ protected void destroyHardwareResources() {
315315
}
316316

317317
@Override
318-
HardwareLayer getHardwareLayer(boolean immediateRefresh) {
318+
HardwareLayer getHardwareLayer() {
319319
if (mLayer == null) {
320320
if (mAttachInfo == null || mAttachInfo.mHardwareRenderer == null) {
321321
return null;

core/java/android/view/View.java

Lines changed: 5 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -10220,7 +10220,7 @@ public void buildLayer() {
1022010220
if (mAttachInfo.mHardwareRenderer != null &&
1022110221
mAttachInfo.mHardwareRenderer.isEnabled() &&
1022210222
mAttachInfo.mHardwareRenderer.validate()) {
10223-
getHardwareLayer(true);
10223+
getHardwareLayer();
1022410224
}
1022510225
break;
1022610226
case LAYER_TYPE_SOFTWARE:
@@ -10242,7 +10242,7 @@ void flushLayer() {
1024210242
*
1024310243
* @return A HardwareLayer ready to render, or null if an error occurred.
1024410244
*/
10245-
HardwareLayer getHardwareLayer(boolean immediateRefresh) {
10245+
HardwareLayer getHardwareLayer() {
1024610246
if (mAttachInfo == null || mAttachInfo.mHardwareRenderer == null ||
1024710247
!mAttachInfo.mHardwareRenderer.isEnabled()) {
1024810248
return null;
@@ -10272,33 +10272,8 @@ HardwareLayer getHardwareLayer(boolean immediateRefresh) {
1027210272
return null;
1027310273
}
1027410274

10275-
if (!immediateRefresh) {
10276-
mHardwareLayer.redraw(getDisplayList(), mLocalDirtyRect);
10277-
mLocalDirtyRect.setEmpty();
10278-
} else {
10279-
HardwareCanvas currentCanvas = mAttachInfo.mHardwareCanvas;
10280-
final HardwareCanvas canvas = mHardwareLayer.start(currentCanvas);
10281-
10282-
// Make sure all the GPU resources have been properly allocated
10283-
if (canvas == null) {
10284-
mHardwareLayer.end(currentCanvas);
10285-
return null;
10286-
}
10287-
10288-
mAttachInfo.mHardwareCanvas = canvas;
10289-
try {
10290-
canvas.setViewport(width, height);
10291-
canvas.onPreDraw(mLocalDirtyRect);
10292-
mLocalDirtyRect.setEmpty();
10293-
10294-
canvas.drawDisplayList(getDisplayList(), mRight - mLeft, mBottom - mTop, null,
10295-
DisplayList.FLAG_CLIP_CHILDREN);
10296-
} finally {
10297-
canvas.onPostDraw();
10298-
mHardwareLayer.end(currentCanvas);
10299-
mAttachInfo.mHardwareCanvas = currentCanvas;
10300-
}
10301-
}
10275+
mHardwareLayer.redraw(getDisplayList(), mLocalDirtyRect);
10276+
mLocalDirtyRect.setEmpty();
1030210277
}
1030310278

1030410279
return mHardwareLayer;
@@ -11265,7 +11240,7 @@ boolean draw(Canvas canvas, ViewGroup parent, long drawingTime) {
1126511240
if (hasNoCache) {
1126611241
boolean layerRendered = false;
1126711242
if (layerType == LAYER_TYPE_HARDWARE) {
11268-
final HardwareLayer layer = getHardwareLayer(false);
11243+
final HardwareLayer layer = getHardwareLayer();
1126911244
if (layer != null && layer.isValid()) {
1127011245
mLayerPaint.setAlpha((int) (alpha * 255));
1127111246
((HardwareCanvas) canvas).drawHardwareLayer(layer, 0, 0, mLayerPaint);

0 commit comments

Comments
 (0)