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

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

Issue 1219023006: move performance measurement to benchmark/integration (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: merge Created 5 years, 6 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
« no previous file with comments | « pkg/analysis_server/test/performance/main.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analysis_server/test/performance/operation.dart
diff --git a/pkg/analysis_server/test/performance/operation.dart b/pkg/analysis_server/test/performance/operation.dart
deleted file mode 100644
index f9ee62a676aca7661bd3f05696a677dba58442f3..0000000000000000000000000000000000000000
--- a/pkg/analysis_server/test/performance/operation.dart
+++ /dev/null
@@ -1,238 +0,0 @@
-// Copyright (c) 2015, 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.operation;
-
-import 'dart:async';
-
-import 'package:analysis_server/src/protocol.dart';
-import 'package:logging/logging.dart';
-
-import 'driver.dart';
-import 'input_converter.dart';
-
-/**
- * A [CompletionRequestOperation] tracks response time along with
- * the first and last completion notifications.
- */
-class CompletionRequestOperation extends RequestOperation {
- Driver driver;
- StreamSubscription<CompletionResultsParams> subscription;
- String notificationId;
- Stopwatch stopwatch;
- bool firstNotification = true;
-
- CompletionRequestOperation(
- CommonInputConverter converter, Map<String, dynamic> json)
- : super(converter, json);
-
- @override
- Future perform(Driver driver) {
- this.driver = driver;
- subscription = driver.onCompletionResults.listen(processNotification);
- return super.perform(driver);
- }
-
- void processNotification(CompletionResultsParams event) {
- if (event.id == notificationId) {
- Duration elapsed = stopwatch.elapsed;
- if (firstNotification) {
- firstNotification = false;
- driver.results.record('completion notification first', elapsed,
- notification: true);
- }
- if (event.isLast) {
- subscription.cancel();
- driver.results.record('completion notification last', elapsed,
- notification: true);
- }
- }
- }
-
- @override
- void processResult(
- String id, Map<String, dynamic> result, Stopwatch stopwatch) {
- notificationId = result['id'];
- this.stopwatch = stopwatch;
- super.processResult(id, result, stopwatch);
- }
-}
-
-/**
- * An [Operation] represents an action such as sending a request to the server.
- */
-abstract class Operation {
- Future perform(Driver driver);
-}
-
-/**
- * A [RequestOperation] sends a [JSON] request to the server.
- */
-class RequestOperation extends Operation {
- final CommonInputConverter converter;
- final Map<String, dynamic> json;
-
- RequestOperation(this.converter, this.json);
-
- @override
- Future perform(Driver driver) {
- Stopwatch stopwatch = new Stopwatch();
- String originalId = json['id'];
- String method = json['method'];
- json['clientRequestTime'] = new DateTime.now().millisecondsSinceEpoch;
- driver.logger.log(Level.FINE, 'Sending request: $method\n $json');
- stopwatch.start();
-
- void recordResult(bool success, result) {
- Duration elapsed = stopwatch.elapsed;
- driver.results.record(method, elapsed, success: success);
- driver.logger.log(
- Level.FINE, 'Response received: $method : $elapsed\n $result');
- }
-
- driver.send(method, json['params']).then((Map<String, dynamic> result) {
- recordResult(true, result);
- processResult(originalId, result, stopwatch);
- }).catchError((exception) {
- recordResult(false, exception);
- converter.processErrorResponse(originalId, exception);
- });
- return null;
- }
-
- void processResult(
- String id, Map<String, dynamic> result, Stopwatch stopwatch) {
- converter.processResponseResult(id, result);
- }
-}
-
-/**
- * A [ResponseOperation] waits for a [JSON] response from the server.
- */
-class ResponseOperation extends Operation {
- static final Duration responseTimeout = new Duration(seconds: 5);
- final CommonInputConverter converter;
- final Map<String, dynamic> requestJson;
- final Map<String, dynamic> responseJson;
- final Completer completer = new Completer();
- Driver driver;
-
- ResponseOperation(this.converter, this.requestJson, this.responseJson) {
- completer.future.then(_processResult).timeout(responseTimeout);
- }
-
- @override
- Future perform(Driver driver) {
- this.driver = driver;
- return converter.processExpectedResponse(responseJson['id'], completer);
- }
-
- bool _equal(expectedResult, actualResult) {
- if (expectedResult is Map && actualResult is Map) {
- if (expectedResult.length == actualResult.length) {
- return expectedResult.keys.every((String key) {
- return key ==
- 'fileStamp' || // fileStamp values will not be the same across runs
- _equal(expectedResult[key], actualResult[key]);
- });
- }
- } else if (expectedResult is List && actualResult is List) {
- if (expectedResult.length == actualResult.length) {
- for (int i = 0; i < expectedResult.length; ++i) {
- if (!_equal(expectedResult[i], actualResult[i])) {
- return false;
- }
- }
- return true;
- }
- }
- return expectedResult == actualResult;
- }
-
- /**
- * Compare the expected and actual server response result.
- */
- void _processResult(actualResult) {
- var expectedResult = responseJson['result'];
- if (!_equal(expectedResult, actualResult)) {
- var expectedError = responseJson['error'];
- String format(value) {
- String text = '\n$value';
- if (text.endsWith('\n')) {
- text = text.substring(0, text.length - 1);
- }
- return text.replaceAll('\n', '\n ');
- }
- String message = 'Request:${format(requestJson)}\n'
- 'expected result:${format(expectedResult)}\n'
- 'expected error:${format(expectedError)}\n'
- 'but received:${format(actualResult)}';
- driver.results.recordUnexpectedResults(requestJson['method']);
- if (expectedError == null) {
- converter.logger.log(Level.SEVERE, message);
- } else {
- throw message;
- }
- }
- }
-}
-
-class StartServerOperation extends Operation {
- final int diagnosticPort;
-
- StartServerOperation({this.diagnosticPort});
-
- @override
- Future perform(Driver driver) {
- return driver.startServer(diagnosticPort: diagnosticPort);
- }
-}
-
-class WaitForAnalysisCompleteOperation extends Operation {
- @override
- Future perform(Driver driver) {
- DateTime start = new DateTime.now();
- driver.logger.log(Level.FINE, 'waiting for analysis to complete');
- StreamSubscription<ServerStatusParams> subscription;
- Timer timer;
- Completer completer = new Completer();
- bool isAnalyzing = false;
- subscription = driver.onServerStatus.listen((ServerStatusParams params) {
- if (params.analysis != null) {
- if (params.analysis.isAnalyzing) {
- isAnalyzing = true;
- } else {
- subscription.cancel();
- timer.cancel();
- DateTime end = new DateTime.now();
- Duration delta = end.difference(start);
- driver.logger.log(Level.FINE, 'analysis complete after $delta');
- completer.complete();
- driver.results.record('analysis complete', delta, notification: true);
- }
- }
- });
- timer = new Timer.periodic(new Duration(milliseconds: 20), (_) {
- if (!isAnalyzing) {
- // TODO (danrubel) revisit this once source change requests are implemented
- subscription.cancel();
- timer.cancel();
- driver.logger.log(Level.INFO, 'analysis never started');
- completer.complete();
- return;
- }
- // Timeout if no communcation received within the last 60 seconds.
- double currentTime = driver.server.currentElapseTime;
- double lastTime = driver.server.lastCommunicationTime;
- if (currentTime - lastTime > 60) {
- subscription.cancel();
- timer.cancel();
- String message = 'gave up waiting for analysis to complete';
- driver.logger.log(Level.WARNING, message);
- completer.completeError(message);
- }
- });
- return completer.future;
- }
-}
« no previous file with comments | « pkg/analysis_server/test/performance/main.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698