diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/art/ARTSurfaceViewShadowNode.java b/ReactAndroid/src/main/java/com/facebook/react/views/art/ARTSurfaceViewShadowNode.java index e3c78600b..7ababfafc 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/art/ARTSurfaceViewShadowNode.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/art/ARTSurfaceViewShadowNode.java @@ -34,6 +34,7 @@ public class ARTSurfaceViewShadowNode extends LayoutShadowNode implements TextureView.SurfaceTextureListener { private @Nullable Surface mSurface; + private @Nullable boolean mHasPendingUpdates; private @Nullable Integer mBackgroundColor; @@ -62,7 +63,7 @@ public class ARTSurfaceViewShadowNode extends LayoutShadowNode private void drawOutput() { if (mSurface == null || !mSurface.isValid()) { - markChildrenUpdatesSeen(this); + mHasPendingUpdates = true; return; } @@ -77,7 +78,6 @@ public class ARTSurfaceViewShadowNode extends LayoutShadowNode for (int i = 0; i < getChildCount(); i++) { ARTVirtualNode child = (ARTVirtualNode) getChildAt(i); child.draw(canvas, paint, 1f); - child.markUpdateSeen(); } if (mSurface == null) { @@ -85,23 +85,20 @@ public class ARTSurfaceViewShadowNode extends LayoutShadowNode } mSurface.unlockCanvasAndPost(canvas); + mHasPendingUpdates = false; } catch (IllegalArgumentException | IllegalStateException e) { - FLog.e(ReactConstants.TAG, e.getClass().getSimpleName() + " in Surface.unlockCanvasAndPost"); - } - } - - private void markChildrenUpdatesSeen(ReactShadowNode shadowNode) { - for (int i = 0; i < shadowNode.getChildCount(); i++) { - ReactShadowNode child = shadowNode.getChildAt(i); - child.markUpdateSeen(); - markChildrenUpdatesSeen(child); + FLog.e(ReactConstants.TAG, e.getClass().getSimpleName() + " in SurfaceView.drawOutput"); + } catch (RuntimeException e) { + FLog.e(ReactConstants.TAG, e.getClass().getSimpleName() + " in SurfaceView.drawOutput"); } } @Override public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { mSurface = new Surface(surface); - drawOutput(); + if (mHasPendingUpdates) { + drawOutput(); + } } @Override @@ -112,7 +109,9 @@ public class ARTSurfaceViewShadowNode extends LayoutShadowNode } @Override - public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {} + public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { + drawOutput(); + } @Override public void onSurfaceTextureUpdated(SurfaceTexture surface) {}