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

Unified Diff: pkg/analysis_server/test/performance/main.dart

Issue 1163713005: analysis server performance measurement driver first cut (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 7 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
Index: pkg/analysis_server/test/performance/main.dart
diff --git a/pkg/analysis_server/test/performance/main.dart b/pkg/analysis_server/test/performance/main.dart
new file mode 100644
index 0000000000000000000000000000000000000000..860487620e9138d09dc665d42a926654b987cd4e
--- /dev/null
+++ b/pkg/analysis_server/test/performance/main.dart
@@ -0,0 +1,120 @@
+library server.performance;
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:args/args.dart';
+import 'package:logging/logging.dart';
+
+import 'driver.dart';
+import 'input_converter.dart';
+import 'operation.dart';
+
+/**
+ * Launch and interact with the analysis server.
+ */
+main(List<String> rawArgs) {
+ Logger logger = new Logger('Performance Measurement Client');
+ logger.onRecord.listen((LogRecord rec) {
+ print(rec.message);
+ });
+ Driver driver = new Driver(logger);
+
+ ArgResults args = parseArgs(rawArgs);
+ Stream<Operation> stream = openInput(args);
+ StreamSubscription<Operation> subscription;
+ subscription = stream.listen((Operation op) {
+ Future future = driver.perform(op);
+ if (future != null) {
+ logger.log(Level.FINE, 'pausing operations for ${op.runtimeType}');
+ subscription.pause(future.then((_) {
+ logger.log(Level.FINE, 'resuming operations');
+ }));
+ }
+ }, onDone: () {
+ subscription.cancel();
+ driver.stopServer();
+ }, onError: (e, s) {
+ subscription.cancel();
+ logger.log(Level.WARNING, '$e\n$s');
+ driver.stopServer();
+ throw e;
+ });
+ driver.runComplete.then((Results results) {
+ results.printResults();
+ }).whenComplete(() {
+ return subscription.cancel();
+ });
+}
+
+const HELP_CMDLINE_OPTION = 'help';
+const INPUT_CMDLINE_OPTION = 'input';
+const VERBOSE_CMDLINE_OPTION = 'verbose';
+const VERY_VERBOSE_CMDLINE_OPTION = 'vv';
+
+/**
+ * Open and return the input stream specifying how this client
+ * should interact with the analysis server.
+ */
+Stream<Operation> openInput(ArgResults args) {
+ Stream<List<int>> inputRaw;
+ String inputPath = args[INPUT_CMDLINE_OPTION];
+ if (inputPath == null) {
+ return null;
+ }
+ if (inputPath == 'stdin') {
+ inputRaw = stdin;
+ } else {
+ inputRaw = new File(inputPath).openRead();
+ }
+ return inputRaw
+ .transform(SYSTEM_ENCODING.decoder)
+ .transform(new LineSplitter())
+ .transform(new InputConverter());
+}
+
+/**
+ * Parse the command line arguments.
+ */
+ArgResults parseArgs(List<String> rawArgs) {
+ ArgParser parser = new ArgParser();
+
+ parser.addOption(INPUT_CMDLINE_OPTION,
+ abbr: 'i',
+ help: 'The input file specifying how this client should interact '
+ 'with the server. If the input file name is "stdin", '
+ 'then the instructions are read from standard input.');
+ parser.addFlag(VERBOSE_CMDLINE_OPTION,
+ abbr: 'v', help: 'Verbose logging', negatable: false);
+ parser.addFlag(VERY_VERBOSE_CMDLINE_OPTION,
+ help: 'Extra verbose logging', negatable: false);
+ parser.addFlag(HELP_CMDLINE_OPTION,
+ abbr: 'h', help: 'Print this help information', negatable: false);
+
+ ArgResults args = parser.parse(rawArgs);
+ bool showHelp = args[HELP_CMDLINE_OPTION] || args.rest.isNotEmpty;
+
+ if (args[INPUT_CMDLINE_OPTION] == null ||
+ args[INPUT_CMDLINE_OPTION].isEmpty) {
+ print('missing "input" argument');
+ showHelp = true;
+ }
+
+ if (args[VERY_VERBOSE_CMDLINE_OPTION] || rawArgs.contains('-vv')) {
+ Logger.root.level = Level.FINE;
+ } else if (args[VERBOSE_CMDLINE_OPTION]) {
+ Logger.root.level = Level.INFO;
+ } else {
+ Logger.root.level = Level.WARNING;
+ }
+
+ if (showHelp) {
+ print('');
+ print('Launch and interact with the AnalysisServer');
+ print(parser.usage);
+ exit(1);
+ }
+
+ return args;
+}

Powered by Google App Engine
This is Rietveld 408576698