buildScreenPerformanceJson function

Map<String, dynamic> buildScreenPerformanceJson({
  1. required String screenName,
  2. required List<AppFrameTimingEntry> frames,
  3. required List<PerformanceMarker> markers,
})

Implementation

Map<String, dynamic> buildScreenPerformanceJson({
  required String screenName,
  required List<AppFrameTimingEntry> frames,
  required List<PerformanceMarker> markers,
}) {
  final screenMarkers = markers.where((m) => m.screen == screenName).toList();
  final screenFrames = frames.where((f) {
    final marker = _markerForFrame(f, markers);
    return marker?.screen == screenName;
  }).toList();

  final jankyFrames = screenFrames.where((frame) => frame.isJanky).length;
  return {
    'screen': screenName,
    'frameBudgetMs': AppFrameTimingEntry.frameBudgetMs,
    'totalFrames': screenFrames.length,
    'jankyFrames': jankyFrames,
    'jankyFrameRate': _ratio(jankyFrames, screenFrames.length),
    'averageBuildMs': _average(screenFrames.map((frame) => frame.buildMs)),
    'averageRasterMs': _average(screenFrames.map((frame) => frame.rasterMs)),
    'averageTotalSpanMs':
        _average(screenFrames.map((frame) => frame.totalSpanMs)),
    'markers': screenMarkers.map((m) => _markerJson(m)).toList(),
  };
}