analyzeReplayTrace function

Future<ReplayTraceSummary> analyzeReplayTrace(
  1. String path, {
  2. int limit = 12,
})

Analyze a trace file and return the slowest spans.

Implementation

Future<ReplayTraceSummary> analyzeReplayTrace(
  String path, {
  int limit = 12,
}) async {
  final file = io.File(path);
  if (!await file.exists()) {
    return ReplayTraceSummary(
      path: path,
      spanCount: 0,
      maxDurationUs: 0,
      spans: const <ReplayTraceSummarySpan>[],
    );
  }

  final spans = <ReplayTraceSummarySpan>[];
  final lines = await file.readAsLines();
  for (var i = 0; i < lines.length; i++) {
    final parsed = tryParseTraceSpan(path, i + 1, lines[i]);
    if (parsed != null) spans.add(parsed);
  }
  spans.sort((a, b) => b.durationUs.compareTo(a.durationUs));
  final top = spans.take(math.max(0, limit)).toList(growable: false);
  return ReplayTraceSummary(
    path: path,
    spanCount: spans.length,
    maxDurationUs: spans.isEmpty ? 0 : spans.first.durationUs,
    spans: top,
  );
}