From 8d7071ea463a1304ffbf5f795a8214efa2a2e72a Mon Sep 17 00:00:00 2001 From: Ferhat Date: Tue, 21 Apr 2020 23:00:02 -0700 Subject: [PATCH] Prevent unnecessary DOM append call when canvas is reused (#17864) --- lib/web_ui/lib/src/engine/canvas_pool.dart | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/web_ui/lib/src/engine/canvas_pool.dart b/lib/web_ui/lib/src/engine/canvas_pool.dart index 56d80200233..85a50d758e6 100644 --- a/lib/web_ui/lib/src/engine/canvas_pool.dart +++ b/lib/web_ui/lib/src/engine/canvas_pool.dart @@ -130,7 +130,12 @@ class _CanvasPool extends _SaveStackTracking { if (isFirstChildElement) { _canvas.style.zIndex = '-1'; } - _rootElement.append(_canvas); + // Before appending canvas, check if canvas is already on rootElement. This + // optimization prevents DOM .append call when a PersistentSurface is + // reused. Reading lastChild is faster than append call. + if (_rootElement.lastChild != _canvas) { + _rootElement.append(_canvas); + } _context = _canvas.context2D; _contextHandle = ContextStateHandle(_context); _initializeViewport(requiresClearRect);