diff options
author | Romain Guy <romainguy@google.com> | 2013-06-17 20:39:45 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-06-17 20:39:45 +0000 |
commit | fb5c9050978afad2c1df570a13a6747f438c27f7 (patch) | |
tree | 5ad303b8842436dccb104e46d19aea14d5617cfb /core | |
parent | 61e1ca68fa82e5228b5bfcdad8deecd9383fb183 (diff) | |
parent | e93482f5eac3df581d57e64c2a771a96aa868585 (diff) | |
download | frameworks_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.java | 6 | ||||
-rw-r--r-- | core/java/android/view/HardwareCanvas.java | 13 | ||||
-rw-r--r-- | core/java/android/view/HardwareRenderer.java | 16 | ||||
-rw-r--r-- | core/java/android/view/View.java | 2 | ||||
-rw-r--r-- | core/jni/android_view_GLES20Canvas.cpp | 6 |
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 }, |