Replace hand-maintained list of previous benchmarks with pkg:build (#128)
MUCH easier to maintain
diff --git a/benchmark/data/index.dart b/benchmark/data/index.dart
index df0e449..80296fa 100644
--- a/benchmark/data/index.dart
+++ b/benchmark/data/index.dart
@@ -11,27 +11,3 @@
const String pubspecLockName = "pubspec.link.lock";
const String hostfileName = "hostname.txt";
-
-List<String> allReportNames = const [
- latestVMReportName,
- "skybrian5/0.4.2/json_chrome.pb.json",
- "skybrian5/0.4.2/json_vm.pb.json",
- "skybrian5/0.4.2/props_chrome.pb.json",
- "skybrian5/0.4.2/props_vm.pb.json",
- "skybrian5/head/json_chrome.pb.json",
- "skybrian5/head/json_vm.pb.json",
- "skybrian5/head/props_chrome.pb.json",
- "skybrian5/head/props_vm.pb.json",
- "skybrian-macbookpro/0.4.2/json_chrome.pb.json",
- "skybrian-macbookpro/0.4.2/json_vm.pb.json",
- "skybrian-macbookpro/0.4.2/props_chrome.pb.json",
- "skybrian-macbookpro/0.4.2/props_vm.pb.json",
- "skybrian-macbookpro/0.5.0/json_chrome.pb.json",
- "skybrian-macbookpro/0.5.0/json_vm.pb.json",
- "skybrian-macbookpro/0.5.0/props_chrome.pb.json",
- "skybrian-macbookpro/0.5.0/props_vm.pb.json",
- "skybrian-macbookpro/head/json_chrome.pb.json",
- "skybrian-macbookpro/head/json_vm.pb.json",
- "skybrian-macbookpro/head/props_chrome.pb.json",
- "skybrian-macbookpro/head/props_vm.pb.json",
-];
diff --git a/benchmark/lib/dashboard.dart b/benchmark/lib/dashboard.dart
index 1a42667..08d2fa7 100644
--- a/benchmark/lib/dashboard.dart
+++ b/benchmark/lib/dashboard.dart
@@ -5,6 +5,7 @@
library protoc.benchmark.html_runner;
import 'dart:async' show Future;
+import 'dart:convert';
import 'dart:html';
import 'dart:js' show context, JsObject;
@@ -127,15 +128,14 @@
/// Loads all the reports saved to benchmark/data.
Future<Map<String, pb.Report>> loadReports(pb.Suite suite) async {
var out = <String, pb.Report>{};
- // TODO: maybe parallelize?
- for (var name in data.allReportNames) {
- String json =
- await _loadDataFile(name, optional: (name == data.latestVMReportName));
- if (json != null) {
- var report = new pb.Report.fromJson(json);
- if (isCompatibleBaseline(suite, report)) {
- out[name] = report;
- }
+
+ var dataJsonContent = await _loadDataFile('data.json');
+ var dataJson = jsonDecode(dataJsonContent) as Map<String, dynamic>;
+
+ for (var entry in dataJson.entries) {
+ var report = new pb.Report.fromJson(entry.value);
+ if (isCompatibleBaseline(suite, report)) {
+ out[entry.key] = report;
}
}
print("loaded ${out.length} reports");
diff --git a/build.yaml b/build.yaml
index 5f82db1..0221297 100644
--- a/build.yaml
+++ b/build.yaml
@@ -1,4 +1,4 @@
-# Configuration for Dart build system - https://github.com/dart-lang/build
+# Read about `build.yaml` at https://pub.dartlang.org/packages/build_config
# Enables running benchmarks via browser: `pub run build_runner serve`
targets:
$default:
@@ -11,3 +11,10 @@
- --minify
#- --trust-primitives
#- --omit-implicit-checks
+
+builders:
+ benchmarkBuilder:
+ import: "tool/builder.dart"
+ builder_factories: ["benchmarkBuilder"]
+ build_extensions: {"lib/$lib$": ["benchmark/data/data.json"]}
+ auto_apply: root_package
diff --git a/tool/builder.dart b/tool/builder.dart
new file mode 100644
index 0000000..acf8865
--- /dev/null
+++ b/tool/builder.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:convert';
+
+import 'package:build/build.dart';
+import 'package:glob/glob.dart';
+
+Builder benchmarkBuilder(BuilderOptions options) => _BenchmarkBuilder();
+
+class _BenchmarkBuilder implements Builder {
+ @override
+ Future build(BuildStep buildStep) async {
+ var data = <String, String>{};
+
+ await for (var item in buildStep
+ .findAssets(Glob('benchmark/**/*.pb.json'))
+ .where((id) =>
+ id.pathSegments.length > 2 &&
+ id.pathSegments[0] == 'benchmark' &&
+ id.pathSegments[1] == 'data')) {
+ data[item.pathSegments.skip(2).join('/')] =
+ await buildStep.readAsString(item);
+ }
+
+ await buildStep.writeAsString(
+ AssetId(buildStep.inputId.package, 'benchmark/data/data.json'),
+ JsonEncoder.withIndent(' ').convert(data));
+ }
+
+ @override
+ final buildExtensions = const {
+ r'lib/$lib$': ['benchmark/data/data.json']
+ };
+}