diff options
Diffstat (limited to 'core/java/android/view')
-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 |
4 files changed, 37 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; |