FrameTimeStats.of constructor

FrameTimeStats.of(
  1. List<Duration> samples
)

Computes percentiles over samples.

Order does not matter; this sorts its own copy and leaves samples untouched.

Throws ArgumentError on an empty list. A percentile of zero samples is not zero milliseconds, it is undefined -- reporting zero would read as an excellent real measurement instead of "nothing was captured".

Implementation

factory FrameTimeStats.of(List<Duration> samples) {
  if (samples.isEmpty) {
    throw ArgumentError.value(
      samples,
      'samples',
      'FrameTimeStats needs at least one sample; an empty list has no '
          'percentiles to report.',
    );
  }
  final sorted = List<Duration>.of(samples)..sort();
  return FrameTimeStats._(
    sampleCount: sorted.length,
    p50: _percentile(sorted, 50),
    p90: _percentile(sorted, 90),
    p99: _percentile(sorted, 99),
    worst: sorted.last,
  );
}