createReport static method
Implementation
static String createReport(
List<int> measurements,
String thread,
int originalCount,
int improvedCount,
int originalRuntime,
int improvedRuntime,
int originalSkipped,
int improvedSkipped) {
final buf = StringBuffer();
buf.writeln('$thread thread:');
final runtimeDifference = improvedRuntime - originalRuntime;
final gerund = runtimeDifference <= 0 ? 'improvement' : 'worsening';
buf.writeln('* '
'${(runtimeDifference.abs() / originalRuntime * 100).toStringAsFixed(1)}% '
'(${(runtimeDifference / 1000).toStringAsFixed(0)}ms) '
'$gerund of total execution time');
final jankRiskRatio = RiskRatio.fromPrevalence(
improvedCount, improvedSkipped, originalCount, originalSkipped);
if (!jankRiskRatio.isSignificant) {
buf.write('* No significant change in jank risk');
} else if (jankRiskRatio.ratio < 1) {
final smallerPercent = ((1 - jankRiskRatio.upper) * 100).round();
final higherPercent = ((1 - jankRiskRatio.lower) * 100).round();
buf.write('* -$smallerPercent% to -$higherPercent% less potential jank');
} else {
final smallerPercent = ((jankRiskRatio.lower - 1) * 100).round();
final higherPercent = ((jankRiskRatio.upper - 1) * 100).round();
buf.write('* +$smallerPercent to +$higherPercent% more potential jank');
}
buf.writeln(' ($originalSkipped -> $improvedSkipped)');
final skippedDifference = improvedSkipped - originalSkipped;
final skippedPpt = (improvedSkipped / measurements.length -
originalSkipped / measurements.length) *
100;
final noun = skippedDifference <= 0 ? 'decrease' : 'increase';
buf.writeln(' ('
"That's a ${skippedPpt.abs().toStringAsFixed(0)} ppt "
'$noun in ratio of jank-to-normal frames.)');
// final betterMeasurements = measurements.where((m) => m < 0).length;
// final betterPercent = (betterMeasurements / measurements.length) * 100;
// buf.writeln('* ${betterPercent.toStringAsFixed(2)}% of times are improved');
// 833 microseconds is 5% of a 60fps frame budget
// 1000 microseconds is 6% of a 60fps frame budget
const threshold = 1000;
final betterMeasurementsWithPadding =
measurements.where((m) => m < -threshold).length;
final betterPercentWithPadding =
(betterMeasurementsWithPadding / measurements.length) * 100;
buf.writeln('* ${betterPercentWithPadding.toStringAsFixed(1)}% '
'of individual measurements improved by 1ms+');
final worseMeasurementsWithPadding =
measurements.where((m) => m > threshold).length;
final worsePercentWithPadding =
(worseMeasurementsWithPadding / measurements.length) * 100;
buf.writeln('* ${worsePercentWithPadding.toStringAsFixed(1)}% '
'of individual measurements worsened by 1ms+');
return buf.toString();
}