PdfPerfStats.fromJson constructor

PdfPerfStats.fromJson(
  1. Map<String, Object?> json
)

Rebuilds a snapshot from toJson output (missing/unknown names are tolerated so snapshots survive enum evolution across isolates).

Implementation

factory PdfPerfStats.fromJson(Map<String, Object?> json) {
  final stats = PdfPerfStats.empty();
  void read(String key, List<String> names, List<int> into,
      [List<int>? callsInto]) {
    final section = json[key];
    if (section is! Map) return;
    section.forEach((name, value) {
      final index = names.indexOf(name as String);
      if (index < 0) return;
      if (value is int) {
        into[index] = value;
      } else if (value is Map) {
        into[index] = (value['us'] as num?)?.toInt() ?? 0;
        callsInto?[index] = (value['calls'] as num?)?.toInt() ?? 0;
      }
    });
  }

  read('phases', PdfPerfPhase.values.map((p) => p.name).toList(),
      stats.phaseUs, stats.phaseCalls);
  read('counts', PdfPerfCount.values.map((c) => c.name).toList(),
      stats.counts);
  read('events', PdfPerfEvent.values.map((e) => e.name).toList(),
      stats.events);
  return stats;
}