collectFrames function
Collects FrameTimings while action runs and returns the window.
Implementation
Future<FrameWindow> collectFrames(Future<void> Function() action) async {
final timings = <FrameTiming>[];
// The callback receives a batch per frame — append, not replace.
void onTimings(List<FrameTiming> batch) => timings.addAll(batch);
SchedulerBinding.instance.addTimingsCallback(onTimings);
try {
await action();
} finally {
SchedulerBinding.instance.removeTimingsCallback(onTimings);
}
return FrameWindow(timings);
}