| // 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:io'; |
| |
| import 'package:web_benchmarks/analysis.dart'; |
| |
| File? checkFileExists(String path) { |
| final testFile = File.fromUri(Uri.parse(path)); |
| if (!testFile.existsSync()) { |
| stdout.writeln('Could not locate file at $path.'); |
| return null; |
| } |
| return testFile; |
| } |
| |
| String convertToCsvLine(List<String> content) { |
| return content.map((e) => '"$e"').join(','); |
| } |
| |
| extension BenchmarkResultsExtension on BenchmarkResults { |
| List<List<String>> toCsvLines() { |
| final lines = <List<String>>[]; |
| for (final benchmarkName in scores.keys) { |
| final scoresForBenchmark = scores[benchmarkName] ?? <BenchmarkScore>[]; |
| for (var i = 0; i < scoresForBenchmark.length; i++) { |
| final score = scoresForBenchmark[i]; |
| lines.add([ |
| // Include the benchmark name for the line containing the first |
| // score metric, and a blank cell otherwise. |
| i == 0 ? benchmarkName : '', |
| ...score.toCsvLine(), |
| ]); |
| } |
| } |
| return lines; |
| } |
| } |
| |
| extension BenchmarkScoreExtension on BenchmarkScore { |
| List<String> toCsvLine() { |
| return [ |
| metric, // Metric name |
| value.toString(), // Value |
| delta?.toString() ?? '', // Delta value |
| // value - delta represents the baseline score. |
| delta != null |
| ? (delta! / (value - delta!)).toString() |
| : '', // Delta % value |
| ]; |
| } |
| } |