| 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 96a000b1e034867e670ae1c9b263cfd138541dff..ebdac828f51bba77fc0846d5e6f6c7b7260cd4bb 100644
|
| --- a/pkg/analysis_server/lib/src/get_handler.dart
|
| +++ b/pkg/analysis_server/lib/src/get_handler.dart
|
| @@ -327,6 +327,7 @@ class GetHandler {
|
| */
|
| void _returnCompletionInfo(HttpRequest request) {
|
| var refresh = request.requestedUri.queryParameters['refresh'];
|
| + var maxCount = request.requestedUri.queryParameters['maxCount'];
|
| HttpResponse response = request.response;
|
| response.statusCode = HttpStatus.OK;
|
| response.headers.add(HttpHeaders.CONTENT_TYPE, "text/html");
|
| @@ -342,12 +343,14 @@ class GetHandler {
|
| }
|
| response.write('</head>');
|
| response.write('<body>');
|
| - _writeCompletionInfo(response);
|
| - response.write('<form>');
|
| - response.write(
|
| - '<input type="button" onClick="history.go(0)" value="Refresh">');
|
| - response.write('</form>');
|
| - response.write('<p>Append "?refresh=5" to refresh every 5 seconds</p>');
|
| + _writeCompletionInfo(response, maxCount);
|
| + response.write('<p> </p>');
|
| + response.write('<p>Try ');
|
| + response.write('<a href="?refresh=5">?refresh=5</a>');
|
| + response.write(' to refresh every 5 seconds</p>');
|
| + response.write('<p>and ');
|
| + response.write('<a href="?maxCount=50">?maxCount=50</a>');
|
| + response.write(' to keep the last 50 performance measurements</p>');
|
| response.write('</body>');
|
| response.write('</html>');
|
| response.close();
|
| @@ -491,7 +494,7 @@ class GetHandler {
|
| /**
|
| * Append code completion information.
|
| */
|
| - void _writeCompletionInfo(HttpResponse response) {
|
| + void _writeCompletionInfo(HttpResponse response, maxCount) {
|
| response.write('<h1>Code Completion</h1>');
|
| AnalysisServer analysisServer = _server.analysisServer;
|
| if (analysisServer == null) {
|
| @@ -505,19 +508,52 @@ class GetHandler {
|
| response.write('<p>No code completion</p>');
|
| return;
|
| }
|
| + if (maxCount is String) {
|
| + int count = int.parse(maxCount, onError: (_) => 0);
|
| + handler.performanceListMaxLength = count;
|
| + }
|
| CompletionPerformance performance = handler.performance;
|
| if (performance == null) {
|
| response.write('<p>No performance stats yet</p>');
|
| return;
|
| }
|
| - response.write('<h2>Performance</h2>');
|
| response.write('<table>');
|
| _writeRow(response, ['Elapsed', '', 'Operation'], header: true);
|
| performance.operations.forEach((OperationPerformance op) {
|
| String elapsed = op.elapsed != null ? op.elapsed.toString() : '???';
|
| _writeRow(response, [elapsed, ' ', op.name]);
|
| });
|
| + if (handler.priorityChangedPerformance == null) {
|
| + response.write('<p>No priorityChanged caching</p>');
|
| + } else {
|
| + int len = handler.priorityChangedPerformance.operations.length;
|
| + if (len > 0) {
|
| + var op = handler.priorityChangedPerformance.operations[len - 1];
|
| + if (op != null) {
|
| + _writeRow(response, [' ', ' ', ' ']);
|
| + String elapsed = op.elapsed != null ? op.elapsed.toString() : '???';
|
| + _writeRow(response, [elapsed, ' ', op.name]);
|
| + }
|
| + }
|
| + }
|
| response.write('</table>');
|
| + if (handler.performanceList.length > 0) {
|
| + response.write('<table>');
|
| + _writeRow(response, ['Milliseconds', '', '# Notifications', '', '# Suggestions', '', 'Snippet'], header: true);
|
| + handler.performanceList.forEach((CompletionPerformance performance) {
|
| + _writeRow(
|
| + response,
|
| + [
|
| + performance.elapsedInMilliseconds,
|
| + ' ',
|
| + performance.notificationCount,
|
| + ' ',
|
| + performance.suggestionCount,
|
| + ' ',
|
| + performance.snippet]);
|
| + });
|
| + response.write('</table>');
|
| + }
|
| }
|
|
|
| /**
|
|
|