getCulledSpans function
Implementation
List<TraceSpan> getCulledSpans(
List<TraceSpan> spans,
double viewportStartUs,
double viewportEndUs,
int maxSpanDuration,
) {
if (spans.isEmpty) return [];
int idx = 0;
int low = 0;
int high = spans.length - 1;
while (low <= high) {
int mid = (low + high) ~/ 2;
if (spans[mid].startUs >= viewportStartUs) {
idx = mid;
high = mid - 1;
} else {
low = mid + 1;
}
}
final visibleSpans = <TraceSpan>[];
for (int i = idx - 1; i >= 0; i--) {
final span = spans[i];
if (span.endUs >= viewportStartUs) {
visibleSpans.add(span);
}
if (span.startUs < viewportStartUs - maxSpanDuration) {
break;
}
}
for (int i = idx; i < spans.length; i++) {
if (spans[i].startUs <= viewportEndUs) {
visibleSpans.add(spans[i]);
} else {
break;
}
}
return visibleSpans;
}