summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2012-08-08 15:01:43 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2012-08-08 15:01:43 -0700
commit091b5171397c6fd4296eb61001e0fcf1e67ade08 (patch)
tree484e4a9d722c4d6ec178cb4b0952485a9b5b8bfe
parent3d1235a51bd2e63b81bfa5c89e99ab95e253090d (diff)
parentc89b14bba0f6cc2c91629080617f7ed215f697f3 (diff)
downloadframeworks_base-091b5171397c6fd4296eb61001e0fcf1e67ade08.zip
frameworks_base-091b5171397c6fd4296eb61001e0fcf1e67ade08.tar.gz
frameworks_base-091b5171397c6fd4296eb61001e0fcf1e67ade08.tar.bz2
am c89b14bb: It seems that apparently useless public APIs are actually useful Bug #6953651
* commit 'c89b14bba0f6cc2c91629080617f7ed215f697f3': It seems that apparently useless public APIs are actually useful Bug #6953651
-rw-r--r--core/java/android/view/GLES20RenderLayer.java10
-rw-r--r--core/java/android/view/GLES20TextureLayer.java5
-rw-r--r--core/java/android/view/HardwareLayer.java7
-rw-r--r--core/java/android/view/ViewRootImpl.java5
-rw-r--r--core/jni/android_view_GLES20Canvas.cpp12
-rw-r--r--libs/hwui/OpenGLRenderer.h31
6 files changed, 46 insertions, 24 deletions
diff --git a/core/java/android/view/GLES20RenderLayer.java b/core/java/android/view/GLES20RenderLayer.java
index b5cfc11..a77425a 100644
--- a/core/java/android/view/GLES20RenderLayer.java
+++ b/core/java/android/view/GLES20RenderLayer.java
@@ -82,11 +82,17 @@ class GLES20RenderLayer extends GLES20Layer {
}
@Override
- void end() {
+ void end(Canvas currentCanvas) {
+ if (currentCanvas instanceof GLES20Canvas) {
+ ((GLES20Canvas) currentCanvas).resume();
+ }
}
@Override
- HardwareCanvas start() {
+ HardwareCanvas start(Canvas currentCanvas) {
+ if (currentCanvas instanceof GLES20Canvas) {
+ ((GLES20Canvas) currentCanvas).interrupt();
+ }
return getCanvas();
}
diff --git a/core/java/android/view/GLES20TextureLayer.java b/core/java/android/view/GLES20TextureLayer.java
index 6ad36ef..e198ef6 100644
--- a/core/java/android/view/GLES20TextureLayer.java
+++ b/core/java/android/view/GLES20TextureLayer.java
@@ -16,6 +16,7 @@
package android.view;
+import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Rect;
import android.graphics.SurfaceTexture;
@@ -56,12 +57,12 @@ class GLES20TextureLayer extends GLES20Layer {
}
@Override
- HardwareCanvas start() {
+ HardwareCanvas start(Canvas currentCanvas) {
return null;
}
@Override
- void end() {
+ void end(Canvas currentCanvas) {
}
SurfaceTexture getSurfaceTexture() {
diff --git a/core/java/android/view/HardwareLayer.java b/core/java/android/view/HardwareLayer.java
index 8fdf104..06c6e7c 100644
--- a/core/java/android/view/HardwareLayer.java
+++ b/core/java/android/view/HardwareLayer.java
@@ -17,6 +17,7 @@
package android.view;
import android.graphics.Bitmap;
+import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Rect;
@@ -143,13 +144,15 @@ abstract class HardwareLayer {
/**
* This must be invoked before drawing onto this layer.
+ * @param currentCanvas
*/
- abstract HardwareCanvas start();
+ abstract HardwareCanvas start(Canvas currentCanvas);
/**
* This must be invoked after drawing onto this layer.
+ * @param currentCanvas
*/
- abstract void end();
+ abstract void end(Canvas currentCanvas);
/**
* Copies this layer into the specified bitmap.
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 3993432..afcbaaf 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -1408,6 +1408,7 @@ public final class ViewRootImpl implements ViewParent,
disposeResizeBuffer();
boolean completed = false;
+ HardwareCanvas hwRendererCanvas = mAttachInfo.mHardwareRenderer.getCanvas();
HardwareCanvas layerCanvas = null;
try {
if (mResizeBuffer == null) {
@@ -1417,7 +1418,7 @@ public final class ViewRootImpl implements ViewParent,
mResizeBuffer.getHeight() != mHeight) {
mResizeBuffer.resize(mWidth, mHeight);
}
- layerCanvas = mResizeBuffer.start();
+ layerCanvas = mResizeBuffer.start(hwRendererCanvas);
layerCanvas.setViewport(mWidth, mHeight);
layerCanvas.onPreDraw(null);
final int restoreCount = layerCanvas.save();
@@ -1456,7 +1457,7 @@ public final class ViewRootImpl implements ViewParent,
layerCanvas.onPostDraw();
}
if (mResizeBuffer != null) {
- mResizeBuffer.end();
+ mResizeBuffer.end(hwRendererCanvas);
if (!completed) {
mResizeBuffer.destroy();
mResizeBuffer = null;
diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp
index 2bff8a1..9fc73a4 100644
--- a/core/jni/android_view_GLES20Canvas.cpp
+++ b/core/jni/android_view_GLES20Canvas.cpp
@@ -720,6 +720,16 @@ static void android_view_GLES20Canvas_outputDisplayList(JNIEnv* env,
// Layers
// ----------------------------------------------------------------------------
+static void android_view_GLES20Canvas_interrupt(JNIEnv* env, jobject clazz,
+ OpenGLRenderer* renderer) {
+ renderer->interrupt();
+}
+
+static void android_view_GLES20Canvas_resume(JNIEnv* env, jobject clazz,
+ OpenGLRenderer* renderer) {
+ renderer->resume();
+}
+
static OpenGLRenderer* android_view_GLES20Canvas_createLayerRenderer(JNIEnv* env,
jobject clazz, Layer* layer) {
if (layer) {
@@ -962,6 +972,8 @@ static JNINativeMethod gMethods[] = {
{ "nResetDisplayListRenderer", "(I)V", (void*) android_view_GLES20Canvas_resetDisplayListRenderer },
{ "nOutputDisplayList", "(II)V", (void*) android_view_GLES20Canvas_outputDisplayList },
+ { "nInterrupt", "(I)V", (void*) android_view_GLES20Canvas_interrupt },
+ { "nResume", "(I)V", (void*) android_view_GLES20Canvas_resume },
{ "nCreateLayerRenderer", "(I)I", (void*) android_view_GLES20Canvas_createLayerRenderer },
{ "nCreateLayer", "(IIZ[I)I", (void*) android_view_GLES20Canvas_createLayer },
diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h
index f4e6919..d3b98a4 100644
--- a/libs/hwui/OpenGLRenderer.h
+++ b/libs/hwui/OpenGLRenderer.h
@@ -112,6 +112,21 @@ public:
*/
virtual void finish();
+ /**
+ * This method must be invoked before handing control over to a draw functor.
+ * See callDrawGLFunction() for instance.
+ *
+ * This command must not be recorded inside display lists.
+ */
+ virtual void interrupt();
+
+ /**
+ * This method must be invoked after getting control back from a draw functor.
+ *
+ * This command must not be recorded inside display lists.
+ */
+ virtual void resume();
+
ANDROID_API status_t invokeFunctors(Rect& dirty);
ANDROID_API void detachFunctor(Functor* functor);
ANDROID_API void attachFunctor(Functor* functor);
@@ -219,22 +234,6 @@ public:
void endMark() const;
protected:
-
- /**
- * This method must be invoked before handing control over to a draw functor.
- * See callDrawGLFunction() for instance.
- *
- * This command must not be recorded inside display lists.
- */
- void interrupt();
-
- /**
- * This method must be invoked after getting control back from a draw functor.
- *
- * This command must not be recorded inside display lists.
- */
- void resume();
-
/**
* Compose the layer defined in the current snapshot with the layer
* defined by the previous snapshot.