diff options
author | Romain Guy <romainguy@google.com> | 2012-05-24 14:28:22 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2012-05-24 14:28:22 -0700 |
commit | ed1303132912f0d39bcd008c3efbc0422d7433fc (patch) | |
tree | d28d40b60411162be4cf6230feded0bae5dda1dd /core | |
parent | 8a9d8f068c29b8d195ffdcc250dccf7bcecd5f53 (diff) | |
parent | 94328c308bc8d283841ac6434d47b4c56389a388 (diff) | |
download | frameworks_base-ed1303132912f0d39bcd008c3efbc0422d7433fc.zip frameworks_base-ed1303132912f0d39bcd008c3efbc0422d7433fc.tar.gz frameworks_base-ed1303132912f0d39bcd008c3efbc0422d7433fc.tar.bz2 |
am 94328c30: Merge "Clear bitmap references from display lists as early as possible Bug #6555840" into jb-dev
* commit '94328c308bc8d283841ac6434d47b4c56389a388':
Clear bitmap references from display lists as early as possible Bug #6555840
Diffstat (limited to 'core')
-rw-r--r-- | core/java/android/view/DisplayList.java | 6 | ||||
-rw-r--r-- | core/java/android/view/GLES20DisplayList.java | 8 | ||||
-rw-r--r-- | core/java/android/view/View.java | 15 | ||||
-rw-r--r-- | core/java/android/view/ViewRootImpl.java | 4 |
4 files changed, 27 insertions, 6 deletions
diff --git a/core/java/android/view/DisplayList.java b/core/java/android/view/DisplayList.java index 3dab174..da666b5 100644 --- a/core/java/android/view/DisplayList.java +++ b/core/java/android/view/DisplayList.java @@ -83,6 +83,12 @@ public abstract class DisplayList { public abstract void invalidate(); /** + * Clears additional resources held onto by this display list. You should + * only invoke this method after {@link #invalidate()}. + */ + public abstract void clear(); + + /** * Returns whether the display list is currently usable. If this returns false, * the display list should be re-recorded prior to replaying it. * diff --git a/core/java/android/view/GLES20DisplayList.java b/core/java/android/view/GLES20DisplayList.java index 0154556..08a5831 100644 --- a/core/java/android/view/GLES20DisplayList.java +++ b/core/java/android/view/GLES20DisplayList.java @@ -72,6 +72,13 @@ class GLES20DisplayList extends DisplayList { } @Override + public void clear() { + if (!mValid) { + mBitmaps.clear(); + } + } + + @Override public boolean isValid() { return mValid; } @@ -343,7 +350,6 @@ class GLES20DisplayList extends DisplayList { private static native void nSetPivotX(int displayList, float pivotX); private static native void nSetCaching(int displayList, boolean caching); private static native void nSetClipChildren(int displayList, boolean clipChildren); - private static native void nSetApplicationScale(int displayList, float scale); private static native void nSetAlpha(int displayList, float alpha); private static native void nSetHasOverlappingRendering(int displayList, boolean hasOverlappingRendering); diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 20eef11..8cb5c85 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -6800,6 +6800,8 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal */ public void dispatchStartTemporaryDetach() { clearAccessibilityFocus(); + clearDisplayList(); + onStartTemporaryDetach(); } @@ -11455,10 +11457,8 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal } mAttachInfo.mViewRootImpl.cancelInvalidate(this); } else { - if (mDisplayList != null) { - // Should never happen - mDisplayList.invalidate(); - } + // Should never happen + clearDisplayList(); } mCurrentAnimation = null; @@ -12236,6 +12236,13 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal return mDisplayList; } + private void clearDisplayList() { + if (mDisplayList != null) { + mDisplayList.invalidate(); + mDisplayList.clear(); + } + } + /** * <p>Calling this method is equivalent to calling <code>getDrawingCache(false)</code>.</p> * diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index c9a41ad..551b6cc 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -2335,7 +2335,9 @@ public final class ViewRootImpl implements ViewParent, final int count = displayLists.size(); for (int i = 0; i < count; i++) { - displayLists.get(i).invalidate(); + final DisplayList displayList = displayLists.get(i); + displayList.invalidate(); + displayList.clear(); } displayLists.clear(); |