BenchmarkResult.fromSamples constructor
BenchmarkResult.fromSamples({})
由耗时样本计算统计量 / Computes the statistics from raw samples.
samples 为标准化的单次耗时(微秒)/ samples holds per-iteration
durations in microseconds.
Implementation
factory BenchmarkResult.fromSamples({
required String testName,
required List<int> samples,
required Duration totalDuration,
required DateTime timestamp,
int failures = 0,
}) {
if (samples.isEmpty) {
return BenchmarkResult(
testName: testName,
iterations: 0,
totalDuration: totalDuration,
averageDuration: Duration.zero,
minDuration: Duration.zero,
maxDuration: Duration.zero,
standardDeviation: Duration.zero,
operationsPerSecond: 0,
failures: failures,
timestamp: timestamp,
);
}
final sum = samples.fold<int>(0, (previous, value) => previous + value);
final average = sum / samples.length;
final variance =
samples
.map((value) {
final diff = value - average;
return diff * diff;
})
.fold<double>(0, (previous, value) => previous + value) /
samples.length;
final totalSeconds =
totalDuration.inMicroseconds / Duration.microsecondsPerSecond;
final minSample = samples.reduce(math.min);
return BenchmarkResult(
testName: testName,
iterations: samples.length,
totalDuration: totalDuration,
averageDuration: Duration(microseconds: average.round()),
minDuration: Duration(microseconds: minSample),
maxDuration: Duration(microseconds: samples.reduce(math.max)),
standardDeviation: Duration(
microseconds: variance.isNaN ? 0 : math.sqrt(variance).round(),
),
operationsPerSecond: totalSeconds <= 0
? 0
: samples.length / totalSeconds,
failures: failures,
timestamp: timestamp,
);
}