Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Unified Diff: pkg/analysis_server/benchmark/perf/benchmark_flutter.dart

Issue 2150793003: Rework local benchmarks into benchmarks on the Flutter codebase. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/analysis_server/benchmark/perf/benchmark_local.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analysis_server/benchmark/perf/benchmark_flutter.dart
diff --git a/pkg/analysis_server/benchmark/perf/benchmark_flutter.dart b/pkg/analysis_server/benchmark/perf/benchmark_flutter.dart
new file mode 100644
index 0000000000000000000000000000000000000000..87ccc30349c07246899200d5fba9a79a4504ecff
--- /dev/null
+++ b/pkg/analysis_server/benchmark/perf/benchmark_flutter.dart
@@ -0,0 +1,217 @@
+// Copyright (c) 2016, 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.
+
+library server.performance.local;
+
+import 'dart:async';
+
+import 'package:analysis_server/plugin/protocol/protocol.dart';
+
+import 'benchmark_scenario.dart';
+import 'memory_tests.dart';
+
+main(List<String> args) async {
+ int length = args.length;
+ if (length < 1) {
+ print('Usage: dart benchmark_local.dart path_to_flutter_checkout'
+ ' [benchmark_id]');
+ return;
+ }
+ paths = new PathHolder(flutterPath: args[0]);
+ String id = args.length >= 2 ? args[1] : null;
+ if (id == null) {
+ for (String id in benchmarks.keys) {
+ BenchmarkFunction benchmark = benchmarks[id];
+ await benchmark(id);
+ }
+ } else {
+ BenchmarkFunction benchmark = benchmarks[id];
+ if (benchmark != null) {
+ benchmark(id);
+ }
+ }
+}
+
+const Map<String, BenchmarkFunction> benchmarks =
+ const <String, BenchmarkFunction>{
+ 'flutter-initialAnalysis-1': run_flutter_initialAnalysis_1,
+ 'flutter-initialAnalysis-2': run_flutter_initialAnalysis_2,
+ 'flutter-change-1': run_flutter_change_1,
+ 'flutter-change-2': run_flutter_change_2,
+ 'flutter-completion-1': run_flutter_completion_1,
+ 'flutter-completion-2': run_flutter_completion_2,
+ 'flutter-refactoring-1': run_flutter_refactoring_1,
+ 'flutter-memory-initialAnalysis-1': run_flutter_memory_initialAnalysis_1,
+ 'flutter-memory-initialAnalysis-2': run_flutter_memory_initialAnalysis_2,
+};
+
+PathHolder paths;
+
+Future run_flutter_change_1(String id) async {
+ String description = r'''
+1. Open 'packages/flutter'.
+2. Change a method body in lib/src/painting/colors.dart
+3. Measure the time to finish analysis.
+4. Rollback changes to the file and wait for analysis.
+5. Go to (2).
+''';
+ List<int> times = await new BenchmarkScenario().waitAnalyze_change_analyze(
+ roots: [paths.packageFlutter],
+ file: '${paths.packageFlutter}/lib/src/painting/colors.dart',
+ fileChange: new FileChange(
+ afterStr: 'final double h = hue % 360;', insertStr: 'print(12345);'),
+ numOfRepeats: 10);
+ printBenchmarkResults(id, description, times);
+}
+
+Future run_flutter_change_2(String id) async {
+ String description = r'''
+1. Open 'packages/flutter'.
+2. Change the name of a public method in lib/src/painting/colors.dart
+3. Measure the time to finish analysis.
+4. Rollback changes to the file and wait for analysis.
+5. Go to (2).
+''';
+ List<int> times = await new BenchmarkScenario().waitAnalyze_change_analyze(
+ roots: [paths.packageFlutter],
+ file: '${paths.packageFlutter}/lib/src/painting/colors.dart',
+ fileChange: new FileChange(
+ afterStr: 'withValue(dou', afterStrBack: 4, insertStr: 'NewName'),
+ numOfRepeats: 5);
+ printBenchmarkResults(id, description, times);
+}
+
+Future run_flutter_completion_1(String id) async {
+ String description = r'''
+1. Open 'packages/flutter'.
+2. Change a method body in packages/flutter/lib/src/material/button.dart
+3. Request code completion in this method and measure time to get results.
+4. Rollback changes to the file and wait for analysis.
+5. Go to (2).
+''';
+ String completionMarker = 'print(12345);';
+ List<int> times = await new BenchmarkScenario()
+ .waitAnalyze_change_getCompletion(
+ roots: [paths.packageFlutter],
+ file: '${paths.packageFlutter}/lib/src/material/button.dart',
+ fileChange: new FileChange(
+ afterStr: 'Widget build(BuildContext context) {',
+ insertStr: completionMarker),
+ completeAfterStr: completionMarker,
+ numOfRepeats: 10);
+ printBenchmarkResults(id, description, times);
+}
+
+Future run_flutter_completion_2(String id) async {
+ String description = r'''
+1. Open 'packages/flutter'.
+2. Change the name of a public method in lib/src/rendering/layer.dart
+3. Request code completion in this method and measure time to get results.
+4. Rollback changes to the file and wait for analysis.
+5. Go to (2).
+''';
+ List<int> times = await new BenchmarkScenario()
+ .waitAnalyze_change_getCompletion(
+ roots: [paths.packageFlutter],
+ file: '${paths.packageFlutter}/lib/src/rendering/layer.dart',
+ fileChange: new FileChange(
+ replaceWhat: 'void removeAllChildren() {',
+ replaceWith: 'void removeAllChildren2() {print(12345);parent.'),
+ completeAfterStr: 'print(12345);parent.',
+ numOfRepeats: 5);
+ printBenchmarkResults(id, description, times);
+}
+
+Future run_flutter_initialAnalysis_1(String id) async {
+ String description = r'''
+1. Start server, set 'hello_world' analysis root.
+2. Measure the time to finish initial analysis.
+3. Shutdown the server.
+4. Go to (1).
+''';
+ List<int> times = await BenchmarkScenario.start_waitInitialAnalysis_shutdown(
+ roots: [paths.exampleHelloWorld], numOfRepeats: 5);
+ printBenchmarkResults(id, description, times);
+}
+
+Future run_flutter_initialAnalysis_2(String id) async {
+ String description = r'''
+1. Start server, set 'hello_world' and 'flutter_gallery' analysis roots.
+2. Measure the time to finish initial analysis.
+3. Shutdown the server.
+4. Go to (1).
+''';
+ List<int> times = await BenchmarkScenario.start_waitInitialAnalysis_shutdown(
+ roots: [paths.exampleHelloWorld, paths.exampleGallery], numOfRepeats: 5);
+ printBenchmarkResults(id, description, times);
+}
+
+Future run_flutter_memory_initialAnalysis_1(String id) async {
+ String description = r'''
+1. Start server, set 'packages/flutter' as the analysis root.
+2. Measure the memory usage after finishing initial analysis.
+3. Shutdown the server.
+4. Go to (1).
+''';
+ List<int> sizes = await AnalysisServerMemoryUsageTest
+ .start_waitInitialAnalysis_shutdown(
+ roots: <String>[paths.packageFlutter], numOfRepeats: 3);
+ printMemoryResults(id, description, sizes);
+}
+
+Future run_flutter_memory_initialAnalysis_2(String id) async {
+ String description = r'''
+1. Start server, set 'packages/flutter' and 'packages/flutter_markdown' analysis roots.
+2. Measure the memory usage after finishing initial analysis.
+3. Shutdown the server.
+4. Go to (1).
+''';
+ List<int> sizes = await AnalysisServerMemoryUsageTest
+ .start_waitInitialAnalysis_shutdown(
+ roots: <String>[paths.packageFlutter, paths.packageMarkdown],
+ numOfRepeats: 3);
+ printMemoryResults(id, description, sizes);
+}
+
+Future run_flutter_refactoring_1(String id) async {
+ String description = r'''
+1. Open 'packages/flutter'.
+2. Change the name of a public method in lib/src/rendering/layer.dart
+3. Request rename refactoring for `getSourcesWithFullName` and measure time to get results.
+4. Rollback changes to the file and wait for analysis.
+5. Go to (2).
+''';
+ List<int> times = await new BenchmarkScenario()
+ .waitAnalyze_change_getRefactoring(
+ roots: [paths.packageFlutter],
+ file: '${paths.packageFlutter}/lib/src/rendering/layer.dart',
+ fileChange: new FileChange(
+ replaceWhat: 'void removeAllChildren() {',
+ replaceWith: 'void removeAllChildren2() {'),
+ refactoringAtStr: 'addToScene(ui.SceneBuilder builder',
+ refactoringKind: RefactoringKind.RENAME,
+ refactoringOptions: new RenameOptions('addToScene2'),
+ numOfRepeats: 5);
+ printBenchmarkResults(id, description, times);
+}
+
+typedef BenchmarkFunction(String id);
+
+class PathHolder {
+ String exampleHelloWorld;
+ String exampleGallery;
+ String exampleStocks;
+ String packageFlutter;
+ String packageMarkdown;
+ String packageSprites;
+
+ PathHolder({String flutterPath}) {
+ exampleHelloWorld = '$flutterPath/examples/hello_world';
+ exampleGallery = '$flutterPath/examples/flutter_gallery';
+ exampleStocks = '$flutterPath/examples/stocks';
+ packageFlutter = '$flutterPath/packages/flutter';
+ packageMarkdown = '$flutterPath/packages/flutter_markdown';
+ packageSprites = '$flutterPath/packages/flutter_sprites';
+ }
+}
« no previous file with comments | « no previous file | pkg/analysis_server/benchmark/perf/benchmark_local.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698