summaryrefslogtreecommitdiffstats
path: root/core/java/android
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/view/DisplayList.java34
-rw-r--r--core/java/android/view/GLRenderer.java6
-rw-r--r--core/java/android/view/HardwareLayer.java2
-rw-r--r--core/java/android/view/HardwareRenderer.java2
-rw-r--r--core/java/android/view/ThreadedRenderer.java6
-rw-r--r--core/java/android/view/View.java5
-rw-r--r--core/java/android/widget/Editor.java3
7 files changed, 36 insertions, 22 deletions
diff --git a/core/java/android/view/DisplayList.java b/core/java/android/view/DisplayList.java
index 0ae36c1..be6f401 100644
--- a/core/java/android/view/DisplayList.java
+++ b/core/java/android/view/DisplayList.java
@@ -122,9 +122,6 @@ import android.graphics.Path;
* @hide
*/
public class DisplayList {
- private boolean mValid;
- private final long mNativeDisplayList;
-
/**
* Flag used when calling
* {@link HardwareCanvas#drawDisplayList(DisplayList, android.graphics.Rect, int)}
@@ -175,6 +172,10 @@ public class DisplayList {
*/
public static final int STATUS_DREW = 0x4;
+ private boolean mValid;
+ private final long mNativeDisplayList;
+ private HardwareRenderer mRenderer;
+
private DisplayList(String name) {
mNativeDisplayList = nCreate();
nSetDisplayListName(mNativeDisplayList, name);
@@ -233,7 +234,13 @@ public class DisplayList {
GLES20RecordingCanvas canvas = (GLES20RecordingCanvas) endCanvas;
canvas.onPostDraw();
long displayListData = canvas.finishRecording();
- renderer.swapDisplayListData(mNativeDisplayList, displayListData);
+ if (renderer != mRenderer) {
+ // If we are changing renderers first destroy with the old
+ // renderer, then set with the new one
+ destroyDisplayListData();
+ }
+ mRenderer = renderer;
+ setDisplayListData(displayListData);
canvas.recycle();
mValid = true;
}
@@ -245,14 +252,22 @@ public class DisplayList {
*
* @hide
*/
- public void destroyDisplayListData(HardwareRenderer renderer) {
- if (renderer == null) {
- throw new IllegalArgumentException("Cannot destroyDisplayListData with a null renderer");
- }
- renderer.swapDisplayListData(mNativeDisplayList, 0);
+ public void destroyDisplayListData() {
+ if (!mValid) return;
+
+ setDisplayListData(0);
+ mRenderer = null;
mValid = false;
}
+ private void setDisplayListData(long newData) {
+ if (mRenderer != null) {
+ mRenderer.setDisplayListData(mNativeDisplayList, newData);
+ } else {
+ throw new IllegalStateException("Trying to set data without a renderer! data=" + newData);
+ }
+ }
+
/**
* Returns whether the display list is currently usable. If this returns false,
* the display list should be re-recorded prior to replaying it.
@@ -907,6 +922,7 @@ public class DisplayList {
@Override
protected void finalize() throws Throwable {
try {
+ destroyDisplayListData();
nDestroyDisplayList(mNativeDisplayList);
} finally {
super.finalize();
diff --git a/core/java/android/view/GLRenderer.java b/core/java/android/view/GLRenderer.java
index c90e4b0..81f778d 100644
--- a/core/java/android/view/GLRenderer.java
+++ b/core/java/android/view/GLRenderer.java
@@ -1196,10 +1196,10 @@ public class GLRenderer extends HardwareRenderer {
}
}
- void swapDisplayListData(long displayList, long newData) {
- nSwapDisplayListData(displayList, newData);
+ void setDisplayListData(long displayList, long newData) {
+ nSetDisplayListData(displayList, newData);
}
- private static native void nSwapDisplayListData(long displayList, long newData);
+ private static native void nSetDisplayListData(long displayList, long newData);
private DisplayList buildDisplayList(View view, HardwareCanvas canvas) {
if (mDrawDelta <= 0) {
diff --git a/core/java/android/view/HardwareLayer.java b/core/java/android/view/HardwareLayer.java
index c526dd2..46e2690 100644
--- a/core/java/android/view/HardwareLayer.java
+++ b/core/java/android/view/HardwareLayer.java
@@ -88,7 +88,7 @@ final class HardwareLayer {
}
if (mDisplayList != null) {
- mDisplayList.destroyDisplayListData(mRenderer);
+ mDisplayList.destroyDisplayListData();
mDisplayList = null;
}
if (mRenderer != null) {
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java
index bcc28e3..34efcf5 100644
--- a/core/java/android/view/HardwareRenderer.java
+++ b/core/java/android/view/HardwareRenderer.java
@@ -562,7 +562,7 @@ public abstract class HardwareRenderer {
mRequested = requested;
}
- abstract void swapDisplayListData(long displayList, long newData);
+ abstract void setDisplayListData(long displayList, long newData);
/**
* Describes a series of frames that should be drawn on screen as a graph.
diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java
index 3dcfbb3..a1fb123 100644
--- a/core/java/android/view/ThreadedRenderer.java
+++ b/core/java/android/view/ThreadedRenderer.java
@@ -148,8 +148,8 @@ public class ThreadedRenderer extends HardwareRenderer {
}
@Override
- void swapDisplayListData(long displayList, long newData) {
- nSwapDisplayListData(mNativeProxy, displayList, newData);
+ void setDisplayListData(long displayList, long newData) {
+ nSetDisplayListData(mNativeProxy, displayList, newData);
}
@Override
@@ -257,7 +257,7 @@ public class ThreadedRenderer extends HardwareRenderer {
private static native boolean nInitialize(long nativeProxy, Surface window);
private static native void nUpdateSurface(long nativeProxy, Surface window);
private static native void nSetup(long nativeProxy, int width, int height);
- private static native void nSwapDisplayListData(long nativeProxy, long displayList,
+ private static native void nSetDisplayListData(long nativeProxy, long displayList,
long newData);
private static native void nDrawDisplayList(long nativeProxy, long displayList,
int dirtyLeft, int dirtyTop, int dirtyRight, int dirtyBottom);
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 9b45f97..904ec44 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -14062,13 +14062,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
}
private void resetDisplayList() {
- HardwareRenderer renderer = getHardwareRenderer();
if (mDisplayList != null && mDisplayList.isValid()) {
- mDisplayList.destroyDisplayListData(renderer);
+ mDisplayList.destroyDisplayListData();
}
if (mBackgroundDisplayList != null && mBackgroundDisplayList.isValid()) {
- mBackgroundDisplayList.destroyDisplayListData(renderer);
+ mBackgroundDisplayList.destroyDisplayListData();
}
}
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index 98b43b3..53d9e28 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -287,13 +287,12 @@ public class Editor {
}
private void destroyDisplayListsData() {
- HardwareRenderer renderer = mTextView.getHardwareRenderer();
if (mTextDisplayLists != null) {
for (int i = 0; i < mTextDisplayLists.length; i++) {
DisplayList displayList = mTextDisplayLists[i] != null
? mTextDisplayLists[i].displayList : null;
if (displayList != null && displayList.isValid()) {
- displayList.destroyDisplayListData(renderer);
+ displayList.destroyDisplayListData();
}
}
}