diff --git a/lib/ui/platform_dispatcher.dart b/lib/ui/platform_dispatcher.dart index aac7885656309..e8f7d83805baf 100644 --- a/lib/ui/platform_dispatcher.dart +++ b/lib/ui/platform_dispatcher.dart @@ -308,9 +308,8 @@ class PlatformDispatcher { _invoke(onMetricsChanged, _onMetricsChangedZone); } - // A debug-only variable that stores the [FlutterView]s for which - // [FlutterView.render] has already been called during the current - // [onBeginFrame]/[onDrawFrame] callback sequence. + // The [FlutterView]s for which [FlutterView.render] has already been called + // during the current [onBeginFrame]/[onDrawFrame] callback sequence. // // It is null outside the scope of those callbacks indicating that calls to // [FlutterView.render] must be ignored. Furthermore, if a given [FlutterView] @@ -320,16 +319,9 @@ class PlatformDispatcher { // Between [onBeginFrame] and [onDrawFrame] the properties value is // temporarily stored in `_renderedViewsBetweenCallbacks` so that it survives // the gap between the two callbacks. - // - // In release build, this variable is null, and therefore the calling rule is - // not enforced. This is because the check might hurt cold startup delay; - // see https://github.com/flutter/engine/pull/46919. - Set? _debugRenderedViews; - // A debug-only variable that temporarily stores the `_renderedViews` value - // between `_beginFrame` and `_drawFrame`. - // - // In release build, this variable is null. - Set? _debugRenderedViewsBetweenCallbacks; + Set? _renderedViews; + // The `_renderedViews` value between `_beginFrame` and `_drawFrame`. + Set? _renderedViewsBetweenCallbacks; /// A callback invoked when any view begins a frame. /// @@ -351,12 +343,9 @@ class PlatformDispatcher { // Called from the engine, via hooks.dart void _beginFrame(int microseconds) { - assert(_debugRenderedViews == null); - assert(_debugRenderedViewsBetweenCallbacks == null); - assert(() { - _debugRenderedViews = {}; - return true; - }()); + assert(_renderedViews == null); + assert(_renderedViewsBetweenCallbacks == null); + _renderedViews = {}; _invoke1( onBeginFrame, @@ -364,13 +353,10 @@ class PlatformDispatcher { Duration(microseconds: microseconds), ); - assert(_debugRenderedViews != null); - assert(_debugRenderedViewsBetweenCallbacks == null); - assert(() { - _debugRenderedViewsBetweenCallbacks = _debugRenderedViews; - _debugRenderedViews = null; - return true; - }()); + assert(_renderedViews != null); + assert(_renderedViewsBetweenCallbacks == null); + _renderedViewsBetweenCallbacks = _renderedViews; + _renderedViews = null; } /// A callback that is invoked for each frame after [onBeginFrame] has @@ -388,22 +374,16 @@ class PlatformDispatcher { // Called from the engine, via hooks.dart void _drawFrame() { - assert(_debugRenderedViews == null); - assert(_debugRenderedViewsBetweenCallbacks != null); - assert(() { - _debugRenderedViews = _debugRenderedViewsBetweenCallbacks; - _debugRenderedViewsBetweenCallbacks = null; - return true; - }()); + assert(_renderedViews == null); + assert(_renderedViewsBetweenCallbacks != null); + _renderedViews = _renderedViewsBetweenCallbacks; + _renderedViewsBetweenCallbacks = null; _invoke(onDrawFrame, _onDrawFrameZone); - assert(_debugRenderedViews != null); - assert(_debugRenderedViewsBetweenCallbacks == null); - assert(() { - _debugRenderedViews = null; - return true; - }()); + assert(_renderedViews != null); + assert(_renderedViewsBetweenCallbacks == null); + _renderedViews = null; } /// A callback that is invoked when pointer data is available. diff --git a/lib/ui/window.dart b/lib/ui/window.dart index 022227be017c4..71b9ea56a48d0 100644 --- a/lib/ui/window.dart +++ b/lib/ui/window.dart @@ -355,14 +355,10 @@ class FlutterView { /// painting. void render(Scene scene) { // Duplicated calls or calls outside of onBeginFrame/onDrawFrame (indicated - // by _debugRenderedViews being null) are ignored. See _debugRenderedViews. + // by _renderedViews being null) are ignored. See _renderedViews. // TODO(dkwingsmt): We should change this skip into an assertion. // https://github.com/flutter/flutter/issues/137073 - bool validRender = true; - assert(() { - validRender = platformDispatcher._debugRenderedViews?.add(this) ?? false; - return true; - }()); + final bool validRender = platformDispatcher._renderedViews?.add(this) ?? false; if (validRender) { _render(viewId, scene as _NativeScene); } diff --git a/shell/common/animator.cc b/shell/common/animator.cc index 1696e5009db24..1494ca2832afa 100644 --- a/shell/common/animator.cc +++ b/shell/common/animator.cc @@ -179,15 +179,7 @@ void Animator::EndFrame() { void Animator::Render(int64_t view_id, std::unique_ptr layer_tree, float device_pixel_ratio) { - // Animator::Render should be called between BeginFrame and EndFrame, - // which is indicated by frame_timings_recorder_ being non-null. - // This might happen on release build, and is guarded by PlatformDispatcher on - // debug build. - // TODO(dkwingsmt): We should change this skip into an assertion. - // https://github.com/flutter/flutter/issues/137073 - if (frame_timings_recorder_ == nullptr) { - return; - } + FML_CHECK(frame_timings_recorder_ != nullptr); has_rendered_ = true; diff --git a/shell/common/animator.h b/shell/common/animator.h index 5358ed6b14001..b8b6cdcc1d331 100644 --- a/shell/common/animator.h +++ b/shell/common/animator.h @@ -58,7 +58,8 @@ class Animator final { /// /// This method must be called during a vsync callback, or /// technically, between Animator::BeginFrame and Animator::EndFrame - /// (both private methods). Otherwise, this call will be ignored. + /// (both private methods). Otherwise, an assertion will be + /// triggered. /// void Render(int64_t view_id, std::unique_ptr layer_tree,