FrameTimeStats.of constructor
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,
);
}