Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6eededad authored by Chris Craik's avatar Chris Craik Committed by Android (Google) Code Review
Browse files

Merge "More state cleanup in View#draw"

parents f7cb8a0b b3098251
Loading
Loading
Loading
Loading
+19 −37
Original line number Diff line number Diff line
@@ -15301,9 +15301,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
        RenderNode renderNode = null;
        Bitmap cache = null;
        int layerType = getLayerType();
        int layerType = getLayerType(); // TODO: signify cache state with just 'cache' local
        if (layerType == LAYER_TYPE_SOFTWARE
                || (!drawingWithRenderNode && layerType != LAYER_TYPE_NONE)) {
            // If not drawing with RenderNode, treat HW layers as SW
            layerType = LAYER_TYPE_SOFTWARE;
            buildDrawingCache(true);
            cache = getDrawingCache(true);
@@ -15330,10 +15331,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
            sy = mScrollY;
        }
        final boolean hasNoCache = cache == null || drawingWithRenderNode;
        final boolean offsetForScroll = cache == null
                && !drawingWithRenderNode
                && layerType != LAYER_TYPE_HARDWARE;
        final boolean drawingWithDrawingCache = cache != null && !drawingWithRenderNode;
        final boolean offsetForScroll = cache == null && !drawingWithRenderNode;
        int restoreTo = -1;
        if (!drawingWithRenderNode || transformToApply != null) {
@@ -15406,17 +15405,16 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
                    mPrivateFlags3 &= ~PFLAG3_VIEW_IS_ANIMATING_ALPHA;
                }
                parent.mGroupFlags |= ViewGroup.FLAG_CLEAR_TRANSFORMATION;
                if (hasNoCache) {
                if (!drawingWithDrawingCache) {
                    final int multipliedAlpha = (int) (255 * alpha);
                    if (!onSetAlpha(multipliedAlpha)) {
                        int layerFlags = Canvas.HAS_ALPHA_LAYER_SAVE_FLAG;
                        if ((parentFlags & ViewGroup.FLAG_CLIP_CHILDREN) != 0
                                || layerType != LAYER_TYPE_NONE) {
                            layerFlags |= Canvas.CLIP_TO_LAYER_SAVE_FLAG;
                        }
                        if (drawingWithRenderNode) {
                            renderNode.setAlpha(alpha * getAlpha() * getTransitionAlpha());
                        } else if (layerType == LAYER_TYPE_NONE) {
                            int layerFlags = Canvas.HAS_ALPHA_LAYER_SAVE_FLAG;
                            if ((parentFlags & ViewGroup.FLAG_CLIP_CHILDREN) != 0) {
                                layerFlags |= Canvas.CLIP_TO_LAYER_SAVE_FLAG;
                            }
                            canvas.saveLayerAlpha(sx, sy, sx + getWidth(), sy + getHeight(),
                                    multipliedAlpha, layerFlags);
                        }
@@ -15451,23 +15449,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
            }
        }
        if (hasNoCache) {
            boolean layerRendered = false;
            if (layerType == LAYER_TYPE_HARDWARE && !drawingWithRenderNode) {
                final HardwareLayer layer = getHardwareLayer();
                if (layer != null && layer.isValid()) {
                    int restoreAlpha = mLayerPaint.getAlpha();
                    mLayerPaint.setAlpha((int) (alpha * 255));
                    ((DisplayListCanvas) canvas).drawHardwareLayer(layer, 0, 0, mLayerPaint);
                    mLayerPaint.setAlpha(restoreAlpha);
                    layerRendered = true;
        if (!drawingWithDrawingCache) {
            if (drawingWithRenderNode) {
                mPrivateFlags &= ~PFLAG_DIRTY_MASK;
                ((DisplayListCanvas) canvas).drawRenderNode(renderNode, parentFlags);
            } else {
                    canvas.saveLayer(sx, sy, sx + getWidth(), sy + getHeight(), mLayerPaint);
                }
            }
            if (!layerRendered) {
                if (!drawingWithRenderNode) {
                // Fast path for layouts with no backgrounds
                if ((mPrivateFlags & PFLAG_SKIP_DRAW) == PFLAG_SKIP_DRAW) {
                    mPrivateFlags &= ~PFLAG_DIRTY_MASK;
@@ -15475,10 +15461,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
                } else {
                    draw(canvas);
                }
                } else {
                    mPrivateFlags &= ~PFLAG_DIRTY_MASK;
                    ((DisplayListCanvas) canvas).drawRenderNode(renderNode, parentFlags);
                }
            }
        } else if (cache != null) {
            mPrivateFlags &= ~PFLAG_DIRTY_MASK;