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

Side by Side Diff: pkg/analysis_server/lib/src/status/get_handler.dart

Issue 1221703003: More GetHandler clean-up (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 5 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library analysis_server.src.status.get_handler; 5 library analysis_server.src.status.get_handler;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:collection'; 8 import 'dart:collection';
9 import 'dart:convert'; 9 import 'dart:convert';
10 import 'dart:io'; 10 import 'dart:io';
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 */ 291 */
292 void _returnAnalysisPerformance(HttpRequest request) { 292 void _returnAnalysisPerformance(HttpRequest request) {
293 AnalysisServer analysisServer = _server.analysisServer; 293 AnalysisServer analysisServer = _server.analysisServer;
294 if (analysisServer == null) { 294 if (analysisServer == null) {
295 return _returnFailure(request, 'Analysis server is not running'); 295 return _returnFailure(request, 'Analysis server is not running');
296 } 296 }
297 _writeResponse(request, (StringBuffer buffer) { 297 _writeResponse(request, (StringBuffer buffer) {
298 _writePage(buffer, 'Analysis Server - Analysis Performance', [], 298 _writePage(buffer, 'Analysis Server - Analysis Performance', [],
299 (StringBuffer buffer) { 299 (StringBuffer buffer) {
300 buffer.write('<h3>Analysis Performance</h3>'); 300 buffer.write('<h3>Analysis Performance</h3>');
301
302 // 301 //
303 // Write performance tags. 302 // Write performance tags.
304 // 303 //
305 { 304 buffer.write('<p><b>Performance tag data</b></p>');
306 buffer.write('<p><b>Time spent in each phase of analysis</b></p>'); 305 buffer.write(
307 buffer.write( 306 '<table style="border-collapse: separate; border-spacing: 10px 5px;" >');
308 '<table style="border-collapse: separate; border-spacing: 10px 5px ;">'); 307 _writeRow(buffer, ['Time (in ms)', 'Percent', 'Tag name'],
309 _writeRow(buffer, ['Time (in ms)', 'Percent', 'Analysis Phase'], 308 header: true);
310 header: true); 309 // prepare sorted tags
311 // prepare sorted tags 310 List<PerformanceTag> tags = PerformanceTag.all.toList();
312 List<PerformanceTag> tags = PerformanceTag.all.toList(); 311 tags.remove(ServerPerformanceStatistics.idle);
313 tags.remove(ServerPerformanceStatistics.idle); 312 tags.sort((a, b) => b.elapsedMs - a.elapsedMs);
314 tags.sort((a, b) => b.elapsedMs - a.elapsedMs); 313 // prepare total time
315 // prepare total time 314 int totalTagTime = 0;
316 int totalTime = 0; 315 tags.forEach((PerformanceTag tag) {
317 tags.forEach((PerformanceTag tag) { 316 totalTagTime += tag.elapsedMs;
318 totalTime += tag.elapsedMs; 317 });
319 }); 318 // write rows
320 // write rows 319 void writeRow(PerformanceTag tag) {
321 void writeRow(PerformanceTag tag) { 320 double percent = (tag.elapsedMs * 100) / totalTagTime;
322 double percent = (tag.elapsedMs * 100) / totalTime; 321 String percentStr = '${percent.toStringAsFixed(2)}%';
323 String percentStr = '${percent.toStringAsFixed(2)}%'; 322 _writeRow(buffer, [tag.elapsedMs, percentStr, tag.label],
324 _writeRow(buffer, [tag.elapsedMs, percentStr, tag.label], 323 classes: ["right", "right", null]);
325 classes: ["right", "right", null]); 324 }
325 tags.forEach(writeRow);
326 buffer.write('</table>');
327 //
328 // Write task model timing information.
329 //
330 buffer.write('<p><b>Task performace data</b></p>');
331 buffer.write(
332 '<table style="border-collapse: separate; border-spacing: 10px 5px;" >');
333 _writeRow(buffer, [
334 'Task Name',
335 'Count',
336 'Total Time (in ms)',
337 'Average Time (in ms)'
338 ], header: true);
339
340 Map<Type, int> countMap = AnalysisTask.countMap;
341 Map<Type, Stopwatch> stopwatchMap = AnalysisTask.stopwatchMap;
342 List<Type> taskClasses = stopwatchMap.keys.toList();
343 taskClasses.sort((Type first, Type second) =>
344 first.toString().compareTo(second.toString()));
345 int totalTaskTime = 0;
346 taskClasses.forEach((Type taskClass) {
347 int count = countMap[taskClass];
348 if (count == null) {
349 count = 0;
326 } 350 }
327 tags.forEach(writeRow); 351 int taskTime = stopwatchMap[taskClass].elapsedMilliseconds;
328 buffer.write('</table>'); 352 totalTaskTime += taskTime;
329 }
330
331 //
332 // Write new task model timing information.
333 //
334 if (AnalysisEngine.instance.useTaskModel) {
335 buffer.write('<p><b>Task performace data</b></p>');
336 buffer.write(
337 '<table style="border-collapse: separate; border-spacing: 10px 5px ;">');
338 _writeRow(buffer, [ 353 _writeRow(buffer, [
339 'Task Name', 354 taskClass.toString(),
340 'Count', 355 count,
341 'Total Time (in ms)', 356 taskTime,
342 'Average Time (in ms)' 357 count <= 0 ? '-' : (taskTime / count).toStringAsFixed(3)
343 ], header: true); 358 ], classes: [null, "right", "right", "right"]);
344 359 });
345 Map<Type, int> countMap = AnalysisTask.countMap; 360 _writeRow(buffer, ['Total', '-', totalTaskTime, '-'],
346 Map<Type, Stopwatch> stopwatchMap = AnalysisTask.stopwatchMap; 361 classes: [null, "right", "right", "right"]);
347 List<Type> taskClasses = stopwatchMap.keys.toList(); 362 buffer.write('</table>');
348 taskClasses.sort((Type first, Type second) =>
349 first.toString().compareTo(second.toString()));
350 int totalTime = 0;
351 taskClasses.forEach((Type taskClass) {
352 int count = countMap[taskClass];
353 if (count == null) {
354 count = 0;
355 }
356 int taskTime = stopwatchMap[taskClass].elapsedMilliseconds;
357 totalTime += taskTime;
358 _writeRow(buffer, [
359 taskClass.toString(),
360 count,
361 taskTime,
362 count <= 0 ? '-' : (taskTime / count).toStringAsFixed(3)
363 ], classes: [null, "right", "right", "right"]);
364 });
365 _writeRow(buffer, ['Total', '-', totalTime, '-'],
366 classes: [null, "right", "right", "right"]);
367 buffer.write('</table>');
368 }
369
370 //
371 // Write old task model transition information.
372 //
373 {
374 Map<DataDescriptor, Map<CacheState, int>> transitionMap =
375 SourceEntry.transitionMap;
376 buffer.write(
377 '<p><b>Number of times a state transitioned to VALID (grouped by d escriptor)</b></p>');
378 if (transitionMap.isEmpty) {
379 buffer.write('<p>none</p>');
380 } else {
381 List<DataDescriptor> descriptors = transitionMap.keys.toList();
382 descriptors.sort((DataDescriptor first, DataDescriptor second) =>
383 first.toString().compareTo(second.toString()));
384 for (DataDescriptor key in descriptors) {
385 Map<CacheState, int> countMap = transitionMap[key];
386 List<CacheState> oldStates = countMap.keys.toList();
387 oldStates.sort((CacheState first, CacheState second) =>
388 first.toString().compareTo(second.toString()));
389 buffer.write('<p>${key.toString()}</p>');
390 buffer.write(
391 '<table style="border-collapse: separate; border-spacing: 10px 5px;">');
392 _writeRow(buffer, ['Count', 'Previous State'], header: true);
393 for (CacheState state in oldStates) {
394 _writeRow(buffer, [countMap[state], state.toString()],
395 classes: ["right", null]);
396 }
397 buffer.write('</table>');
398 }
399 }
400 }
401 }); 363 });
402 }); 364 });
403 } 365 }
404 366
405 /** 367 /**
406 * Return a response containing information about an AST structure. 368 * Return a response containing information about an AST structure.
407 */ 369 */
408 void _returnAst(HttpRequest request) { 370 void _returnAst(HttpRequest request) {
409 AnalysisServer analysisServer = _server.analysisServer; 371 AnalysisServer analysisServer = _server.analysisServer;
410 if (analysisServer == null) { 372 if (analysisServer == null) {
(...skipping 1258 matching lines...) Expand 10 before | Expand all | Expand 10 after
1669 */ 1631 */
1670 static String makeLink( 1632 static String makeLink(
1671 String path, Map<String, String> params, String innerHtml, 1633 String path, Map<String, String> params, String innerHtml,
1672 [bool hasError = false]) { 1634 [bool hasError = false]) {
1673 Uri uri = new Uri(path: path, queryParameters: params); 1635 Uri uri = new Uri(path: path, queryParameters: params);
1674 String href = HTML_ESCAPE.convert(uri.toString()); 1636 String href = HTML_ESCAPE.convert(uri.toString());
1675 String classAttribute = hasError ? ' class="error"' : ''; 1637 String classAttribute = hasError ? ' class="error"' : '';
1676 return '<a href="$href"$classAttribute>$innerHtml</a>'; 1638 return '<a href="$href"$classAttribute>$innerHtml</a>';
1677 } 1639 }
1678 } 1640 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698