Loading core/java/android/view/GLRenderer.java +3 −3 Original line number Diff line number Diff line Loading @@ -1203,7 +1203,7 @@ public class GLRenderer extends HardwareRenderer { private RenderNode buildDisplayList(View view, HardwareCanvas canvas) { if (mDrawDelta <= 0) { return view.mDisplayList; return view.mRenderNode; } view.mRecreateDisplayList = (view.mPrivateFlags & View.PFLAG_INVALIDATED) Loading @@ -1214,12 +1214,12 @@ public class GLRenderer extends HardwareRenderer { canvas.clearLayerUpdates(); Trace.traceBegin(Trace.TRACE_TAG_VIEW, "getDisplayList"); RenderNode displayList = view.getDisplayList(); RenderNode renderNode = view.getDisplayList(); Trace.traceEnd(Trace.TRACE_TAG_VIEW); endBuildDisplayListProfiling(buildDisplayListStartTime); return displayList; return renderNode; } private Rect beginFrame(HardwareCanvas canvas, Rect dirty, int surfaceState) { Loading core/java/android/view/View.java +67 −67 Original line number Diff line number Diff line Loading @@ -3557,7 +3557,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * of the View content. Its DisplayList content is cleared on temporary detach and reset on * cleanup. */ RenderNode mDisplayList; RenderNode mRenderNode; /** * Set to true when the view is sending hover accessibility events because it Loading Loading @@ -9720,8 +9720,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } void ensureRenderNode() { if (mDisplayList == null) { mDisplayList = RenderNode.create(getClass().getName()); if (mRenderNode == null) { mRenderNode = RenderNode.create(getClass().getName()); } } Loading Loading @@ -9867,8 +9867,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.mMatrixDirty = true; invalidateViewProperty(false, false); if (mDisplayList != null) { mDisplayList.setCameraDistance(-Math.abs(distance) / dpi); if (mRenderNode != null) { mRenderNode.setCameraDistance(-Math.abs(distance) / dpi); } if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) { // View was rejected last time it was drawn by its parent; this may have changed Loading Loading @@ -9913,8 +9913,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.mRotation = rotation; info.mMatrixDirty = true; invalidateViewProperty(false, true); if (mDisplayList != null) { mDisplayList.setRotation(rotation); if (mRenderNode != null) { mRenderNode.setRotation(rotation); } if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) { // View was rejected last time it was drawn by its parent; this may have changed Loading Loading @@ -9964,8 +9964,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.mRotationY = rotationY; info.mMatrixDirty = true; invalidateViewProperty(false, true); if (mDisplayList != null) { mDisplayList.setRotationY(rotationY); if (mRenderNode != null) { mRenderNode.setRotationY(rotationY); } if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) { // View was rejected last time it was drawn by its parent; this may have changed Loading Loading @@ -10015,8 +10015,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.mRotationX = rotationX; info.mMatrixDirty = true; invalidateViewProperty(false, true); if (mDisplayList != null) { mDisplayList.setRotationX(rotationX); if (mRenderNode != null) { mRenderNode.setRotationX(rotationX); } if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) { // View was rejected last time it was drawn by its parent; this may have changed Loading Loading @@ -10058,8 +10058,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.mScaleX = scaleX; info.mMatrixDirty = true; invalidateViewProperty(false, true); if (mDisplayList != null) { mDisplayList.setScaleX(scaleX); if (mRenderNode != null) { mRenderNode.setScaleX(scaleX); } if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) { // View was rejected last time it was drawn by its parent; this may have changed Loading Loading @@ -10101,8 +10101,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.mScaleY = scaleY; info.mMatrixDirty = true; invalidateViewProperty(false, true); if (mDisplayList != null) { mDisplayList.setScaleY(scaleY); if (mRenderNode != null) { mRenderNode.setScaleY(scaleY); } if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) { // View was rejected last time it was drawn by its parent; this may have changed Loading Loading @@ -10154,8 +10154,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.mPivotX = pivotX; info.mMatrixDirty = true; invalidateViewProperty(false, true); if (mDisplayList != null) { mDisplayList.setPivotX(pivotX); if (mRenderNode != null) { mRenderNode.setPivotX(pivotX); } if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) { // View was rejected last time it was drawn by its parent; this may have changed Loading Loading @@ -10206,8 +10206,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.mPivotY = pivotY; info.mMatrixDirty = true; invalidateViewProperty(false, true); if (mDisplayList != null) { mDisplayList.setPivotY(pivotY); if (mRenderNode != null) { mRenderNode.setPivotY(pivotY); } if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) { // View was rejected last time it was drawn by its parent; this may have changed Loading Loading @@ -10290,8 +10290,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } else { mPrivateFlags &= ~PFLAG_ALPHA_SET; invalidateViewProperty(true, false); if (mDisplayList != null) { mDisplayList.setAlpha(getFinalAlpha()); if (mRenderNode != null) { mRenderNode.setAlpha(getFinalAlpha()); } } } Loading @@ -10317,8 +10317,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, return true; } else { mPrivateFlags &= ~PFLAG_ALPHA_SET; if (mDisplayList != null) { mDisplayList.setAlpha(getFinalAlpha()); if (mRenderNode != null) { mRenderNode.setAlpha(getFinalAlpha()); } } } Loading @@ -10340,8 +10340,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mTransformationInfo.mTransitionAlpha = alpha; mPrivateFlags &= ~PFLAG_ALPHA_SET; invalidateViewProperty(true, false); if (mDisplayList != null) { mDisplayList.setAlpha(getFinalAlpha()); if (mRenderNode != null) { mRenderNode.setAlpha(getFinalAlpha()); } } } Loading Loading @@ -10414,8 +10414,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, int oldHeight = mBottom - mTop; mTop = top; if (mDisplayList != null) { mDisplayList.setTop(mTop); if (mRenderNode != null) { mRenderNode.setTop(mTop); } sizeChange(width, mBottom - mTop, width, oldHeight); Loading Loading @@ -10487,8 +10487,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, int oldHeight = mBottom - mTop; mBottom = bottom; if (mDisplayList != null) { mDisplayList.setBottom(mBottom); if (mRenderNode != null) { mRenderNode.setBottom(mBottom); } sizeChange(width, mBottom - mTop, width, oldHeight); Loading Loading @@ -10554,8 +10554,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, int height = mBottom - mTop; mLeft = left; if (mDisplayList != null) { mDisplayList.setLeft(left); if (mRenderNode != null) { mRenderNode.setLeft(left); } sizeChange(mRight - mLeft, height, oldWidth, height); Loading Loading @@ -10618,8 +10618,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, int height = mBottom - mTop; mRight = right; if (mDisplayList != null) { mDisplayList.setRight(mRight); if (mRenderNode != null) { mRenderNode.setRight(mRight); } sizeChange(mRight - mLeft, height, oldWidth, height); Loading Loading @@ -10719,8 +10719,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.mTranslationX = translationX; info.mMatrixDirty = true; invalidateViewProperty(false, true); if (mDisplayList != null) { mDisplayList.setTranslationX(translationX); if (mRenderNode != null) { mRenderNode.setTranslationX(translationX); } if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) { // View was rejected last time it was drawn by its parent; this may have changed Loading Loading @@ -10760,8 +10760,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.mTranslationY = translationY; info.mMatrixDirty = true; invalidateViewProperty(false, true); if (mDisplayList != null) { mDisplayList.setTranslationY(translationY); if (mRenderNode != null) { mRenderNode.setTranslationY(translationY); } if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) { // View was rejected last time it was drawn by its parent; this may have changed Loading Loading @@ -10793,8 +10793,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.mTranslationZ = translationZ; info.mMatrixDirty = true; invalidateViewProperty(false, true); if (mDisplayList != null) { mDisplayList.setTranslationZ(translationZ); if (mRenderNode != null) { mRenderNode.setTranslationZ(translationZ); } if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) { // View was rejected last time it was drawn by its parent; this may have changed Loading Loading @@ -10845,8 +10845,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mOutline.set(outline); } if (mDisplayList != null) { mDisplayList.setOutline(mOutline); if (mRenderNode != null) { mRenderNode.setOutline(mOutline); } } Loading Loading @@ -10882,8 +10882,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } else { mPrivateFlags3 &= ~PFLAG3_CLIP_TO_OUTLINE; } if (mDisplayList != null) { mDisplayList.setClipToOutline(clipToOutline); if (mRenderNode != null) { mRenderNode.setClipToOutline(clipToOutline); } } } Loading @@ -10895,8 +10895,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, */ public void setRevealClip(boolean shouldClip, boolean inverseClip, float x, float y, float radius) { if (mDisplayList != null) { mDisplayList.setRevealClip(shouldClip, inverseClip, x, y, radius); if (mRenderNode != null) { mRenderNode.setRevealClip(shouldClip, inverseClip, x, y, radius); // TODO: Handle this invalidate in a better way, or purely in native. invalidate(); } Loading Loading @@ -11008,7 +11008,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, final boolean matrixIsIdentity = mTransformationInfo == null || mTransformationInfo.mMatrixIsIdentity; if (matrixIsIdentity) { if (mDisplayList != null) { if (mRenderNode != null) { invalidateViewProperty(false, false); } else { final ViewParent p = mParent; Loading Loading @@ -11036,8 +11036,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mTop += offset; mBottom += offset; if (mDisplayList != null) { mDisplayList.offsetTopAndBottom(offset); if (mRenderNode != null) { mRenderNode.offsetTopAndBottom(offset); invalidateViewProperty(false, false); } else { if (!matrixIsIdentity) { Loading @@ -11059,7 +11059,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, final boolean matrixIsIdentity = mTransformationInfo == null || mTransformationInfo.mMatrixIsIdentity; if (matrixIsIdentity) { if (mDisplayList != null) { if (mRenderNode != null) { invalidateViewProperty(false, false); } else { final ViewParent p = mParent; Loading @@ -11084,8 +11084,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mLeft += offset; mRight += offset; if (mDisplayList != null) { mDisplayList.offsetLeftAndRight(offset); if (mRenderNode != null) { mRenderNode.offsetLeftAndRight(offset); invalidateViewProperty(false, false); } else { if (!matrixIsIdentity) { Loading Loading @@ -11528,7 +11528,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * list properties are not being used in this view */ void invalidateViewProperty(boolean invalidateParent, boolean forceRedraw) { if (mDisplayList == null || (mPrivateFlags & PFLAG_DRAW_ANIMATION) == PFLAG_DRAW_ANIMATION) { if (mRenderNode == null || (mPrivateFlags & PFLAG_DRAW_ANIMATION) == PFLAG_DRAW_ANIMATION) { if (invalidateParent) { invalidateParentCaches(); } Loading Loading @@ -13695,7 +13695,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mHardwareLayer.setLayerPaint(mLayerPaint); RenderNode displayList = mHardwareLayer.startRecording(); getDisplayList(displayList, true); updateDisplayListIfDirty(displayList, true); mHardwareLayer.endRecording(mLocalDirtyRect); mLocalDirtyRect.setEmpty(); } Loading Loading @@ -13841,7 +13841,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * the view will avoid creating a layer inside the resulting display list. * @return A new or reused DisplayList object. */ private void getDisplayList(@NonNull RenderNode renderNode, boolean isLayer) { private void updateDisplayListIfDirty(@NonNull RenderNode renderNode, boolean isLayer) { final HardwareRenderer renderer = getHardwareRenderer(); if (renderNode == null) { throw new IllegalArgumentException("RenderNode must not be null"); Loading Loading @@ -13943,22 +13943,22 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } /** * <p>Returns a display list that can be used to draw this view again * without executing its draw method.</p> * Returns a RenderNode with View draw content recorded, which can be * used to draw this view again without executing its draw method. * * @return A DisplayList ready to replay, or null if caching is not enabled. * @return A RenderNode ready to replay, or null if caching is not enabled. * * @hide */ public RenderNode getDisplayList() { ensureRenderNode(); getDisplayList(mDisplayList, false); return mDisplayList; updateDisplayListIfDirty(mRenderNode, false); return mRenderNode; } private void resetDisplayList() { if (mDisplayList != null && mDisplayList.isValid()) { mDisplayList.destroyDisplayListData(); if (mRenderNode != null && mRenderNode.isValid()) { mRenderNode.destroyDisplayListData(); } if (mBackgroundDisplayList != null && mBackgroundDisplayList.isValid()) { Loading Loading @@ -14656,9 +14656,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, transformToApply = parent.getChildTransformation(); } else { if ((mPrivateFlags3 & PFLAG3_VIEW_IS_ANIMATING_TRANSFORM) == PFLAG3_VIEW_IS_ANIMATING_TRANSFORM && mDisplayList != null) { PFLAG3_VIEW_IS_ANIMATING_TRANSFORM && mRenderNode != null) { // No longer animating: clear out old animation matrix mDisplayList.setAnimationMatrix(null); mRenderNode.setAnimationMatrix(null); mPrivateFlags3 &= ~PFLAG3_VIEW_IS_ANIMATING_TRANSFORM; } if (!useDisplayListProperties && Loading Loading @@ -15171,8 +15171,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if ((mPrivateFlags3 & PFLAG3_OUTLINE_DEFINED) == 0) { // Outline not currently define, query from background mOutline = background.getOutline(); if (mDisplayList != null) { mDisplayList.setOutline(mOutline); if (mRenderNode != null) { mRenderNode.setOutline(mOutline); } } } Loading Loading @@ -15508,8 +15508,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mTop = top; mRight = right; mBottom = bottom; if (mDisplayList != null) { mDisplayList.setLeftTopRightBottom(mLeft, mTop, mRight, mBottom); if (mRenderNode != null) { mRenderNode.setLeftTopRightBottom(mLeft, mTop, mRight, mBottom); } mPrivateFlags |= PFLAG_HAS_BOUNDS; core/java/android/view/ViewGroup.java +4 −4 Original line number Diff line number Diff line Loading @@ -3173,8 +3173,8 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager setBooleanFlag(FLAG_CLIP_CHILDREN, clipChildren); for (int i = 0; i < mChildrenCount; ++i) { View child = getChildAt(i); if (child.mDisplayList != null) { child.mDisplayList.setClipToBounds(clipChildren); if (child.mRenderNode != null) { child.mRenderNode.setClipToBounds(clipChildren); } } } Loading Loading @@ -4609,9 +4609,9 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager final View v = children[i]; v.mTop += offset; v.mBottom += offset; if (v.mDisplayList != null) { if (v.mRenderNode != null) { invalidate = true; v.mDisplayList.offsetTopAndBottom(offset); v.mRenderNode.offsetTopAndBottom(offset); } } Loading core/java/android/view/ViewPropertyAnimator.java +15 −15 Original line number Diff line number Diff line Loading @@ -925,51 +925,51 @@ public class ViewPropertyAnimator { */ private void setValue(int propertyConstant, float value) { final View.TransformationInfo info = mView.mTransformationInfo; final RenderNode displayList = mView.mDisplayList; final RenderNode renderNode = mView.mRenderNode; switch (propertyConstant) { case TRANSLATION_X: info.mTranslationX = value; if (displayList != null) displayList.setTranslationX(value); if (renderNode != null) renderNode.setTranslationX(value); break; case TRANSLATION_Y: info.mTranslationY = value; if (displayList != null) displayList.setTranslationY(value); if (renderNode != null) renderNode.setTranslationY(value); break; case TRANSLATION_Z: info.mTranslationZ = value; if (displayList != null) displayList.setTranslationZ(value); if (renderNode != null) renderNode.setTranslationZ(value); break; case ROTATION: info.mRotation = value; if (displayList != null) displayList.setRotation(value); if (renderNode != null) renderNode.setRotation(value); break; case ROTATION_X: info.mRotationX = value; if (displayList != null) displayList.setRotationX(value); if (renderNode != null) renderNode.setRotationX(value); break; case ROTATION_Y: info.mRotationY = value; if (displayList != null) displayList.setRotationY(value); if (renderNode != null) renderNode.setRotationY(value); break; case SCALE_X: info.mScaleX = value; if (displayList != null) displayList.setScaleX(value); if (renderNode != null) renderNode.setScaleX(value); break; case SCALE_Y: info.mScaleY = value; if (displayList != null) displayList.setScaleY(value); if (renderNode != null) renderNode.setScaleY(value); break; case X: info.mTranslationX = value - mView.mLeft; if (displayList != null) displayList.setTranslationX(value - mView.mLeft); if (renderNode != null) renderNode.setTranslationX(value - mView.mLeft); break; case Y: info.mTranslationY = value - mView.mTop; if (displayList != null) displayList.setTranslationY(value - mView.mTop); if (renderNode != null) renderNode.setTranslationY(value - mView.mTop); break; case ALPHA: info.mAlpha = value; if (displayList != null) displayList.setAlpha(value); if (renderNode != null) renderNode.setAlpha(value); break; } } Loading Loading @@ -1093,7 +1093,7 @@ public class ViewPropertyAnimator { // Shouldn't happen, but just to play it safe return; } boolean useDisplayListProperties = mView.mDisplayList != null; boolean useRenderNodeProperties = mView.mRenderNode != null; // alpha requires slightly different treatment than the other (transform) properties. // The logic in setAlpha() is not simply setting mAlpha, plus the invalidation Loading @@ -1101,7 +1101,7 @@ public class ViewPropertyAnimator { // We track what kinds of properties are set, and how alpha is handled when it is // set, and perform the invalidation steps appropriately. boolean alphaHandled = false; if (!useDisplayListProperties) { if (!useRenderNodeProperties) { mView.invalidateParentCaches(); } float fraction = animation.getAnimatedFraction(); Loading @@ -1124,7 +1124,7 @@ public class ViewPropertyAnimator { } if ((propertyMask & TRANSFORM_MASK) != 0) { mView.mTransformationInfo.mMatrixDirty = true; if (!useDisplayListProperties) { if (!useRenderNodeProperties) { mView.mPrivateFlags |= View.PFLAG_DRAWN; // force another invalidation } } Loading core/java/android/view/ViewRootImpl.java +14 −14 Original line number Diff line number Diff line Loading @@ -1465,8 +1465,8 @@ public final class ViewRootImpl implements ViewParent, mWidth, mHeight); } mResizeBuffer.prepare(mWidth, mHeight, false); RenderNode layerDisplayList = mResizeBuffer.startRecording(); HardwareCanvas layerCanvas = layerDisplayList.start(mWidth, mHeight); RenderNode layerRenderNode = mResizeBuffer.startRecording(); HardwareCanvas layerCanvas = layerRenderNode.start(mWidth, mHeight); final int restoreCount = layerCanvas.save(); int yoff; Loading @@ -1484,9 +1484,9 @@ public final class ViewRootImpl implements ViewParent, mTranslator.translateCanvas(layerCanvas); } RenderNode displayList = mView.mDisplayList; if (displayList != null && displayList.isValid()) { layerCanvas.drawDisplayList(displayList, null, RenderNode renderNode = mView.mRenderNode; if (renderNode != null && renderNode.isValid()) { layerCanvas.drawDisplayList(renderNode, null, RenderNode.FLAG_CLIP_CHILDREN); } else { mView.draw(layerCanvas); Loading @@ -1499,9 +1499,9 @@ public final class ViewRootImpl implements ViewParent, com.android.internal.R.integer.config_mediumAnimTime); layerCanvas.restoreToCount(restoreCount); layerDisplayList.end(mAttachInfo.mHardwareRenderer, layerCanvas); layerDisplayList.setCaching(true); layerDisplayList.setLeftTopRightBottom(0, 0, mWidth, mHeight); layerRenderNode.end(mAttachInfo.mHardwareRenderer, layerCanvas); layerRenderNode.setCaching(true); layerRenderNode.setLeftTopRightBottom(0, 0, mWidth, mHeight); mTempRect.set(0, 0, mWidth, mHeight); mResizeBuffer.endRecording(mTempRect); mAttachInfo.mHardwareRenderer.flushLayerUpdates(); Loading Loading @@ -2178,9 +2178,9 @@ public final class ViewRootImpl implements ViewParent, * @hide */ void outputDisplayList(View view) { RenderNode displayList = view.getDisplayList(); if (displayList != null) { displayList.output(); RenderNode renderNode = view.getDisplayList(); if (renderNode != null) { renderNode.output(); } } Loading Loading @@ -5218,10 +5218,10 @@ public final class ViewRootImpl implements ViewParent, } private static void getGfxInfo(View view, int[] info) { RenderNode displayList = view.mDisplayList; RenderNode renderNode = view.mRenderNode; info[0]++; if (displayList != null) { info[1] += 0; /* TODO: Memory used by display lists */ if (renderNode != null) { info[1] += 0; /* TODO: Memory used by RenderNodes (properties + DisplayLists) */ } if (view instanceof ViewGroup) { Loading Loading
core/java/android/view/GLRenderer.java +3 −3 Original line number Diff line number Diff line Loading @@ -1203,7 +1203,7 @@ public class GLRenderer extends HardwareRenderer { private RenderNode buildDisplayList(View view, HardwareCanvas canvas) { if (mDrawDelta <= 0) { return view.mDisplayList; return view.mRenderNode; } view.mRecreateDisplayList = (view.mPrivateFlags & View.PFLAG_INVALIDATED) Loading @@ -1214,12 +1214,12 @@ public class GLRenderer extends HardwareRenderer { canvas.clearLayerUpdates(); Trace.traceBegin(Trace.TRACE_TAG_VIEW, "getDisplayList"); RenderNode displayList = view.getDisplayList(); RenderNode renderNode = view.getDisplayList(); Trace.traceEnd(Trace.TRACE_TAG_VIEW); endBuildDisplayListProfiling(buildDisplayListStartTime); return displayList; return renderNode; } private Rect beginFrame(HardwareCanvas canvas, Rect dirty, int surfaceState) { Loading
core/java/android/view/View.java +67 −67 Original line number Diff line number Diff line Loading @@ -3557,7 +3557,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * of the View content. Its DisplayList content is cleared on temporary detach and reset on * cleanup. */ RenderNode mDisplayList; RenderNode mRenderNode; /** * Set to true when the view is sending hover accessibility events because it Loading Loading @@ -9720,8 +9720,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } void ensureRenderNode() { if (mDisplayList == null) { mDisplayList = RenderNode.create(getClass().getName()); if (mRenderNode == null) { mRenderNode = RenderNode.create(getClass().getName()); } } Loading Loading @@ -9867,8 +9867,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.mMatrixDirty = true; invalidateViewProperty(false, false); if (mDisplayList != null) { mDisplayList.setCameraDistance(-Math.abs(distance) / dpi); if (mRenderNode != null) { mRenderNode.setCameraDistance(-Math.abs(distance) / dpi); } if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) { // View was rejected last time it was drawn by its parent; this may have changed Loading Loading @@ -9913,8 +9913,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.mRotation = rotation; info.mMatrixDirty = true; invalidateViewProperty(false, true); if (mDisplayList != null) { mDisplayList.setRotation(rotation); if (mRenderNode != null) { mRenderNode.setRotation(rotation); } if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) { // View was rejected last time it was drawn by its parent; this may have changed Loading Loading @@ -9964,8 +9964,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.mRotationY = rotationY; info.mMatrixDirty = true; invalidateViewProperty(false, true); if (mDisplayList != null) { mDisplayList.setRotationY(rotationY); if (mRenderNode != null) { mRenderNode.setRotationY(rotationY); } if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) { // View was rejected last time it was drawn by its parent; this may have changed Loading Loading @@ -10015,8 +10015,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.mRotationX = rotationX; info.mMatrixDirty = true; invalidateViewProperty(false, true); if (mDisplayList != null) { mDisplayList.setRotationX(rotationX); if (mRenderNode != null) { mRenderNode.setRotationX(rotationX); } if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) { // View was rejected last time it was drawn by its parent; this may have changed Loading Loading @@ -10058,8 +10058,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.mScaleX = scaleX; info.mMatrixDirty = true; invalidateViewProperty(false, true); if (mDisplayList != null) { mDisplayList.setScaleX(scaleX); if (mRenderNode != null) { mRenderNode.setScaleX(scaleX); } if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) { // View was rejected last time it was drawn by its parent; this may have changed Loading Loading @@ -10101,8 +10101,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.mScaleY = scaleY; info.mMatrixDirty = true; invalidateViewProperty(false, true); if (mDisplayList != null) { mDisplayList.setScaleY(scaleY); if (mRenderNode != null) { mRenderNode.setScaleY(scaleY); } if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) { // View was rejected last time it was drawn by its parent; this may have changed Loading Loading @@ -10154,8 +10154,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.mPivotX = pivotX; info.mMatrixDirty = true; invalidateViewProperty(false, true); if (mDisplayList != null) { mDisplayList.setPivotX(pivotX); if (mRenderNode != null) { mRenderNode.setPivotX(pivotX); } if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) { // View was rejected last time it was drawn by its parent; this may have changed Loading Loading @@ -10206,8 +10206,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.mPivotY = pivotY; info.mMatrixDirty = true; invalidateViewProperty(false, true); if (mDisplayList != null) { mDisplayList.setPivotY(pivotY); if (mRenderNode != null) { mRenderNode.setPivotY(pivotY); } if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) { // View was rejected last time it was drawn by its parent; this may have changed Loading Loading @@ -10290,8 +10290,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } else { mPrivateFlags &= ~PFLAG_ALPHA_SET; invalidateViewProperty(true, false); if (mDisplayList != null) { mDisplayList.setAlpha(getFinalAlpha()); if (mRenderNode != null) { mRenderNode.setAlpha(getFinalAlpha()); } } } Loading @@ -10317,8 +10317,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, return true; } else { mPrivateFlags &= ~PFLAG_ALPHA_SET; if (mDisplayList != null) { mDisplayList.setAlpha(getFinalAlpha()); if (mRenderNode != null) { mRenderNode.setAlpha(getFinalAlpha()); } } } Loading @@ -10340,8 +10340,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mTransformationInfo.mTransitionAlpha = alpha; mPrivateFlags &= ~PFLAG_ALPHA_SET; invalidateViewProperty(true, false); if (mDisplayList != null) { mDisplayList.setAlpha(getFinalAlpha()); if (mRenderNode != null) { mRenderNode.setAlpha(getFinalAlpha()); } } } Loading Loading @@ -10414,8 +10414,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, int oldHeight = mBottom - mTop; mTop = top; if (mDisplayList != null) { mDisplayList.setTop(mTop); if (mRenderNode != null) { mRenderNode.setTop(mTop); } sizeChange(width, mBottom - mTop, width, oldHeight); Loading Loading @@ -10487,8 +10487,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, int oldHeight = mBottom - mTop; mBottom = bottom; if (mDisplayList != null) { mDisplayList.setBottom(mBottom); if (mRenderNode != null) { mRenderNode.setBottom(mBottom); } sizeChange(width, mBottom - mTop, width, oldHeight); Loading Loading @@ -10554,8 +10554,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, int height = mBottom - mTop; mLeft = left; if (mDisplayList != null) { mDisplayList.setLeft(left); if (mRenderNode != null) { mRenderNode.setLeft(left); } sizeChange(mRight - mLeft, height, oldWidth, height); Loading Loading @@ -10618,8 +10618,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, int height = mBottom - mTop; mRight = right; if (mDisplayList != null) { mDisplayList.setRight(mRight); if (mRenderNode != null) { mRenderNode.setRight(mRight); } sizeChange(mRight - mLeft, height, oldWidth, height); Loading Loading @@ -10719,8 +10719,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.mTranslationX = translationX; info.mMatrixDirty = true; invalidateViewProperty(false, true); if (mDisplayList != null) { mDisplayList.setTranslationX(translationX); if (mRenderNode != null) { mRenderNode.setTranslationX(translationX); } if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) { // View was rejected last time it was drawn by its parent; this may have changed Loading Loading @@ -10760,8 +10760,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.mTranslationY = translationY; info.mMatrixDirty = true; invalidateViewProperty(false, true); if (mDisplayList != null) { mDisplayList.setTranslationY(translationY); if (mRenderNode != null) { mRenderNode.setTranslationY(translationY); } if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) { // View was rejected last time it was drawn by its parent; this may have changed Loading Loading @@ -10793,8 +10793,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.mTranslationZ = translationZ; info.mMatrixDirty = true; invalidateViewProperty(false, true); if (mDisplayList != null) { mDisplayList.setTranslationZ(translationZ); if (mRenderNode != null) { mRenderNode.setTranslationZ(translationZ); } if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) { // View was rejected last time it was drawn by its parent; this may have changed Loading Loading @@ -10845,8 +10845,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mOutline.set(outline); } if (mDisplayList != null) { mDisplayList.setOutline(mOutline); if (mRenderNode != null) { mRenderNode.setOutline(mOutline); } } Loading Loading @@ -10882,8 +10882,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } else { mPrivateFlags3 &= ~PFLAG3_CLIP_TO_OUTLINE; } if (mDisplayList != null) { mDisplayList.setClipToOutline(clipToOutline); if (mRenderNode != null) { mRenderNode.setClipToOutline(clipToOutline); } } } Loading @@ -10895,8 +10895,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, */ public void setRevealClip(boolean shouldClip, boolean inverseClip, float x, float y, float radius) { if (mDisplayList != null) { mDisplayList.setRevealClip(shouldClip, inverseClip, x, y, radius); if (mRenderNode != null) { mRenderNode.setRevealClip(shouldClip, inverseClip, x, y, radius); // TODO: Handle this invalidate in a better way, or purely in native. invalidate(); } Loading Loading @@ -11008,7 +11008,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, final boolean matrixIsIdentity = mTransformationInfo == null || mTransformationInfo.mMatrixIsIdentity; if (matrixIsIdentity) { if (mDisplayList != null) { if (mRenderNode != null) { invalidateViewProperty(false, false); } else { final ViewParent p = mParent; Loading Loading @@ -11036,8 +11036,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mTop += offset; mBottom += offset; if (mDisplayList != null) { mDisplayList.offsetTopAndBottom(offset); if (mRenderNode != null) { mRenderNode.offsetTopAndBottom(offset); invalidateViewProperty(false, false); } else { if (!matrixIsIdentity) { Loading @@ -11059,7 +11059,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, final boolean matrixIsIdentity = mTransformationInfo == null || mTransformationInfo.mMatrixIsIdentity; if (matrixIsIdentity) { if (mDisplayList != null) { if (mRenderNode != null) { invalidateViewProperty(false, false); } else { final ViewParent p = mParent; Loading @@ -11084,8 +11084,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mLeft += offset; mRight += offset; if (mDisplayList != null) { mDisplayList.offsetLeftAndRight(offset); if (mRenderNode != null) { mRenderNode.offsetLeftAndRight(offset); invalidateViewProperty(false, false); } else { if (!matrixIsIdentity) { Loading Loading @@ -11528,7 +11528,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * list properties are not being used in this view */ void invalidateViewProperty(boolean invalidateParent, boolean forceRedraw) { if (mDisplayList == null || (mPrivateFlags & PFLAG_DRAW_ANIMATION) == PFLAG_DRAW_ANIMATION) { if (mRenderNode == null || (mPrivateFlags & PFLAG_DRAW_ANIMATION) == PFLAG_DRAW_ANIMATION) { if (invalidateParent) { invalidateParentCaches(); } Loading Loading @@ -13695,7 +13695,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mHardwareLayer.setLayerPaint(mLayerPaint); RenderNode displayList = mHardwareLayer.startRecording(); getDisplayList(displayList, true); updateDisplayListIfDirty(displayList, true); mHardwareLayer.endRecording(mLocalDirtyRect); mLocalDirtyRect.setEmpty(); } Loading Loading @@ -13841,7 +13841,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * the view will avoid creating a layer inside the resulting display list. * @return A new or reused DisplayList object. */ private void getDisplayList(@NonNull RenderNode renderNode, boolean isLayer) { private void updateDisplayListIfDirty(@NonNull RenderNode renderNode, boolean isLayer) { final HardwareRenderer renderer = getHardwareRenderer(); if (renderNode == null) { throw new IllegalArgumentException("RenderNode must not be null"); Loading Loading @@ -13943,22 +13943,22 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } /** * <p>Returns a display list that can be used to draw this view again * without executing its draw method.</p> * Returns a RenderNode with View draw content recorded, which can be * used to draw this view again without executing its draw method. * * @return A DisplayList ready to replay, or null if caching is not enabled. * @return A RenderNode ready to replay, or null if caching is not enabled. * * @hide */ public RenderNode getDisplayList() { ensureRenderNode(); getDisplayList(mDisplayList, false); return mDisplayList; updateDisplayListIfDirty(mRenderNode, false); return mRenderNode; } private void resetDisplayList() { if (mDisplayList != null && mDisplayList.isValid()) { mDisplayList.destroyDisplayListData(); if (mRenderNode != null && mRenderNode.isValid()) { mRenderNode.destroyDisplayListData(); } if (mBackgroundDisplayList != null && mBackgroundDisplayList.isValid()) { Loading Loading @@ -14656,9 +14656,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, transformToApply = parent.getChildTransformation(); } else { if ((mPrivateFlags3 & PFLAG3_VIEW_IS_ANIMATING_TRANSFORM) == PFLAG3_VIEW_IS_ANIMATING_TRANSFORM && mDisplayList != null) { PFLAG3_VIEW_IS_ANIMATING_TRANSFORM && mRenderNode != null) { // No longer animating: clear out old animation matrix mDisplayList.setAnimationMatrix(null); mRenderNode.setAnimationMatrix(null); mPrivateFlags3 &= ~PFLAG3_VIEW_IS_ANIMATING_TRANSFORM; } if (!useDisplayListProperties && Loading Loading @@ -15171,8 +15171,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if ((mPrivateFlags3 & PFLAG3_OUTLINE_DEFINED) == 0) { // Outline not currently define, query from background mOutline = background.getOutline(); if (mDisplayList != null) { mDisplayList.setOutline(mOutline); if (mRenderNode != null) { mRenderNode.setOutline(mOutline); } } } Loading Loading @@ -15508,8 +15508,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mTop = top; mRight = right; mBottom = bottom; if (mDisplayList != null) { mDisplayList.setLeftTopRightBottom(mLeft, mTop, mRight, mBottom); if (mRenderNode != null) { mRenderNode.setLeftTopRightBottom(mLeft, mTop, mRight, mBottom); } mPrivateFlags |= PFLAG_HAS_BOUNDS;
core/java/android/view/ViewGroup.java +4 −4 Original line number Diff line number Diff line Loading @@ -3173,8 +3173,8 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager setBooleanFlag(FLAG_CLIP_CHILDREN, clipChildren); for (int i = 0; i < mChildrenCount; ++i) { View child = getChildAt(i); if (child.mDisplayList != null) { child.mDisplayList.setClipToBounds(clipChildren); if (child.mRenderNode != null) { child.mRenderNode.setClipToBounds(clipChildren); } } } Loading Loading @@ -4609,9 +4609,9 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager final View v = children[i]; v.mTop += offset; v.mBottom += offset; if (v.mDisplayList != null) { if (v.mRenderNode != null) { invalidate = true; v.mDisplayList.offsetTopAndBottom(offset); v.mRenderNode.offsetTopAndBottom(offset); } } Loading
core/java/android/view/ViewPropertyAnimator.java +15 −15 Original line number Diff line number Diff line Loading @@ -925,51 +925,51 @@ public class ViewPropertyAnimator { */ private void setValue(int propertyConstant, float value) { final View.TransformationInfo info = mView.mTransformationInfo; final RenderNode displayList = mView.mDisplayList; final RenderNode renderNode = mView.mRenderNode; switch (propertyConstant) { case TRANSLATION_X: info.mTranslationX = value; if (displayList != null) displayList.setTranslationX(value); if (renderNode != null) renderNode.setTranslationX(value); break; case TRANSLATION_Y: info.mTranslationY = value; if (displayList != null) displayList.setTranslationY(value); if (renderNode != null) renderNode.setTranslationY(value); break; case TRANSLATION_Z: info.mTranslationZ = value; if (displayList != null) displayList.setTranslationZ(value); if (renderNode != null) renderNode.setTranslationZ(value); break; case ROTATION: info.mRotation = value; if (displayList != null) displayList.setRotation(value); if (renderNode != null) renderNode.setRotation(value); break; case ROTATION_X: info.mRotationX = value; if (displayList != null) displayList.setRotationX(value); if (renderNode != null) renderNode.setRotationX(value); break; case ROTATION_Y: info.mRotationY = value; if (displayList != null) displayList.setRotationY(value); if (renderNode != null) renderNode.setRotationY(value); break; case SCALE_X: info.mScaleX = value; if (displayList != null) displayList.setScaleX(value); if (renderNode != null) renderNode.setScaleX(value); break; case SCALE_Y: info.mScaleY = value; if (displayList != null) displayList.setScaleY(value); if (renderNode != null) renderNode.setScaleY(value); break; case X: info.mTranslationX = value - mView.mLeft; if (displayList != null) displayList.setTranslationX(value - mView.mLeft); if (renderNode != null) renderNode.setTranslationX(value - mView.mLeft); break; case Y: info.mTranslationY = value - mView.mTop; if (displayList != null) displayList.setTranslationY(value - mView.mTop); if (renderNode != null) renderNode.setTranslationY(value - mView.mTop); break; case ALPHA: info.mAlpha = value; if (displayList != null) displayList.setAlpha(value); if (renderNode != null) renderNode.setAlpha(value); break; } } Loading Loading @@ -1093,7 +1093,7 @@ public class ViewPropertyAnimator { // Shouldn't happen, but just to play it safe return; } boolean useDisplayListProperties = mView.mDisplayList != null; boolean useRenderNodeProperties = mView.mRenderNode != null; // alpha requires slightly different treatment than the other (transform) properties. // The logic in setAlpha() is not simply setting mAlpha, plus the invalidation Loading @@ -1101,7 +1101,7 @@ public class ViewPropertyAnimator { // We track what kinds of properties are set, and how alpha is handled when it is // set, and perform the invalidation steps appropriately. boolean alphaHandled = false; if (!useDisplayListProperties) { if (!useRenderNodeProperties) { mView.invalidateParentCaches(); } float fraction = animation.getAnimatedFraction(); Loading @@ -1124,7 +1124,7 @@ public class ViewPropertyAnimator { } if ((propertyMask & TRANSFORM_MASK) != 0) { mView.mTransformationInfo.mMatrixDirty = true; if (!useDisplayListProperties) { if (!useRenderNodeProperties) { mView.mPrivateFlags |= View.PFLAG_DRAWN; // force another invalidation } } Loading
core/java/android/view/ViewRootImpl.java +14 −14 Original line number Diff line number Diff line Loading @@ -1465,8 +1465,8 @@ public final class ViewRootImpl implements ViewParent, mWidth, mHeight); } mResizeBuffer.prepare(mWidth, mHeight, false); RenderNode layerDisplayList = mResizeBuffer.startRecording(); HardwareCanvas layerCanvas = layerDisplayList.start(mWidth, mHeight); RenderNode layerRenderNode = mResizeBuffer.startRecording(); HardwareCanvas layerCanvas = layerRenderNode.start(mWidth, mHeight); final int restoreCount = layerCanvas.save(); int yoff; Loading @@ -1484,9 +1484,9 @@ public final class ViewRootImpl implements ViewParent, mTranslator.translateCanvas(layerCanvas); } RenderNode displayList = mView.mDisplayList; if (displayList != null && displayList.isValid()) { layerCanvas.drawDisplayList(displayList, null, RenderNode renderNode = mView.mRenderNode; if (renderNode != null && renderNode.isValid()) { layerCanvas.drawDisplayList(renderNode, null, RenderNode.FLAG_CLIP_CHILDREN); } else { mView.draw(layerCanvas); Loading @@ -1499,9 +1499,9 @@ public final class ViewRootImpl implements ViewParent, com.android.internal.R.integer.config_mediumAnimTime); layerCanvas.restoreToCount(restoreCount); layerDisplayList.end(mAttachInfo.mHardwareRenderer, layerCanvas); layerDisplayList.setCaching(true); layerDisplayList.setLeftTopRightBottom(0, 0, mWidth, mHeight); layerRenderNode.end(mAttachInfo.mHardwareRenderer, layerCanvas); layerRenderNode.setCaching(true); layerRenderNode.setLeftTopRightBottom(0, 0, mWidth, mHeight); mTempRect.set(0, 0, mWidth, mHeight); mResizeBuffer.endRecording(mTempRect); mAttachInfo.mHardwareRenderer.flushLayerUpdates(); Loading Loading @@ -2178,9 +2178,9 @@ public final class ViewRootImpl implements ViewParent, * @hide */ void outputDisplayList(View view) { RenderNode displayList = view.getDisplayList(); if (displayList != null) { displayList.output(); RenderNode renderNode = view.getDisplayList(); if (renderNode != null) { renderNode.output(); } } Loading Loading @@ -5218,10 +5218,10 @@ public final class ViewRootImpl implements ViewParent, } private static void getGfxInfo(View view, int[] info) { RenderNode displayList = view.mDisplayList; RenderNode renderNode = view.mRenderNode; info[0]++; if (displayList != null) { info[1] += 0; /* TODO: Memory used by display lists */ if (renderNode != null) { info[1] += 0; /* TODO: Memory used by RenderNodes (properties + DisplayLists) */ } if (view instanceof ViewGroup) { Loading