summaryrefslogtreecommitdiffstats
path: root/core/java/android/view
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android/view')
-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
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;