// Copyright (c) 2016 The Chromium Authors. 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:io'; import 'package:meta/meta.dart'; import 'package:path/path.dart' as path; import '../framework/benchmarks.dart'; import '../framework/framework.dart'; import '../framework/utils.dart'; TaskFunction createAnalyzerCliTest({ @required String sdk, @required String commit, @required DateTime timestamp, }) { return new AnalyzerCliTask(sdk, commit, timestamp); } TaskFunction createAnalyzerServerTest({ @required String sdk, @required String commit, @required DateTime timestamp, }) { return new AnalyzerServerTask(sdk, commit, timestamp); } abstract class AnalyzerTask { Benchmark benchmark; Future<TaskResult> call() async { section(benchmark.name); await runBenchmark(benchmark, iterations: 3, warmUpBenchmark: true); return benchmark.bestResult; } } class AnalyzerCliTask extends AnalyzerTask { AnalyzerCliTask(String sdk, String commit, DateTime timestamp) { this.benchmark = new FlutterAnalyzeBenchmark(sdk, commit, timestamp); } } class AnalyzerServerTask extends AnalyzerTask { AnalyzerServerTask(String sdk, String commit, DateTime timestamp) { this.benchmark = new FlutterAnalyzeAppBenchmark(sdk, commit, timestamp); } } class FlutterAnalyzeBenchmark extends Benchmark { FlutterAnalyzeBenchmark(this.sdk, this.commit, this.timestamp) : super('flutter analyze --flutter-repo'); final String sdk; final String commit; final DateTime timestamp; File get benchmarkFile => file(path.join(flutterDirectory.path, 'analysis_benchmark.json')); @override TaskResult get lastResult => new TaskResult.successFromFile(benchmarkFile); @override Future<num> run() async { rm(benchmarkFile); await inDirectory(flutterDirectory, () async { await flutter('analyze', options: <String>[ '--flutter-repo', '--benchmark', ]); }); return addBuildInfo(benchmarkFile, timestamp: timestamp, expected: 25.0, sdk: sdk, commit: commit); } } class FlutterAnalyzeAppBenchmark extends Benchmark { FlutterAnalyzeAppBenchmark(this.sdk, this.commit, this.timestamp) : super('analysis server mega_gallery'); final String sdk; final String commit; final DateTime timestamp; @override TaskResult get lastResult => new TaskResult.successFromFile(benchmarkFile); Directory get megaDir => dir( path.join(flutterDirectory.path, 'dev/benchmarks/mega_gallery')); File get benchmarkFile => file(path.join(megaDir.path, 'analysis_benchmark.json')); @override Future<Null> init() { return inDirectory(flutterDirectory, () async { await dart(<String>['dev/tools/mega_gallery.dart']); }); } @override Future<num> run() async { rm(benchmarkFile); await inDirectory(megaDir, () async { await flutter('analyze', options: <String>[ '--watch', '--benchmark', ]); }); return addBuildInfo(benchmarkFile, timestamp: timestamp, expected: 10.0, sdk: sdk, commit: commit); } }