splitTraceSessions function
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;
}