analysis/performance library

Classes

FrameData
A single captured frame. Jank is judged against the device's actual frame budget (PerformanceCapture.frameBudgetMs), captured at construction time.
PerformanceCapture
Captures performance data from the running Flutter app via VM service.
ScreenPerformance
Performance result for one screen

Functions

budgetMsForRefreshRate(double hz) double
The per-frame budget for a display refresh rate: 16.7ms at 60Hz, 11.1ms at 90Hz, 8.3ms at 120Hz. Judging a 120Hz phone against 16ms grades a visibly janky app as "A".
frameFromFlutterFrameEvent(Map<String, dynamic> data) FrameData?
Convert one Flutter.Frame extension-stream event's data (all fields in microseconds — the same interface DevTools consumes) into a FrameData.
parseDisplayRefreshRate(String dumpsysOutput) double?
Parse the display refresh rate out of adb shell dumpsys display output. Returns null when nothing parseable is present.
parseTimelineFrames(List<Map<String, dynamic>> events) List<FrameData>
Fallback timeline parsing: modern engines emit frame phases as COMPLETE events (ph: "X" with a dur), not the Begin/End pairs keyed by frame_number that older code assumed. Build ("Frame") and raster ("GPURasterizer::Draw"/"Rasterizer::DoDraw") run pipelined on separate threads, so we pair them by order of appearance.