summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2012-05-24 14:28:22 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2012-05-24 14:28:22 -0700
commited1303132912f0d39bcd008c3efbc0422d7433fc (patch)
treed28d40b60411162be4cf6230feded0bae5dda1dd /core
parent8a9d8f068c29b8d195ffdcc250dccf7bcecd5f53 (diff)
parent94328c308bc8d283841ac6434d47b4c56389a388 (diff)
downloadframeworks_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.java6
-rw-r--r--core/java/android/view/GLES20DisplayList.java8
-rw-r--r--core/java/android/view/View.java15
-rw-r--r--core/java/android/view/ViewRootImpl.java4
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();