// 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 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 benchmarks = const { '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 times = await new BenchmarkScenario().waitAnalyze_change_analyze( roots: [paths.packageNp8080], file: paths.editorDart, fileChange: new FileChange( afterStr: 'showPreview = false;', insertStr: '@Output() EventEmitter 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 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 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 sizes = await AnalysisServerMemoryUsageTest .start_waitInitialAnalysis_shutdown( roots: [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; } }