summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2013-06-17 20:39:45 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-06-17 20:39:45 +0000
commitfb5c9050978afad2c1df570a13a6747f438c27f7 (patch)
tree5ad303b8842436dccb104e46d19aea14d5617cfb /core
parent61e1ca68fa82e5228b5bfcdad8deecd9383fb183 (diff)
parente93482f5eac3df581d57e64c2a771a96aa868585 (diff)
downloadframeworks_base-fb5c9050978afad2c1df570a13a6747f438c27f7.zip
frameworks_base-fb5c9050978afad2c1df570a13a6747f438c27f7.tar.gz
frameworks_base-fb5c9050978afad2c1df570a13a6747f438c27f7.tar.bz2
Merge "Cancel layer update when a layer is about to be destroyed Bug #9310706"
Diffstat (limited to 'core')
-rw-r--r--core/java/android/view/GLES20Canvas.java6
-rw-r--r--core/java/android/view/HardwareCanvas.java13
-rw-r--r--core/java/android/view/HardwareRenderer.java16
-rw-r--r--core/java/android/view/View.java2
-rw-r--r--core/jni/android_view_GLES20Canvas.cpp6
5 files changed, 43 insertions, 0 deletions
diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java
index 831b914..1f35c1d 100644
--- a/core/java/android/view/GLES20Canvas.java
+++ b/core/java/android/view/GLES20Canvas.java
@@ -163,6 +163,11 @@ class GLES20Canvas extends HardwareCanvas {
}
@Override
+ void cancelLayerUpdate(HardwareLayer layer) {
+ nCancelLayerUpdate(mRenderer, ((GLES20RenderLayer) layer).mLayer);
+ }
+
+ @Override
void flushLayerUpdates() {
nFlushLayerUpdates(mRenderer);
}
@@ -191,6 +196,7 @@ class GLES20Canvas extends HardwareCanvas {
private static native void nClearLayerUpdates(int renderer);
private static native void nFlushLayerUpdates(int renderer);
private static native void nPushLayerUpdate(int renderer, int layer);
+ private static native void nCancelLayerUpdate(int renderer, int layer);
///////////////////////////////////////////////////////////////////////////
// Canvas management
diff --git a/core/java/android/view/HardwareCanvas.java b/core/java/android/view/HardwareCanvas.java
index 88b0986..259e1cd 100644
--- a/core/java/android/view/HardwareCanvas.java
+++ b/core/java/android/view/HardwareCanvas.java
@@ -202,6 +202,19 @@ public abstract class HardwareCanvas extends Canvas {
abstract void pushLayerUpdate(HardwareLayer layer);
/**
+ * Cancels a queued layer update. If the specified layer was not
+ * queued for update, this method has no effect.
+ *
+ * @param layer The layer whose update to cancel
+ *
+ * @see #pushLayerUpdate(HardwareLayer)
+ * @see #clearLayerUpdates()
+ *
+ * @hide
+ */
+ abstract void cancelLayerUpdate(HardwareLayer layer);
+
+ /**
* Immediately executes all enqueued layer updates.
*
* @see #pushLayerUpdate(HardwareLayer)
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java
index 4bbf1a6..03428c7 100644
--- a/core/java/android/view/HardwareRenderer.java
+++ b/core/java/android/view/HardwareRenderer.java
@@ -451,10 +451,21 @@ public abstract class HardwareRenderer {
* @param layer The hardware layer that needs an update
*
* @see #flushLayerUpdates()
+ * @see #cancelLayerUpdate(HardwareLayer)
*/
abstract void pushLayerUpdate(HardwareLayer layer);
/**
+ * Cancels a queued layer update. If the specified layer was not
+ * queued for update, this method has no effect.
+ *
+ * @param layer The layer whose update to cancel
+ *
+ * @see #pushLayerUpdate(HardwareLayer)
+ */
+ abstract void cancelLayerUpdate(HardwareLayer layer);
+
+ /**
* Forces all enqueued layer updates to be executed immediately.
*
* @see #pushLayerUpdate(HardwareLayer)
@@ -2133,6 +2144,11 @@ public abstract class HardwareRenderer {
}
@Override
+ void cancelLayerUpdate(HardwareLayer layer) {
+ mGlCanvas.cancelLayerUpdate(layer);
+ }
+
+ @Override
void flushLayerUpdates() {
mGlCanvas.flushLayerUpdates();
}
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index c246cd4..525b58f 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -12709,6 +12709,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
if (info != null && info.mHardwareRenderer != null &&
info.mHardwareRenderer.isEnabled() &&
(valid || info.mHardwareRenderer.validate())) {
+
+ info.mHardwareRenderer.cancelLayerUpdate(mHardwareLayer);
mHardwareLayer.destroy();
mHardwareLayer = null;
diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp
index f3592a3..a2f7dbe 100644
--- a/core/jni/android_view_GLES20Canvas.cpp
+++ b/core/jni/android_view_GLES20Canvas.cpp
@@ -911,6 +911,11 @@ static void android_view_GLES20Canvas_pushLayerUpdate(JNIEnv* env, jobject clazz
renderer->pushLayerUpdate(layer);
}
+static void android_view_GLES20Canvas_cancelLayerUpdate(JNIEnv* env, jobject clazz,
+ OpenGLRenderer* renderer, Layer* layer) {
+ renderer->cancelLayerUpdate(layer);
+}
+
static void android_view_GLES20Canvas_clearLayerUpdates(JNIEnv* env, jobject clazz,
OpenGLRenderer* renderer) {
renderer->clearLayerUpdates();
@@ -1095,6 +1100,7 @@ static JNINativeMethod gMethods[] = {
{ "nClearLayerUpdates", "(I)V", (void*) android_view_GLES20Canvas_clearLayerUpdates },
{ "nFlushLayerUpdates", "(I)V", (void*) android_view_GLES20Canvas_flushLayerUpdates },
{ "nPushLayerUpdate", "(II)V", (void*) android_view_GLES20Canvas_pushLayerUpdate },
+ { "nCancelLayerUpdate", "(II)V", (void*) android_view_GLES20Canvas_cancelLayerUpdate },
{ "nSetTextureLayerTransform", "(II)V", (void*) android_view_GLES20Canvas_setTextureLayerTransform },