blob: a6fd493461fb5011732244522f240ac6643719ad [file] [log] [blame]
// 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';
main(List<String> args) async {
int length = args.length;
if (length < 1) {
print(
'Usage: dart benchmark_local.dart path_to_sdk_checkout [path_to_flutter_checkout]');
return;
} else if (length == 1) {
paths = new PathHolder(sdkPath: args[0]);
} else {
paths = new PathHolder(sdkPath: args[0], flutterPath: args[1]);
}
String now = new DateTime.now().toUtc().toIso8601String();
print('Benchmark started: $now');
print('');
print('');
await run_local_initialAnalysis_1();
await run_local_initialAnalysis_2();
await run_local_initialAnalysis_3();
await run_local_change_1();
await run_local_change_2();
await run_local_completion_1();
await run_local_completion_2();
await run_local_completion_3();
await run_local_completion_4();
await run_local_refactoring_1();
}
PathHolder paths;
Future run_local_change_1() async {
String id = 'local-change-1';
String description = r'''
1. Open 'analyzer'.
2. Change a method body in src/task/dart.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.analyzer],
file: '${paths.analyzer}/lib/src/task/dart.dart',
fileChange: new FileChange(
afterStr: 'if (hasDirectiveChange) {', insertStr: 'print(12345);'),
numOfRepeats: 10);
printBenchmarkResults(id, description, times);
}
Future run_local_change_2() async {
String id = 'local-change-2';
String description = r'''
1. Open 'analyzer'.
2. Change the name of a public method in src/task/dart.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.analyzer],
file: '${paths.analyzer}/lib/src/task/dart.dart',
fileChange: new FileChange(
afterStr: 'resolveDirective(An',
afterStrBack: 3,
insertStr: 'NewName'),
numOfRepeats: 5);
printBenchmarkResults(id, description, times);
}
Future run_local_completion_1() async {
String id = 'local-completion-1';
String description = r'''
1. Open 'analyzer'.
2. Change a method body in src/task/dart.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.analyzer],
file: '${paths.analyzer}/lib/src/task/dart.dart',
fileChange: new FileChange(
afterStr: 'if (hasDirectiveChange) {',
insertStr: 'print(12345);'),
completeAfterStr: 'print(12345);',
numOfRepeats: 10);
printBenchmarkResults(id, description, times);
}
Future run_local_completion_2() async {
String id = 'local-completion-2';
String description = r'''
1. Open 'analyzer'.
2. Change the name of a public method in src/task/dart.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.analyzer],
file: '${paths.analyzer}/lib/src/task/dart.dart',
fileChange: new FileChange(
afterStr: 'DeltaResult validate(In',
afterStrBack: 3,
insertStr: 'NewName'),
completeAfterStr: 'if (hasDirectiveChange) {',
numOfRepeats: 5);
printBenchmarkResults(id, description, times);
}
Future run_local_completion_3() async {
String id = 'local-completion-3';
String description = r'''
1. Open 'analysis_server' and 'analyzer'.
2. Change a method body in src/task/dart.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.analysisServer, paths.analyzer],
file: '${paths.analyzer}/lib/src/task/dart.dart',
fileChange: new FileChange(
afterStr: 'if (hasDirectiveChange) {',
insertStr: 'print(12345);'),
completeAfterStr: 'print(12345);',
numOfRepeats: 10);
printBenchmarkResults(id, description, times);
}
Future run_local_completion_4() async {
String id = 'local-completion-4';
String description = r'''
1. Open 'analysis_server' and 'analyzer'.
2. Change the name of a public method in src/task/dart.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.analysisServer, paths.analyzer],
file: '${paths.analyzer}/lib/src/task/dart.dart',
fileChange: new FileChange(
afterStr: 'DeltaResult validate(In',
afterStrBack: 3,
insertStr: 'NewName'),
completeAfterStr: 'if (hasDirectiveChange) {',
numOfRepeats: 5);
printBenchmarkResults(id, description, times);
}
Future run_local_initialAnalysis_1() async {
String id = 'local-initialAnalysis-1';
String description = r'''
1. Start server, set 'analyzer' 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.analyzer], numOfRepeats: 3);
printBenchmarkResults(id, description, times);
}
Future run_local_initialAnalysis_2() async {
String id = 'local-initialAnalysis-2';
String description = r'''
1. Start server, set 'analyzer' and 'analysis_server' 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.analyzer, paths.analysisServer], numOfRepeats: 3);
printBenchmarkResults(id, description, times);
}
Future run_local_initialAnalysis_3() async {
String id = 'local-initialAnalysis-3';
String description = r'''
1. Start server, set 'hello_world' and 'stocks' 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.flutterHelloWorld, paths.flutterStocks], numOfRepeats: 3);
printBenchmarkResults(id, description, times);
}
Future run_local_refactoring_1() async {
String id = 'local-refactoring-1';
String description = r'''
1. Open 'analyzer'.
2. Change the name of a public method in src/context/cache.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.analyzer],
file: '${paths.analyzer}/lib/src/context/cache.dart',
fileChange: new FileChange(
afterStr: 'getState(An', afterStrBack: 3, insertStr: 'NewName'),
refactoringAtStr: 'getSourcesWithFullName(String path)',
refactoringKind: RefactoringKind.RENAME,
refactoringOptions: new RenameOptions('getSourcesWithFullName2'),
numOfRepeats: 5);
printBenchmarkResults(id, description, times);
}
class PathHolder {
String analysisServer;
String analyzer;
String flutterHelloWorld;
String flutterStocks;
PathHolder({String sdkPath, String flutterPath}) {
analysisServer = '$sdkPath/pkg/analysis_server';
analyzer = '$sdkPath/pkg/analyzer';
flutterHelloWorld = '$flutterPath/examples/hello_world';
flutterStocks = '$flutterPath/examples/stocks';
}
}