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

Unified Diff: pkg/analysis_server/lib/src/get_handler.dart

Issue 913853002: Minimal initial performance reporting (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Added more data Created 5 years, 10 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 | « no previous file | pkg/analyzer/lib/src/generated/engine.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analysis_server/lib/src/get_handler.dart
diff --git a/pkg/analysis_server/lib/src/get_handler.dart b/pkg/analysis_server/lib/src/get_handler.dart
index 73db1cba5319ed6baef8610bc313963890340037..65afea2df84765edc72e3547b37487fb4ec311d6 100644
--- a/pkg/analysis_server/lib/src/get_handler.dart
+++ b/pkg/analysis_server/lib/src/get_handler.dart
@@ -29,6 +29,7 @@ import 'package:analyzer/src/generated/element.dart';
import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/java_engine.dart';
import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/generated/utilities_general.dart';
import 'analysis_server.dart';
@@ -44,9 +45,9 @@ typedef void HtmlGenerator(StringBuffer buffer);
*/
class GetHandler {
/**
- * The path used to request the status of the analysis server as a whole.
+ * The path used to request overall performance information.
*/
- static const String STATUS_PATH = '/status';
+ static const String ANALYSIS_PERFORMANCE_PATH = '/perf/analysis';
/**
* The path used to request information about a element model.
@@ -71,6 +72,11 @@ class GetHandler {
static const String COMPLETION_PATH = '/completion';
/**
+ * The path used to request communication performance information.
+ */
+ static const String COMMUNICATION_PERFORMANCE_PATH = '/perf/communication';
+
+ /**
* The path used to request information about a specific context.
*/
static const String CONTEXT_PATH = '/context';
@@ -96,15 +102,9 @@ class GetHandler {
static const String OVERLAYS_PATH = '/overlays';
/**
- * The path used to request overall performance information.
- */
- static const String PERFORMANCE_PATH = '/performance';
-
- /**
- * Query parameter used to represent the cache state to search for, when
- * accessing [CACHE_STATE_PATH].
+ * The path used to request the status of the analysis server as a whole.
*/
- static const String STATE_QUERY_PARAM = 'state';
+ static const String STATUS_PATH = '/status';
/**
* Query parameter used to represent the context to search for, when
@@ -135,6 +135,12 @@ class GetHandler {
*/
static const String SOURCE_QUERY_PARAM = 'entry';
+ /**
+ * Query parameter used to represent the cache state to search for, when
+ * accessing [CACHE_STATE_PATH].
+ */
+ static const String STATE_QUERY_PARAM = 'state';
+
static final ContentType _htmlContent =
new ContentType("text", "html", charset: "utf-8");
@@ -180,6 +186,8 @@ class GetHandler {
String path = request.uri.path;
if (path == STATUS_PATH) {
_returnServerStatus(request);
+ } else if (path == ANALYSIS_PERFORMANCE_PATH) {
+ _returnAnalysisPerformance(request);
} else if (path == AST_PATH) {
_returnAst(request);
} else if (path == CACHE_STATE_PATH) {
@@ -188,6 +196,8 @@ class GetHandler {
_returnCacheEntry(request);
} else if (path == COMPLETION_PATH) {
_returnCompletionInfo(request);
+ } else if (path == COMMUNICATION_PERFORMANCE_PATH) {
+ _returnCommunicationPerformance(request);
} else if (path == CONTEXT_PATH) {
_returnContextInfo(request);
} else if (path == ELEMENT_PATH) {
@@ -198,8 +208,6 @@ class GetHandler {
_returnOverlayContents(request);
} else if (path == OVERLAYS_PATH) {
_returnOverlaysInfo(request);
- } else if (path == PERFORMANCE_PATH) {
- _returnPerformance(request);
} else {
_returnUnknownRequest(request);
}
@@ -246,6 +254,62 @@ class GetHandler {
}
/**
+ * Return a response displaying overall performance information.
+ */
+ void _returnAnalysisPerformance(HttpRequest request) {
+ AnalysisServer analysisServer = _server.analysisServer;
+ if (analysisServer == null) {
+ return _returnFailure(request, 'Analysis server is not running');
+ }
+ _writeResponse(request, (StringBuffer buffer) {
+ _writePage(
+ buffer,
+ 'Analysis Server - Analysis Performance',
+ [],
+ (StringBuffer buffer) {
+ void writeRow(TimeCounter counter, String label) {
+ _writeRow(buffer, [counter.result, label], classes: ["right", null]);
+ }
+
+ buffer.write('<h3>Analysis Performance</h3>');
+ buffer.write('<p><b>Time spent in each phase of analysis</b></p>');
+ buffer.write(
+ '<table style="border-collapse: separate; border-spacing: 10px 5px;">');
+ _writeRow(buffer, ['Time (in ms)', 'Analysis Phase'], header: true);
+ writeRow(PerformanceStatistics.io, 'io');
+ writeRow(PerformanceStatistics.scan, 'scan');
+ writeRow(PerformanceStatistics.parse, 'parse');
+ writeRow(PerformanceStatistics.resolve, 'resolve');
+ writeRow(PerformanceStatistics.errors, 'errors');
+ writeRow(PerformanceStatistics.hints, 'hints');
+ writeRow(PerformanceStatistics.lint, 'lint');
+ buffer.write('</table>');
+
+ Map<DataDescriptor, int> countMap = SourceEntry.unflushedCountMap;
+ buffer.write('<p><b>Number of times flushed data was re-created</b></p>');
+ if (countMap.isEmpty) {
+ buffer.write('<p>none</p>');
+ } else {
+ List<DataDescriptor> keys = countMap.keys.toList();
+ keys.sort(
+ (DataDescriptor first, DataDescriptor second) =>
+ first.toString().compareTo(second.toString()));
+ buffer.write(
+ '<table style="border-collapse: separate; border-spacing: 10px 5px;">');
+ _writeRow(buffer, ['Count', 'Data'], header: true);
+ for (DataDescriptor key in keys) {
+ _writeRow(
+ buffer,
+ [countMap[key], key.toString()],
+ classes: ["right", null]);
+ }
+ buffer.write('</table>');
+ }
+ });
+ });
+ }
+
+ /**
* Return a response containing information about an AST structure.
*/
void _returnAst(HttpRequest request) {
@@ -499,6 +563,91 @@ class GetHandler {
}
/**
+ * Return a response displaying overall performance information.
+ */
+ void _returnCommunicationPerformance(HttpRequest request) {
+ AnalysisServer analysisServer = _server.analysisServer;
+ if (analysisServer == null) {
+ return _returnFailure(request, 'Analysis server is not running');
+ }
+ _writeResponse(request, (StringBuffer buffer) {
+ _writePage(
+ buffer,
+ 'Analysis Server - Communication Performance',
+ [],
+ (StringBuffer buffer) {
+ buffer.write('<h3>Communication Performance</h3>');
+ _writeTwoColumns(buffer, (StringBuffer buffer) {
+ ServerPerformance perf = analysisServer.performanceDuringStartup;
+ int requestCount = perf.requestCount;
+ num averageLatency =
+ requestCount > 0 ? (perf.requestLatency / requestCount).round() : 0;
+ int maximumLatency = perf.maxLatency;
+ num slowRequestPercent =
+ requestCount > 0 ? (perf.slowRequestCount * 100 / requestCount).round() : 0;
+ buffer.write('<h4>Startup</h4>');
+ buffer.write('<table>');
+ _writeRow(
+ buffer,
+ [requestCount, 'requests'],
+ classes: ["right", null]);
+ _writeRow(
+ buffer,
+ [averageLatency, 'ms average latency'],
+ classes: ["right", null]);
+ _writeRow(
+ buffer,
+ [maximumLatency, 'ms maximum latency'],
+ classes: ["right", null]);
+ _writeRow(
+ buffer,
+ [slowRequestPercent, '% > 150 ms latency'],
+ classes: ["right", null]);
+ if (analysisServer.performanceAfterStartup != null) {
+ int startupTime =
+ analysisServer.performanceAfterStartup.startTime -
+ perf.startTime;
+ _writeRow(
+ buffer,
+ [startupTime, 'ms for initial analysis to complete']);
+ }
+ buffer.write('</table>');
+ }, (StringBuffer buffer) {
+ ServerPerformance perf = analysisServer.performanceAfterStartup;
+ if (perf == null) {
+ return;
+ }
+ int requestCount = perf.requestCount;
+ num averageLatency =
+ requestCount > 0 ? (perf.requestLatency * 10 / requestCount).round() / 10 : 0;
+ int maximumLatency = perf.maxLatency;
+ num slowRequestPercent =
+ requestCount > 0 ? (perf.slowRequestCount * 100 / requestCount).round() : 0;
+ buffer.write('<h4>Current</h4>');
+ buffer.write('<table>');
+ _writeRow(
+ buffer,
+ [requestCount, 'requests'],
+ classes: ["right", null]);
+ _writeRow(
+ buffer,
+ [averageLatency, 'ms average latency'],
+ classes: ["right", null]);
+ _writeRow(
+ buffer,
+ [maximumLatency, 'ms maximum latency'],
+ classes: ["right", null]);
+ _writeRow(
+ buffer,
+ [slowRequestPercent, '% > 150 ms latency'],
+ classes: ["right", null]);
+ buffer.write('</table>');
+ });
+ });
+ });
+ }
+
+ /**
* Return a response displaying code completion information.
*/
void _returnCompletionInfo(HttpRequest request) {
@@ -813,91 +962,6 @@ class GetHandler {
}
/**
- * Return a response displaying overall performance information.
- */
- void _returnPerformance(HttpRequest request) {
- AnalysisServer analysisServer = _server.analysisServer;
- if (analysisServer == null) {
- return _returnFailure(request, 'Analysis server is not running');
- }
- _writeResponse(request, (StringBuffer buffer) {
- _writePage(
- buffer,
- 'Analysis Server - Performance',
- [],
- (StringBuffer buffer) {
- buffer.write('<h3>Communication Performance</h3>');
- _writeTwoColumns(buffer, (StringBuffer buffer) {
- ServerPerformance perf = analysisServer.performanceDuringStartup;
- int requestCount = perf.requestCount;
- num averageLatency =
- requestCount > 0 ? (perf.requestLatency / requestCount).round() : 0;
- int maximumLatency = perf.maxLatency;
- num slowRequestPercent =
- requestCount > 0 ? (perf.slowRequestCount * 100 / requestCount).round() : 0;
- buffer.write('<h4>Startup</h4>');
- buffer.write('<table>');
- _writeRow(
- buffer,
- [requestCount, 'requests'],
- classes: ["right", null]);
- _writeRow(
- buffer,
- [averageLatency, 'ms average latency'],
- classes: ["right", null]);
- _writeRow(
- buffer,
- [maximumLatency, 'ms maximum latency'],
- classes: ["right", null]);
- _writeRow(
- buffer,
- [slowRequestPercent, '% > 150 ms latency'],
- classes: ["right", null]);
- if (analysisServer.performanceAfterStartup != null) {
- int startupTime =
- analysisServer.performanceAfterStartup.startTime -
- perf.startTime;
- _writeRow(
- buffer,
- [startupTime, 'ms for initial analysis to complete']);
- }
- buffer.write('</table>');
- }, (StringBuffer buffer) {
- ServerPerformance perf = analysisServer.performanceAfterStartup;
- if (perf == null) {
- return;
- }
- int requestCount = perf.requestCount;
- num averageLatency =
- requestCount > 0 ? (perf.requestLatency * 10 / requestCount).round() / 10 : 0;
- int maximumLatency = perf.maxLatency;
- num slowRequestPercent =
- requestCount > 0 ? (perf.slowRequestCount * 100 / requestCount).round() : 0;
- buffer.write('<h4>Current</h4>');
- buffer.write('<table>');
- _writeRow(
- buffer,
- [requestCount, 'requests'],
- classes: ["right", null]);
- _writeRow(
- buffer,
- [averageLatency, 'ms average latency'],
- classes: ["right", null]);
- _writeRow(
- buffer,
- [maximumLatency, 'ms maximum latency'],
- classes: ["right", null]);
- _writeRow(
- buffer,
- [slowRequestPercent, '% > 150 ms latency'],
- classes: ["right", null]);
- buffer.write('</table>');
- });
- });
- });
- }
-
- /**
* Return a response indicating the status of the analysis server.
*/
void _returnServerStatus(HttpRequest request) {
@@ -925,7 +989,8 @@ class GetHandler {
buffer.write(makeLink(COMPLETION_PATH, {}, 'Completion data'));
buffer.write('</p>');
buffer.write('<p>');
- buffer.write(makeLink(PERFORMANCE_PATH, {}, 'Performance'));
+ buffer.write(
+ makeLink(COMMUNICATION_PERFORMANCE_PATH, {}, 'Performance'));
buffer.write('</p>');
buffer.write('<p>');
buffer.write(makeLink(STATUS_PATH, {}, 'Server status'));
@@ -1017,6 +1082,11 @@ class GetHandler {
int freq = AnalysisServer.performOperationDelayFreqency;
String delay = freq > 0 ? '1 ms every $freq ms' : 'off';
buffer.write('<p><b>perform operation delay:</b> $delay</p>');
+
+ buffer.write('<p><b>Performance Data</b></p>');
+ buffer.write('<p>');
+ buffer.write(makeLink(ANALYSIS_PERFORMANCE_PATH, {}, 'Task data'));
+ buffer.write('</p>');
}, (StringBuffer buffer) {
_writeSubscriptionMap(
buffer,
@@ -1404,7 +1474,8 @@ class GetHandler {
buffer.write('<p><b>Performance Data</b></p>');
buffer.write('<p>');
- buffer.write(makeLink(PERFORMANCE_PATH, {}, 'Communication performance'));
+ buffer.write(
+ makeLink(COMMUNICATION_PERFORMANCE_PATH, {}, 'Communication performance'));
buffer.write('</p>');
}, (StringBuffer buffer) {
_writeSubscriptionList(buffer, ServerService.VALUES, services);
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/generated/engine.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698