getCulledSpans function

List<TraceSpan> getCulledSpans(
  1. List<TraceSpan> spans,
  2. double viewportStartUs,
  3. double viewportEndUs,
  4. int maxSpanDuration,
)

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