am 378510c3: am 106f88c8: Merge "Revert "Revert "Merge getDisplayList and updateDisplayListIfDirty""" into mnc-dev

* commit '378510c3aecf958871e4d9b35b9bb5e80f5e9ea2':
  Revert "Revert "Merge getDisplayList and updateDisplayListIfDirty""
This commit is contained in:
Chris Craik
2015-05-01 22:05:57 +00:00
committed by Android Git Automerger
6 changed files with 22 additions and 32 deletions

View File

@@ -41,7 +41,7 @@ public class GhostView extends View {
final ViewGroup parent = (ViewGroup) mView.getParent(); final ViewGroup parent = (ViewGroup) mView.getParent();
setGhostedVisibility(View.INVISIBLE); setGhostedVisibility(View.INVISIBLE);
parent.mRecreateDisplayList = true; parent.mRecreateDisplayList = true;
parent.getDisplayList(); parent.updateDisplayListIfDirty();
} }
@Override @Override
@@ -49,7 +49,7 @@ public class GhostView extends View {
if (canvas instanceof DisplayListCanvas) { if (canvas instanceof DisplayListCanvas) {
DisplayListCanvas dlCanvas = (DisplayListCanvas) canvas; DisplayListCanvas dlCanvas = (DisplayListCanvas) canvas;
mView.mRecreateDisplayList = true; mView.mRecreateDisplayList = true;
RenderNode renderNode = mView.getDisplayList(); RenderNode renderNode = mView.updateDisplayListIfDirty();
if (renderNode.isValid()) { if (renderNode.isValid()) {
dlCanvas.insertReorderBarrier(); // enable shadow for this rendernode dlCanvas.insertReorderBarrier(); // enable shadow for this rendernode
dlCanvas.drawRenderNode(renderNode); dlCanvas.drawRenderNode(renderNode);
@@ -84,7 +84,7 @@ public class GhostView extends View {
final ViewGroup parent = (ViewGroup) mView.getParent(); final ViewGroup parent = (ViewGroup) mView.getParent();
if (parent != null) { if (parent != null) {
parent.mRecreateDisplayList = true; parent.mRecreateDisplayList = true;
parent.getDisplayList(); parent.updateDisplayListIfDirty();
} }
} }
} }

View File

@@ -269,7 +269,7 @@ public class ThreadedRenderer extends HardwareRenderer {
view.mRecreateDisplayList = (view.mPrivateFlags & View.PFLAG_INVALIDATED) view.mRecreateDisplayList = (view.mPrivateFlags & View.PFLAG_INVALIDATED)
== View.PFLAG_INVALIDATED; == View.PFLAG_INVALIDATED;
view.mPrivateFlags &= ~View.PFLAG_INVALIDATED; view.mPrivateFlags &= ~View.PFLAG_INVALIDATED;
view.getDisplayList(); view.updateDisplayListIfDirty();
view.mRecreateDisplayList = false; view.mRecreateDisplayList = false;
} }
@@ -285,7 +285,7 @@ public class ThreadedRenderer extends HardwareRenderer {
callbacks.onHardwarePreDraw(canvas); callbacks.onHardwarePreDraw(canvas);
canvas.insertReorderBarrier(); canvas.insertReorderBarrier();
canvas.drawRenderNode(view.getDisplayList()); canvas.drawRenderNode(view.updateDisplayListIfDirty());
canvas.insertInorderBarrier(); canvas.insertInorderBarrier();
callbacks.onHardwarePostDraw(canvas); callbacks.onHardwarePostDraw(canvas);

View File

@@ -14711,11 +14711,16 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
return !(mAttachInfo == null || mAttachInfo.mHardwareRenderer == null); return !(mAttachInfo == null || mAttachInfo.mHardwareRenderer == null);
} }
private void updateDisplayListIfDirty() { /**
* Gets the RenderNode for the view, and updates its DisplayList (if needed and supported)
* @hide
*/
@NonNull
public RenderNode updateDisplayListIfDirty() {
final RenderNode renderNode = mRenderNode; final RenderNode renderNode = mRenderNode;
if (!canHaveDisplayList()) { if (!canHaveDisplayList()) {
// can't populate RenderNode, don't try // can't populate RenderNode, don't try
return; return renderNode;
} }
if ((mPrivateFlags & PFLAG_DRAWING_CACHE_VALID) == 0 if ((mPrivateFlags & PFLAG_DRAWING_CACHE_VALID) == 0
@@ -14729,7 +14734,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
mPrivateFlags &= ~PFLAG_DIRTY_MASK; mPrivateFlags &= ~PFLAG_DIRTY_MASK;
dispatchGetDisplayList(); dispatchGetDisplayList();
return; // no work needed return renderNode; // no work needed
} }
// If we got here, we're recreating it. Mark it as such to ensure that // If we got here, we're recreating it. Mark it as such to ensure that
@@ -14778,19 +14783,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
mPrivateFlags |= PFLAG_DRAWN | PFLAG_DRAWING_CACHE_VALID; mPrivateFlags |= PFLAG_DRAWN | PFLAG_DRAWING_CACHE_VALID;
mPrivateFlags &= ~PFLAG_DIRTY_MASK; mPrivateFlags &= ~PFLAG_DIRTY_MASK;
} }
} return renderNode;
/**
* Returns a RenderNode with View draw content recorded, which can be
* used to draw this view again without executing its draw method.
*
* @return A RenderNode ready to replay, or null if caching is not enabled.
*
* @hide
*/
public RenderNode getDisplayList() {
updateDisplayListIfDirty();
return mRenderNode;
} }
private void resetDisplayList() { private void resetDisplayList() {
@@ -15552,7 +15545,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
if (drawingWithRenderNode) { if (drawingWithRenderNode) {
// Delay getting the display list until animation-driven alpha values are // Delay getting the display list until animation-driven alpha values are
// set up and possibly passed on to the view // set up and possibly passed on to the view
renderNode = getDisplayList(); renderNode = updateDisplayListIfDirty();
if (!renderNode.isValid()) { if (!renderNode.isValid()) {
// Uncommon, but possible. If a view is removed from the hierarchy during the call // Uncommon, but possible. If a view is removed from the hierarchy during the call
// to getDisplayList(), the display list will be marked invalid and we should not // to getDisplayList(), the display list will be marked invalid and we should not

View File

@@ -3524,10 +3524,9 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
} }
private void recreateChildDisplayList(View child) { private void recreateChildDisplayList(View child) {
child.mRecreateDisplayList = (child.mPrivateFlags & PFLAG_INVALIDATED) child.mRecreateDisplayList = (child.mPrivateFlags & PFLAG_INVALIDATED) != 0;
== PFLAG_INVALIDATED;
child.mPrivateFlags &= ~PFLAG_INVALIDATED; child.mPrivateFlags &= ~PFLAG_INVALIDATED;
child.getDisplayList(); child.updateDisplayListIfDirty();
child.mRecreateDisplayList = false; child.mRecreateDisplayList = false;
} }

View File

@@ -2322,11 +2322,9 @@ public final class ViewRootImpl implements ViewParent,
* @hide * @hide
*/ */
void outputDisplayList(View view) { void outputDisplayList(View view) {
RenderNode renderNode = view.getDisplayList(); RenderNode renderNode = view.updateDisplayListIfDirty();
if (renderNode != null) {
renderNode.output(); renderNode.output();
} }
}
/** /**
* @see #PROPERTY_PROFILE_RENDERING * @see #PROPERTY_PROFILE_RENDERING

View File

@@ -46,9 +46,9 @@ public class ProjectionActivity extends Activity {
} }
private void setProject(boolean value) { private void setProject(boolean value) {
RenderNode displayList = getDisplayList(); RenderNode renderNode = updateDisplayListIfDirty();
if (displayList != null) { if (renderNode != null) {
displayList.setProjectBackwards(value); renderNode.setProjectBackwards(value);
} }
// NOTE: we can't invalidate ProjectedView for the redraw because: // NOTE: we can't invalidate ProjectedView for the redraw because:
// 1) the view won't preserve displayList properties that it doesn't know about // 1) the view won't preserve displayList properties that it doesn't know about