| // Copyright 2023 The Flutter Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file or at https://developers.google.com/open-source/licenses/bsd. | |
| import 'dart:convert'; | |
| import 'dart:io'; | |
| import 'package:web_benchmarks/analysis.dart'; | |
| import 'utils.dart'; | |
| /// Compares two sets of web benchmarks and calculates the delta between each | |
| /// matching metric. | |
| void main(List<String> args) { | |
| if (args.length != 2) { | |
| throw Exception( | |
| 'Expected 2 arguments (<baseline-file>, <test-file>), but instead there ' | |
| 'were ${args.length}.', | |
| ); | |
| } | |
| final baselineSource = args[0]; | |
| final testSource = args[1]; | |
| stdout | |
| ..writeln('Comparing the following benchmark results:') | |
| ..writeln(' "$testSource" (test)') | |
| ..writeln(' "$baselineSource" (baseline)'); | |
| final baselineFile = checkFileExists(baselineSource); | |
| final testFile = checkFileExists(testSource); | |
| if (baselineFile == null || testFile == null) { | |
| if (baselineFile == null) { | |
| throw Exception('Cannot find baseline file $baselineSource'); | |
| } | |
| if (testFile == null) { | |
| throw Exception('Cannot find test file $testSource'); | |
| } | |
| } | |
| final baselineResults = BenchmarkResults.parse( | |
| jsonDecode(baselineFile.readAsStringSync()), | |
| ); | |
| final testResults = BenchmarkResults.parse( | |
| jsonDecode(testFile.readAsStringSync()), | |
| ); | |
| compareBenchmarks( | |
| baselineResults, | |
| testResults, | |
| baselineSource: baselineSource, | |
| ); | |
| } | |
| void compareBenchmarks( | |
| BenchmarkResults baseline, | |
| BenchmarkResults test, { | |
| required String baselineSource, | |
| }) { | |
| stdout.writeln('Starting baseline comparison...'); | |
| final delta = computeDelta(baseline, test); | |
| stdout.writeln('Baseline comparison finished.'); | |
| stdout | |
| ..writeln('==== Comparison with baseline $baselineSource ====') | |
| ..writeln(prettyPrintJson(delta.toJson())) | |
| ..writeln('==== End of baseline comparison ===='); | |
| } |