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

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

Issue 2918533002: Updates to the diagnostics page. (Closed)
Patch Set: Created 3 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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 import 'dart:convert'; 5 import 'dart:convert';
6 import 'dart:io'; 6 import 'dart:io';
7 7
8 import 'package:analysis_server/protocol/protocol_generated.dart'; 8 import 'package:analysis_server/protocol/protocol_generated.dart';
9 import 'package:analysis_server/src/analysis_server.dart'; 9 import 'package:analysis_server/src/analysis_server.dart';
10 import 'package:analysis_server/src/domain_completion.dart'; 10 import 'package:analysis_server/src/domain_completion.dart';
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 } 101 }
102 102
103 td.pre { 103 td.pre {
104 white-space: pre; 104 white-space: pre;
105 } 105 }
106 106
107 .nowrap { 107 .nowrap {
108 white-space: nowrap; 108 white-space: nowrap;
109 } 109 }
110 110
111 .scroll-table {
112 max-height: 190px;
113 overflow-x: auto;
114 }
115
111 .footer { 116 .footer {
112 padding-top: 3rem; 117 padding-top: 3rem;
113 padding-bottom: 3rem; 118 padding-bottom: 3rem;
114 margin-top: 3rem; 119 margin-top: 3rem;
115 line-height: 1.75; 120 line-height: 1.75;
116 color: #7a7a7a; 121 color: #7a7a7a;
117 border-top: 1px solid #eee; 122 border-top: 1px solid #eee;
118 } 123 }
119 124
120 .footer strong { 125 .footer strong {
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
421 class ProfilePage extends DiagnosticPageWithNav { 426 class ProfilePage extends DiagnosticPageWithNav {
422 ProfilePage(DiagnosticsSite site) 427 ProfilePage(DiagnosticsSite site)
423 : super(site, 'profile', 'Profiling Info', 428 : super(site, 'profile', 'Profiling Info',
424 description: 'Profiling performance tag data.'); 429 description: 'Profiling performance tag data.');
425 430
426 @override 431 @override
427 void generateContent(Map<String, String> params) { 432 void generateContent(Map<String, String> params) {
428 // prepare sorted tags 433 // prepare sorted tags
429 List<PerformanceTag> tags = PerformanceTag.all.toList(); 434 List<PerformanceTag> tags = PerformanceTag.all.toList();
430 tags.remove(ServerPerformanceStatistics.idle); 435 tags.remove(ServerPerformanceStatistics.idle);
431 tags.removeWhere((tag) => tag.label == 'unknown'); 436 tags.remove(PerformanceTag.UNKNOWN);
432 tags.sort((a, b) => b.elapsedMs - a.elapsedMs); 437 tags.sort((a, b) => b.elapsedMs - a.elapsedMs);
433 438
434 // draw a pie chart 439 // draw a pie chart
435 String rowData = 440 String rowData =
436 tags.map((tag) => "['${tag.label}', ${tag.elapsedMs}]").join(','); 441 tags.map((tag) => "['${tag.label}', ${tag.elapsedMs}]").join(',');
437 buf.writeln( 442 buf.writeln(
438 '<div id="chart-div" style="width: 700px; height: 300px;"></div>'); 443 '<div id="chart-div" style="width: 700px; height: 300px;"></div>');
439 buf.writeln(''' 444 buf.writeln('''
440 <script type="text/javascript"> 445 <script type="text/javascript">
441 google.charts.load('current', {'packages':['corechart']}); 446 google.charts.load('current', {'packages':['corechart']});
(...skipping 17 matching lines...) Expand all
459 p('Total measured time: ${printMilliseconds(totalTime)}'); 464 p('Total measured time: ${printMilliseconds(totalTime)}');
460 465
461 // write out a table 466 // write out a table
462 void _writeRow(List<String> data, {bool header: false}) { 467 void _writeRow(List<String> data, {bool header: false}) {
463 buf.write('<tr>'); 468 buf.write('<tr>');
464 if (header) { 469 if (header) {
465 for (String d in data) { 470 for (String d in data) {
466 buf.write('<th>$d</th>'); 471 buf.write('<th>$d</th>');
467 } 472 }
468 } else { 473 } else {
469 for (String d in data) { 474 buf.write('<td>${data[0]}</td>');
470 buf.write('<td>$d</td>'); 475
476 for (String d in data.sublist(1)) {
477 buf.write('<td class="right">$d</td>');
471 } 478 }
472 } 479 }
473 buf.writeln('</tr>'); 480 buf.writeln('</tr>');
474 } 481 }
475 482
476 buf.write('<table>'); 483 buf.write('<table>');
477 _writeRow(['Tag name', 'Time (in ms)', 'Percent'], header: true); 484 _writeRow(['Tag name', 'Time (in ms)', 'Percent'], header: true);
478 void writeRow(PerformanceTag tag) { 485 void writeRow(PerformanceTag tag) {
479 double percent = tag.elapsedMs / totalTime; 486 double percent = tag.elapsedMs / totalTime;
480 _writeRow([ 487 _writeRow([
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
600 addedFiles.sort(); 607 addedFiles.sort();
601 implicitFiles.sort(); 608 implicitFiles.sort();
602 609
603 String lenCounter(List list) { 610 String lenCounter(List list) {
604 return '<span class="counter" style="float: right;">${list.length}</span>' ; 611 return '<span class="counter" style="float: right;">${list.length}</span>' ;
605 } 612 }
606 613
607 h3('Context files'); 614 h3('Context files');
608 615
609 h4('Priority files ${lenCounter(priorityFiles)}', raw: true); 616 h4('Priority files ${lenCounter(priorityFiles)}', raw: true);
610 inputList(priorityFiles, (file) => buf.write(file)); 617 ul(priorityFiles, (file) => buf.write(file), classes: 'scroll-table');
611 618
612 h4('Added files ${lenCounter(addedFiles)}', raw: true); 619 h4('Added files ${lenCounter(addedFiles)}', raw: true);
613 inputList(addedFiles, (file) => buf.write(file)); 620 ul(addedFiles, (file) => buf.write(file), classes: 'scroll-table');
614 621
615 h4('ImplicitFiles files ${lenCounter(implicitFiles)}', raw: true); 622 h4('ImplicitFiles files ${lenCounter(implicitFiles)}', raw: true);
616 inputList(implicitFiles, (file) => buf.write(file)); 623 ul(implicitFiles, (file) => buf.write(file), classes: 'scroll-table');
617 624
618 SourceFactory sourceFactory = driver.sourceFactory; 625 SourceFactory sourceFactory = driver.sourceFactory;
619 if (sourceFactory is SourceFactoryImpl) { 626 if (sourceFactory is SourceFactoryImpl) {
620 h3('Resolvers'); 627 h3('Resolvers');
621 for (UriResolver resolver in sourceFactory.resolvers) { 628 for (UriResolver resolver in sourceFactory.resolvers) {
622 h4(resolver.runtimeType.toString()); 629 h4(resolver.runtimeType.toString());
623 buf.write('<p>'); 630 buf.write('<p class="scroll-table">');
624 if (resolver is DartUriResolver) { 631 if (resolver is DartUriResolver) {
625 DartSdk sdk = resolver.dartSdk; 632 DartSdk sdk = resolver.dartSdk;
626 buf.write(' (sdk = '); 633 buf.write(' (sdk = ');
627 buf.write(sdk.runtimeType); 634 buf.write(sdk.runtimeType);
628 if (sdk is FolderBasedDartSdk) { 635 if (sdk is FolderBasedDartSdk) {
629 buf.write(' (path = '); 636 buf.write(' (path = ');
630 buf.write(sdk.directory.path); 637 buf.write(sdk.directory.path);
631 buf.write(')'); 638 buf.write(')');
632 } else if (sdk is EmbedderSdk) { 639 } else if (sdk is EmbedderSdk) {
633 buf.write(' (map = '); 640 buf.write(' (map = ');
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
883 } 890 }
884 891
885 buf.writeln('<div class="columns">'); 892 buf.writeln('<div class="columns">');
886 893
887 ServerPerformance perf = server.performanceAfterStartup; 894 ServerPerformance perf = server.performanceAfterStartup;
888 if (perf != null) { 895 if (perf != null) {
889 buf.writeln('<div class="column one-half">'); 896 buf.writeln('<div class="column one-half">');
890 h3('Current'); 897 h3('Current');
891 898
892 int requestCount = perf.requestCount; 899 int requestCount = perf.requestCount;
893 double averageLatency = 900 int averageLatency =
894 requestCount > 0 ? (perf.requestLatency / requestCount) : 0.0; 901 requestCount > 0 ? (perf.requestLatency / requestCount) : 0;
Brian Wilkerson 2017/05/31 13:50:50 Did you want to use integer division (here and bel
devoncarew 2017/05/31 14:14:30 Yup, done.
895 int maximumLatency = perf.maxLatency; 902 int maximumLatency = perf.maxLatency;
896 double slowRequestPercent = 903 double slowRequestPercent =
897 requestCount > 0 ? (perf.slowRequestCount / requestCount) : 0.0; 904 requestCount > 0 ? (perf.slowRequestCount / requestCount) : 0.0;
898 905
899 buf.write('<table>'); 906 buf.write('<table>');
900 writeRow([printInteger(requestCount), 'requests'], 907 writeRow([printInteger(requestCount), 'requests'],
901 classes: ["right", null]); 908 classes: ["right", null]);
902 writeRow([printMilliseconds(averageLatency), 'average latency'], 909 writeRow([printMilliseconds(averageLatency), 'average latency'],
903 classes: ["right", null]); 910 classes: ["right", null]);
904 writeRow([printMilliseconds(maximumLatency), 'maximum latency'], 911 writeRow([printMilliseconds(maximumLatency), 'maximum latency'],
905 classes: ["right", null]); 912 classes: ["right", null]);
906 writeRow([printPercentage(slowRequestPercent), '> 150 ms latency'], 913 writeRow([printPercentage(slowRequestPercent), '> 150 ms latency'],
907 classes: ["right", null]); 914 classes: ["right", null]);
908 buf.write('</table>'); 915 buf.write('</table>');
916
917 String time = server.uptime.toString();
918 if (time.contains('.')) {
919 time = time.substring(0, time.indexOf('.'));
920 }
921 buf.writeln(writeOption('Uptime', time));
922
909 buf.write('</div>'); 923 buf.write('</div>');
910 } 924 }
911 925
912 buf.writeln('<div class="column one-half">'); 926 buf.writeln('<div class="column one-half">');
913 h3('Startup'); 927 h3('Startup');
914 perf = server.performanceDuringStartup; 928 perf = server.performanceDuringStartup;
915 929
916 int requestCount = perf.requestCount; 930 int requestCount = perf.requestCount;
917 double averageLatency = 931 int averageLatency =
918 requestCount > 0 ? (perf.requestLatency / requestCount) : 0.0; 932 requestCount > 0 ? (perf.requestLatency / requestCount) : 0;
919 int maximumLatency = perf.maxLatency; 933 int maximumLatency = perf.maxLatency;
920 double slowRequestPercent = 934 double slowRequestPercent =
921 requestCount > 0 ? (perf.slowRequestCount / requestCount) : 0.0; 935 requestCount > 0 ? (perf.slowRequestCount / requestCount) : 0.0;
922 936
923 buf.write('<table>'); 937 buf.write('<table>');
924 writeRow([printInteger(requestCount), 'requests'], 938 writeRow([printInteger(requestCount), 'requests'],
925 classes: ["right", null]); 939 classes: ["right", null]);
926 writeRow([printMilliseconds(averageLatency), 'average latency'], 940 writeRow([printMilliseconds(averageLatency), 'average latency'],
927 classes: ["right", null]); 941 classes: ["right", null]);
928 writeRow([printMilliseconds(maximumLatency), 'maximum latency'], 942 writeRow([printMilliseconds(maximumLatency), 'maximum latency'],
929 classes: ["right", null]); 943 classes: ["right", null]);
930 writeRow([printPercentage(slowRequestPercent), '> 150 ms latency'], 944 writeRow([printPercentage(slowRequestPercent), '> 150 ms latency'],
931 classes: ["right", null]); 945 classes: ["right", null]);
932 buf.write('</table>'); 946 buf.write('</table>');
933 947
934 if (server.performanceAfterStartup != null) { 948 if (server.performanceAfterStartup != null) {
935 int startupTime = 949 int startupTime =
936 server.performanceAfterStartup.startTime - perf.startTime; 950 server.performanceAfterStartup.startTime - perf.startTime;
937 p('(initial analysis time: ${printMilliseconds(startupTime)})'); 951 buf.writeln(
952 writeOption('Initial analysis time', printMilliseconds(startupTime)));
938 } 953 }
939 buf.write('</div>'); 954 buf.write('</div>');
940 955
941 buf.write('</div>'); 956 buf.write('</div>');
942 } 957 }
943 } 958 }
944 959
945 String writeOption(String name, dynamic value) { 960 String writeOption(String name, dynamic value) {
946 return '$name: <code>$value</code><br> '; 961 return '$name: <code>$value</code><br> ';
947 } 962 }
948 963
949 String get _sdkVersion { 964 String get _sdkVersion {
950 String version = Platform.version; 965 String version = Platform.version;
951 if (version.contains(' ')) { 966 if (version.contains(' ')) {
952 version = version.substring(0, version.indexOf(' ')); 967 version = version.substring(0, version.indexOf(' '));
953 } 968 }
954 return version; 969 return version;
955 } 970 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/lib/src/analysis_server.dart ('k') | pkg/analysis_server/lib/src/status/pages.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698