endFrame method

void endFrame({
  1. Duration? totalDuration,
  2. Duration? buildDuration,
})

Ends a frame and publishes collected timing information.

Implementation

void endFrame({Duration? totalDuration, Duration? buildDuration}) {
  _needsPaint = false;
  _hadBuildThisFrame = false;

  _widgetFrameCount++;

  final timing = WidgetFrameTiming(
    frameNumber: _widgetFrameCount,
    buildDuration: buildDuration ?? _currentBuildDuration,
    layoutDuration: _currentLayoutDuration,
    paintDuration: _currentPaintDuration,
    totalDuration: totalDuration ?? Duration.zero,
    timestamp: DateTime.now(),
  );

  _recentTimings.add(timing);
  if (_recentTimings.length > _maxRecentTimings) {
    _recentTimings.removeAt(0);
  }

  for (final callback in _frameTimingCallbacks) {
    callback(timing);
  }
}