summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/view/ViewAncestor.java13
1 files changed, 11 insertions, 2 deletions
diff --git a/core/java/android/view/ViewAncestor.java b/core/java/android/view/ViewAncestor.java
index 40e99a1788c2..ad660c1e209d 100644
--- a/core/java/android/view/ViewAncestor.java
+++ b/core/java/android/view/ViewAncestor.java
@@ -288,6 +288,10 @@ public final class ViewAncestor extends Handler implements ViewParent,
private final int mDensity;
+ // This flag tracks when the mIgnoreDirtyState flag is set during draw(), to avoid
+ // clearing that flag prematurely
+ private boolean mSetIgnoreDirtyState = false;
+
/**
* Consistency verifier for debugging purposes.
*/
@@ -672,6 +676,7 @@ public final class ViewAncestor extends Handler implements ViewParent,
}
}
if (!mDirty.isEmpty() && !mDirty.contains(dirty)) {
+ mSetIgnoreDirtyState = true;
mAttachInfo.mIgnoreDirtyState = true;
}
mDirty.union(dirty);
@@ -1747,7 +1752,7 @@ public final class ViewAncestor extends Handler implements ViewParent,
mAttachInfo.mIgnoreDirtyState = true;
dirty.union(0, 0, (int) (mWidth * appScale + 0.5f), (int) (mHeight * appScale + 0.5f));
}
-
+
if (mAttachInfo.mHardwareRenderer != null && mAttachInfo.mHardwareRenderer.isEnabled()) {
if (!dirty.isEmpty() || mIsAnimating) {
mIsAnimating = false;
@@ -1877,9 +1882,13 @@ public final class ViewAncestor extends Handler implements ViewParent,
}
canvas.setScreenDensity(scalingRequired
? DisplayMetrics.DENSITY_DEVICE : 0);
+ mSetIgnoreDirtyState = false;
mView.draw(canvas);
} finally {
- mAttachInfo.mIgnoreDirtyState = false;
+ if (!mSetIgnoreDirtyState) {
+ // Only clear the flag if it was not set during the mView.draw() call
+ mAttachInfo.mIgnoreDirtyState = false;
+ }
}
if (false && ViewDebug.consistencyCheckEnabled) {