splitTraceSessions function

List<TraceSessionSplit> splitTraceSessions(
  1. List<String> lines
)

Splits trace lines into sessions based on # trace start: markers.

Implementation

List<TraceSessionSplit> splitTraceSessions(List<String> lines) {
  final sessions = <TraceSessionSplit>[];
  var current = <String>[];
  var startLine = 0;

  void finish(int endLine) {
    if (current.isEmpty) return;
    sessions.add(
      TraceSessionSplit(
        index: sessions.length + 1,
        startLine: startLine,
        endLine: endLine,
        lines: List<String>.unmodifiable(current),
      ),
    );
    current = <String>[];
  }

  for (var i = 0; i < lines.length; i++) {
    final line = lines[i];
    if (line.startsWith('# trace start:')) {
      finish(i);
      startLine = i + 1;
    }
    if (startLine > 0) current.add(line);
  }
  finish(lines.length);
  return sessions;
}