blob: d1effe1fd1db5685ec09b618302f6227e232c147 [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 '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_np8080 (an example ngdart project)'
' [benchmark_id]');
return;
}
paths = new PathHolder(projectPath: 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>{
'ng-initialAnalysis': run_ng_initialAnalysis,
'ng-change-dart': run_ng_change_dart,
'ng-change-html': run_ng_change_html,
'ng-memory-initialAnalysis': run_ng_memory_initialAnalysis,
};
PathHolder paths;
Future run_ng_change_dart(String id) async {
String description = r'''
1. Open 'packages/np8080'.
2. Add an @Output to the class
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.packageNp8080],
file: paths.editorDart,
fileChange: new FileChange(
afterStr: 'showPreview = false;',
insertStr: '@Output() EventEmitter<int> myEventEmitter;'),
numOfRepeats: 10);
printBenchmarkResults(id, description, times);
}
Future run_ng_change_html(String id) async {
String description = r'''
1. Open 'packages/np8080'.
2. Change the contents of a mustache
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.packageNp8080],
file: paths.editorHtml,
fileChange: new FileChange(
afterStr: 'note.lastModified', afterStrBack: 4, insertStr: 'NewName'),
numOfRepeats: 4);
printBenchmarkResults(id, description, times);
}
Future run_ng_initialAnalysis(String id) async {
String description = r'''
1. Start server, set 'package/np8080' 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.packageNp8080], numOfRepeats: 5);
printBenchmarkResults(id, description, times);
}
Future run_ng_memory_initialAnalysis(String id) async {
String description = r'''
1. Start server, set 'package/np8080' 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.packageNp8080], numOfRepeats: 3);
printMemoryResults(id, description, sizes);
}
typedef BenchmarkFunction(String id);
class PathHolder {
String editorHtml;
String editorDart;
String packageNp8080;
PathHolder({String projectPath}) {
editorHtml = '$projectPath/lib/editor/editor_component.html';
editorDart = '$projectPath/lib/editor/editor_component.dart';
packageNp8080 = projectPath;
}
}