Skip to content

Commit c89b14b

Browse files
author
Romain Guy
committed
It seems that apparently useless public APIs are actually useful
Bug #6953651 Change-Id: Ic47ce504e63262711f5d3edc76f7d2b9c12471ad
1 parent 6ab4511 commit c89b14b

File tree

6 files changed

+46
-24
lines changed

6 files changed

+46
-24
lines changed

core/java/android/view/GLES20RenderLayer.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,17 @@ HardwareCanvas getCanvas() {
8282
}
8383

8484
@Override
85-
void end() {
85+
void end(Canvas currentCanvas) {
86+
if (currentCanvas instanceof GLES20Canvas) {
87+
((GLES20Canvas) currentCanvas).resume();
88+
}
8689
}
8790

8891
@Override
89-
HardwareCanvas start() {
92+
HardwareCanvas start(Canvas currentCanvas) {
93+
if (currentCanvas instanceof GLES20Canvas) {
94+
((GLES20Canvas) currentCanvas).interrupt();
95+
}
9096
return getCanvas();
9197
}
9298

core/java/android/view/GLES20TextureLayer.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package android.view;
1818

19+
import android.graphics.Canvas;
1920
import android.graphics.Matrix;
2021
import android.graphics.Rect;
2122
import android.graphics.SurfaceTexture;
@@ -56,12 +57,12 @@ HardwareCanvas getCanvas() {
5657
}
5758

5859
@Override
59-
HardwareCanvas start() {
60+
HardwareCanvas start(Canvas currentCanvas) {
6061
return null;
6162
}
6263

6364
@Override
64-
void end() {
65+
void end(Canvas currentCanvas) {
6566
}
6667

6768
SurfaceTexture getSurfaceTexture() {

core/java/android/view/HardwareLayer.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package android.view;
1818

1919
import android.graphics.Bitmap;
20+
import android.graphics.Canvas;
2021
import android.graphics.Matrix;
2122
import android.graphics.Rect;
2223

@@ -143,13 +144,15 @@ boolean isOpaque() {
143144

144145
/**
145146
* This must be invoked before drawing onto this layer.
147+
* @param currentCanvas
146148
*/
147-
abstract HardwareCanvas start();
149+
abstract HardwareCanvas start(Canvas currentCanvas);
148150

149151
/**
150152
* This must be invoked after drawing onto this layer.
153+
* @param currentCanvas
151154
*/
152-
abstract void end();
155+
abstract void end(Canvas currentCanvas);
153156

154157
/**
155158
* Copies this layer into the specified bitmap.

core/java/android/view/ViewRootImpl.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1408,6 +1408,7 @@ private void performTraversals() {
14081408
disposeResizeBuffer();
14091409

14101410
boolean completed = false;
1411+
HardwareCanvas hwRendererCanvas = mAttachInfo.mHardwareRenderer.getCanvas();
14111412
HardwareCanvas layerCanvas = null;
14121413
try {
14131414
if (mResizeBuffer == null) {
@@ -1417,7 +1418,7 @@ private void performTraversals() {
14171418
mResizeBuffer.getHeight() != mHeight) {
14181419
mResizeBuffer.resize(mWidth, mHeight);
14191420
}
1420-
layerCanvas = mResizeBuffer.start();
1421+
layerCanvas = mResizeBuffer.start(hwRendererCanvas);
14211422
layerCanvas.setViewport(mWidth, mHeight);
14221423
layerCanvas.onPreDraw(null);
14231424
final int restoreCount = layerCanvas.save();
@@ -1456,7 +1457,7 @@ private void performTraversals() {
14561457
layerCanvas.onPostDraw();
14571458
}
14581459
if (mResizeBuffer != null) {
1459-
mResizeBuffer.end();
1460+
mResizeBuffer.end(hwRendererCanvas);
14601461
if (!completed) {
14611462
mResizeBuffer.destroy();
14621463
mResizeBuffer = null;

core/jni/android_view_GLES20Canvas.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -720,6 +720,16 @@ static void android_view_GLES20Canvas_outputDisplayList(JNIEnv* env,
720720
// Layers
721721
// ----------------------------------------------------------------------------
722722

723+
static void android_view_GLES20Canvas_interrupt(JNIEnv* env, jobject clazz,
724+
OpenGLRenderer* renderer) {
725+
renderer->interrupt();
726+
}
727+
728+
static void android_view_GLES20Canvas_resume(JNIEnv* env, jobject clazz,
729+
OpenGLRenderer* renderer) {
730+
renderer->resume();
731+
}
732+
723733
static OpenGLRenderer* android_view_GLES20Canvas_createLayerRenderer(JNIEnv* env,
724734
jobject clazz, Layer* layer) {
725735
if (layer) {
@@ -962,6 +972,8 @@ static JNINativeMethod gMethods[] = {
962972
{ "nResetDisplayListRenderer", "(I)V", (void*) android_view_GLES20Canvas_resetDisplayListRenderer },
963973

964974
{ "nOutputDisplayList", "(II)V", (void*) android_view_GLES20Canvas_outputDisplayList },
975+
{ "nInterrupt", "(I)V", (void*) android_view_GLES20Canvas_interrupt },
976+
{ "nResume", "(I)V", (void*) android_view_GLES20Canvas_resume },
965977

966978
{ "nCreateLayerRenderer", "(I)I", (void*) android_view_GLES20Canvas_createLayerRenderer },
967979
{ "nCreateLayer", "(IIZ[I)I", (void*) android_view_GLES20Canvas_createLayer },

libs/hwui/OpenGLRenderer.h

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,21 @@ class OpenGLRenderer {
112112
*/
113113
virtual void finish();
114114

115+
/**
116+
* This method must be invoked before handing control over to a draw functor.
117+
* See callDrawGLFunction() for instance.
118+
*
119+
* This command must not be recorded inside display lists.
120+
*/
121+
virtual void interrupt();
122+
123+
/**
124+
* This method must be invoked after getting control back from a draw functor.
125+
*
126+
* This command must not be recorded inside display lists.
127+
*/
128+
virtual void resume();
129+
115130
ANDROID_API status_t invokeFunctors(Rect& dirty);
116131
ANDROID_API void detachFunctor(Functor* functor);
117132
ANDROID_API void attachFunctor(Functor* functor);
@@ -219,22 +234,6 @@ class OpenGLRenderer {
219234
void endMark() const;
220235

221236
protected:
222-
223-
/**
224-
* This method must be invoked before handing control over to a draw functor.
225-
* See callDrawGLFunction() for instance.
226-
*
227-
* This command must not be recorded inside display lists.
228-
*/
229-
void interrupt();
230-
231-
/**
232-
* This method must be invoked after getting control back from a draw functor.
233-
*
234-
* This command must not be recorded inside display lists.
235-
*/
236-
void resume();
237-
238237
/**
239238
* Compose the layer defined in the current snapshot with the layer
240239
* defined by the previous snapshot.

0 commit comments

Comments
 (0)