118 lines
3.5 KiB
Dart
118 lines
3.5 KiB
Dart
// 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;
|
|
}
|
|
}
|