summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author John Reck <jreck@google.com> 2016-08-29 23:33:55 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2016-08-29 23:33:57 +0000
commit8eaa65b86745e6a6f7e66d4a3344d76d7a19bcf8 (patch)
tree78bd765a2c04b2282fe2012caa51c63ca7fee081
parentb7efddfc41003fa85e17b9eeb635ee7cc8f9ad03 (diff)
parent2e8a8a24320fac0eedfdfb4151068499bb6b00cd (diff)
Merge "Cherry pick TextureView fixes" into nyc-dev
-rw-r--r--core/java/android/view/TextureView.java54
1 files changed, 29 insertions, 25 deletions
diff --git a/core/java/android/view/TextureView.java b/core/java/android/view/TextureView.java
index 1a712c3916db..c7eca44c8749 100644
--- a/core/java/android/view/TextureView.java
+++ b/core/java/android/view/TextureView.java
@@ -218,15 +218,32 @@ public class TextureView extends View {
/** @hide */
@Override
protected void onDetachedFromWindowInternal() {
- destroySurface();
+ destroyHardwareLayer();
+ releaseSurfaceTexture();
super.onDetachedFromWindowInternal();
}
- private void destroySurface() {
+ /**
+ * @hide
+ */
+ @Override
+ protected void destroyHardwareResources() {
+ destroyHardwareLayer();
+ }
+
+ private void destroyHardwareLayer() {
if (mLayer != null) {
mLayer.detachSurfaceTexture();
+ mLayer.destroy();
+ mLayer = null;
+ mMatrixChanged = true;
+ }
+ }
+ private void releaseSurfaceTexture() {
+ if (mSurface != null) {
boolean shouldRelease = true;
+
if (mListener != null) {
shouldRelease = mListener.onSurfaceTextureDestroyed(mSurface);
}
@@ -235,14 +252,10 @@ public class TextureView extends View {
nDestroyNativeWindow();
}
- mLayer.destroy();
- if (shouldRelease) mSurface.release();
+ if (shouldRelease) {
+ mSurface.release();
+ }
mSurface = null;
- mLayer = null;
-
- // Make sure if/when new layer gets re-created, transform matrix will
- // be re-applied.
- mMatrixChanged = true;
mHadSurface = true;
}
}
@@ -355,17 +368,6 @@ public class TextureView extends View {
}
}
- /**
- * @hide
- */
- @Override
- protected void destroyHardwareResources() {
- super.destroyHardwareResources();
- destroySurface();
- invalidateParentCaches();
- invalidate(true);
- }
-
HardwareLayer getHardwareLayer() {
if (mLayer == null) {
if (mAttachInfo == null || mAttachInfo.mHardwareRenderer == null) {
@@ -373,17 +375,17 @@ public class TextureView extends View {
}
mLayer = mAttachInfo.mHardwareRenderer.createTextureLayer();
- if (!mUpdateSurface) {
+ boolean createNewSurface = (mSurface == null);
+ if (createNewSurface) {
// Create a new SurfaceTexture for the layer.
mSurface = new SurfaceTexture(false);
- mLayer.setSurfaceTexture(mSurface);
+ nCreateNativeWindow(mSurface);
}
+ mLayer.setSurfaceTexture(mSurface);
mSurface.setDefaultBufferSize(getWidth(), getHeight());
- nCreateNativeWindow(mSurface);
-
mSurface.setOnFrameAvailableListener(mUpdateListener, mAttachInfo.mHandler);
- if (mListener != null && !mUpdateSurface) {
+ if (mListener != null && createNewSurface) {
mListener.onSurfaceTextureAvailable(mSurface, getWidth(), getHeight());
}
mLayer.setLayerPaint(mLayerPaint);
@@ -742,9 +744,11 @@ public class TextureView extends View {
"released SurfaceTexture");
}
if (mSurface != null) {
+ nDestroyNativeWindow();
mSurface.release();
}
mSurface = surfaceTexture;
+ nCreateNativeWindow(mSurface);
/*
* If the view is visible and we already made a layer, update the