Merge "Fix invalidation problem with display lists" into honeycomb

This commit is contained in:
Chet Haase
2011-01-26 06:30:48 -08:00
committed by Android (Google) Code Review
2 changed files with 7 additions and 3 deletions

View File

@ -8249,7 +8249,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
// If we got here, we're recreating it. Mark it as such to ensure that
// we copy in child display lists into ours in drawChild()
mRecreateDisplayList = true;
if (mDisplayList == null) {
mDisplayList = mAttachInfo.mHardwareRenderer.createDisplayList(this);
// If we're creating a new display list, make sure our parent gets invalidated
@ -8287,6 +8286,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
mDisplayList.end();
}
} else {
mPrivateFlags |= DRAWN | DRAWING_CACHE_VALID;
mPrivateFlags &= ~DIRTY_MASK;
}
return mDisplayList;

View File

@ -3497,7 +3497,8 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
((ViewRoot) parent).invalidate();
parent = null;
} else if (view != null) {
if ((mPrivateFlags & DRAWN) == DRAWN) {
if ((view.mPrivateFlags & DRAWN) == DRAWN ||
(view.mPrivateFlags & DRAWING_CACHE_VALID) == DRAWING_CACHE_VALID) {
view.mPrivateFlags &= ~DRAWING_CACHE_VALID;
view.mPrivateFlags |= DIRTY;
parent = view.mParent;
@ -3594,7 +3595,8 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
ViewDebug.trace(this, ViewDebug.HierarchyTraceType.INVALIDATE_CHILD_IN_PARENT);
}
if ((mPrivateFlags & DRAWN) == DRAWN) {
if ((mPrivateFlags & DRAWN) == DRAWN ||
(mPrivateFlags & DRAWING_CACHE_VALID) == DRAWING_CACHE_VALID) {
if ((mGroupFlags & (FLAG_OPTIMIZE_INVALIDATE | FLAG_ANIMATION_DONE)) !=
FLAG_OPTIMIZE_INVALIDATE) {
dirty.offset(location[CHILD_LEFT_INDEX] - mScrollX,