// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'package:flutter/foundation.dart'; // Any changes to this file should be reflected in the debugAssertAllSchedulerVarsUnset() // function below. /// Print a banner at the beginning of each frame. /// /// Frames triggered by the engine and handler by the scheduler binding will /// have a banner giving the frame number and the time stamp of the frame. /// /// Frames triggered eagerly by the widget framework (e.g. when calling /// [runApp]) will have a label saying "warm-up frame" instead of the time stamp /// (the time stamp sent to frame callbacks in that case is the time of the last /// frame, or 0:00 if it is the first frame). /// /// To include a banner at the end of each frame as well, to distinguish /// intra-frame output from inter-frame output, set [debugPrintEndFrameBanner] /// to true as well. /// /// See also: /// /// * [debugProfilePaintsEnabled], which does something similar for /// painting but using the timeline view. /// * [debugPrintLayouts], which does something similar for layout but using /// console output. /// * The discussions at [WidgetsBinding.drawFrame] and at /// [SchedulerBinding.handleBeginFrame]. bool debugPrintBeginFrameBanner = false; /// Print a banner at the end of each frame. /// /// Combined with [debugPrintBeginFrameBanner], this can be helpful for /// determining if code is running during a frame or between frames. bool debugPrintEndFrameBanner = false; /// Log the call stacks that cause a frame to be scheduled. /// /// This is called whenever [SchedulerBinding.scheduleFrame] schedules a frame. This /// can happen for various reasons, e.g. when a [Ticker] or /// [AnimationController] is started, or when [RenderObject.markNeedsLayout] is /// called, or when [State.setState] is called. /// /// To get a stack specifically when widgets are scheduled to be built, see /// [debugPrintScheduleBuildForStacks]. bool debugPrintScheduleFrameStacks = false; /// Returns true if none of the scheduler library debug variables have been changed. /// /// This function is used by the test framework to ensure that debug variables /// haven't been inadvertently changed. /// /// See [the scheduler library](scheduler/scheduler-library.html) for a complete /// list. bool debugAssertAllSchedulerVarsUnset(String reason) { assert(() { if (debugPrintBeginFrameBanner || debugPrintEndFrameBanner) { throw FlutterError(reason); } return true; }()); return true; }