diff options
author | Romain Guy <romainguy@google.com> | 2012-08-08 15:01:43 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2012-08-08 15:01:43 -0700 |
commit | 091b5171397c6fd4296eb61001e0fcf1e67ade08 (patch) | |
tree | 484e4a9d722c4d6ec178cb4b0952485a9b5b8bfe | |
parent | 3d1235a51bd2e63b81bfa5c89e99ab95e253090d (diff) | |
parent | c89b14bba0f6cc2c91629080617f7ed215f697f3 (diff) | |
download | frameworks_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.java | 10 | ||||
-rw-r--r-- | core/java/android/view/GLES20TextureLayer.java | 5 | ||||
-rw-r--r-- | core/java/android/view/HardwareLayer.java | 7 | ||||
-rw-r--r-- | core/java/android/view/ViewRootImpl.java | 5 | ||||
-rw-r--r-- | core/jni/android_view_GLES20Canvas.cpp | 12 | ||||
-rw-r--r-- | libs/hwui/OpenGLRenderer.h | 31 |
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. |