blob: 82af69fac92b09c36ef4c792951019305bddfb9b [file] [log] [blame]
// 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;