Fix ThreadedRenderer.setEnabled()
Bug: 13914116
Fixes lifecycle issues around setEnabled where ThreadedRenderer
was reporting as being enabled before it had a Surface. This is
incorrect.
Also fix some EGL lifecycle issues
Change-Id: I12ebb279707f9b533a570b61d68735d858b560bf
diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java
index a747ab6..2e0f509 100644
--- a/core/java/android/view/ThreadedRenderer.java
+++ b/core/java/android/view/ThreadedRenderer.java
@@ -54,28 +54,46 @@
private int mWidth, mHeight;
private long mNativeProxy;
+ private boolean mInitialized = false;
ThreadedRenderer(boolean translucent) {
mNativeProxy = nCreateProxy(translucent);
- setEnabled(mNativeProxy != 0);
}
@Override
void destroy(boolean full) {
+ mInitialized = false;
+ updateEnabledState(null);
nDestroyCanvas(mNativeProxy);
}
+ private void updateEnabledState(Surface surface) {
+ if (surface == null || !surface.isValid()) {
+ setEnabled(false);
+ } else {
+ setEnabled(mInitialized);
+ }
+ }
+
@Override
boolean initialize(Surface surface) throws OutOfResourcesException {
+ mInitialized = true;
+ updateEnabledState(surface);
return nInitialize(mNativeProxy, surface);
}
@Override
void updateSurface(Surface surface) throws OutOfResourcesException {
+ updateEnabledState(surface);
nUpdateSurface(mNativeProxy, surface);
}
@Override
+ void pauseSurface(Surface surface) {
+ nPauseSurface(mNativeProxy, surface);
+ }
+
+ @Override
void destroyHardwareResources(View view) {
destroyResources(view);
// TODO: GLES20Canvas.flushCaches(GLES20Canvas.FLUSH_CACHES_LAYERS);
@@ -267,6 +285,7 @@
private static native boolean nInitialize(long nativeProxy, Surface window);
private static native void nUpdateSurface(long nativeProxy, Surface window);
+ private static native void nPauseSurface(long nativeProxy, Surface window);
private static native void nSetup(long nativeProxy, int width, int height);
private static native void nSetDisplayListData(long nativeProxy, long displayList,
long newData);