blob: 443280cd9ca877beeb3b96f129e5e360cb5c06e4 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// @dart = 2.6
import 'dart:convert';
import 'dart:io';
import 'package:git/git.dart';
import 'package:metrics_center/flutter.dart';
import 'package:metrics_center/google_benchmark.dart';
Future<String> _getGitRevision() async {
final GitDir gitDir = await GitDir.fromExisting('../../');
// Somehow gitDir.currentBranch() doesn't work in Cirrus with "fatal: 'HEAD' -
// not a valid ref". Therefore, we use "git log" to get the revision manually.
final ProcessResult logResult =
await gitDir.runCommand(<String>['log', '--pretty=format:%H', '-n', '1']);
if (logResult.exitCode != 0) {
throw 'Unexpected exit code ${logResult.exitCode}';
}
return logResult.stdout.toString();
}
Future<List<FlutterEngineMetricPoint>> _parse(String jsonFileName) async {
final String gitRevision = await _getGitRevision();
final List<MetricPoint> rawPoints =
await GoogleBenchmarkParser.parse(jsonFileName);
final List<FlutterEngineMetricPoint> points = <FlutterEngineMetricPoint>[];
for (MetricPoint rawPoint in rawPoints) {
points.add(FlutterEngineMetricPoint(
rawPoint.tags[kNameKey],
rawPoint.value,
gitRevision,
moreTags: rawPoint.tags,
));
}
return points;
}
Future<void> main(List<String> args) async {
if (args.length != 1) {
throw 'Must have one argument: <benchmark_json_file>';
}
final List<FlutterEngineMetricPoint> points = await _parse(args[0]);
// The data will be sent to the Datastore of the GCP project specified through
// environment variable BENCHMARK_GCP_CREDENTIALS. The engine Cirrus job has
// currently configured the GCP project to flutter-cirrus for test. We'll
// eventually migrate to flutter-infra project once the test is done.
final FlutterDestination destination =
await FlutterDestination.makeFromCredentialsJson(
jsonDecode(Platform.environment['BENCHMARK_GCP_CREDENTIALS']),
);
await destination.update(points);
}