Merge "Fix invalidation problem with display lists" into honeycomb
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 65d2e11..449091a 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -8249,7 +8249,6 @@
// 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 @@
mDisplayList.end();
}
+ } else {
+ mPrivateFlags |= DRAWN | DRAWING_CACHE_VALID;
+ mPrivateFlags &= ~DIRTY_MASK;
}
return mDisplayList;
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index f198c46..9e5b23c 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -3497,7 +3497,8 @@
((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 @@
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,