buildWidgetHeatMap function

List<WidgetHeatMapEntry> buildWidgetHeatMap(
  1. List<PerformanceIssue> issues, {
  2. int maxEntries = 10,
})

Build a heat map from a list of issues, filtering out framework widgets and returning the top maxEntries by total ranking score.

Implementation

List<WidgetHeatMapEntry> buildWidgetHeatMap(
  List<PerformanceIssue> issues, {
  int maxEntries = 10,
}) {
  final byWidget = <String, _Accumulator>{};

  for (final issue in issues) {
    final name = issue.widgetName;
    if (name == null || name.isEmpty) continue;
    if (_frameworkPrefixes.contains(name)) continue;

    final acc = byWidget.putIfAbsent(name, () => _Accumulator(name));
    acc.issueCount++;
    acc.totalScore += issue.rankingScore ?? 0;
    if (issue.stableId != null && !acc.stableIds.contains(issue.stableId)) {
      acc.stableIds.add(issue.stableId!);
    }
    if (issue.severity.index > acc.worstSeverityIndex) {
      acc.worstSeverityIndex = issue.severity.index;
    }
  }

  final entries = byWidget.values.map((a) => a.toEntry()).toList()..sort();
  if (entries.length <= maxEntries) return entries;
  return entries.sublist(0, maxEntries);
}