| OLD | NEW |
| 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:collection'; | 7 import 'dart:collection'; |
| 8 import 'dart:convert'; | 8 import 'dart:convert'; |
| 9 import 'dart:io'; | 9 import 'dart:io'; |
| 10 import 'dart:math'; | 10 import 'dart:math'; |
| (...skipping 1642 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1653 } | 1653 } |
| 1654 | 1654 |
| 1655 void _returnMemoryUsage(HttpRequest request) { | 1655 void _returnMemoryUsage(HttpRequest request) { |
| 1656 _writeResponse(request, (StringBuffer buffer) { | 1656 _writeResponse(request, (StringBuffer buffer) { |
| 1657 _writePage(buffer, 'Analysis Server - Memory Use', [], | 1657 _writePage(buffer, 'Analysis Server - Memory Use', [], |
| 1658 (StringBuffer buffer) { | 1658 (StringBuffer buffer) { |
| 1659 AnalysisServer server = _server.analysisServer; | 1659 AnalysisServer server = _server.analysisServer; |
| 1660 MemoryUseData data = new MemoryUseData(); | 1660 MemoryUseData data = new MemoryUseData(); |
| 1661 data.processAnalysisServer(server); | 1661 data.processAnalysisServer(server); |
| 1662 Map<Type, Set> instances = data.instances; | 1662 Map<Type, Set> instances = data.instances; |
| 1663 List<Type> types = instances.keys.toList(); | 1663 List<Type> instanceTypes = instances.keys.toList(); |
| 1664 types.sort((Type left, Type right) => | 1664 instanceTypes.sort((Type left, Type right) => |
| 1665 left.toString().compareTo(right.toString())); |
| 1666 Map<Type, Set> ownerMap = data.ownerMap; |
| 1667 List<Type> ownerTypes = ownerMap.keys.toList(); |
| 1668 ownerTypes.sort((Type left, Type right) => |
| 1665 left.toString().compareTo(right.toString())); | 1669 left.toString().compareTo(right.toString())); |
| 1666 | 1670 |
| 1667 buffer.write('<h3>Instance Counts (reachable from contexts)</h3>'); | 1671 _writeTwoColumns(buffer, (StringBuffer buffer) { |
| 1668 buffer.write('<table>'); | 1672 buffer.write('<h3>Instance Counts (reachable from contexts)</h3>'); |
| 1669 _writeRow(buffer, ['Count', 'Class name'], header: true); | |
| 1670 types.forEach((Type type) { | |
| 1671 _writeRow(buffer, [instances[type].length, type], | |
| 1672 classes: ['right', null]); | |
| 1673 }); | |
| 1674 buffer.write('</table>'); | |
| 1675 | |
| 1676 void writeCountMap(String title, Map<Type, int> counts) { | |
| 1677 List<Type> classNames = counts.keys.toList(); | |
| 1678 classNames.sort((Type left, Type right) => | |
| 1679 left.toString().compareTo(right.toString())); | |
| 1680 | |
| 1681 buffer.write('<h3>$title</h3>'); | |
| 1682 buffer.write('<table>'); | 1673 buffer.write('<table>'); |
| 1683 _writeRow(buffer, ['Count', 'Class name'], header: true); | 1674 _writeRow(buffer, ['Count', 'Class name'], header: true); |
| 1684 classNames.forEach((Type type) { | 1675 instanceTypes.forEach((Type type) { |
| 1685 _writeRow(buffer, [counts[type], type], classes: ['right', null]); | 1676 _writeRow(buffer, [instances[type].length, type], |
| 1677 classes: ['right', null]); |
| 1686 }); | 1678 }); |
| 1687 buffer.write('</table>'); | 1679 buffer.write('</table>'); |
| 1688 } | |
| 1689 writeCountMap('Directly Held AST Nodes', data.directNodeCounts); | |
| 1690 writeCountMap('Indirectly Held AST Nodes', data.indirectNodeCounts); | |
| 1691 writeCountMap('Directly Held Elements', data.elementCounts); | |
| 1692 | 1680 |
| 1693 buffer.write('<h3>Other Data</h3>'); | 1681 buffer.write( |
| 1694 buffer.write('<p>'); | 1682 '<h3>Ownership (which classes of objects hold on to others)</h3>')
; |
| 1695 buffer.write(data.uniqueTargetedResults.length); | 1683 buffer.write('<table>'); |
| 1696 buffer.write(' non-equal TargetedResults</p>'); | 1684 _writeRow(buffer, ['Referenced Type', 'Referencing Types'], |
| 1697 buffer.write('<p>'); | 1685 header: true); |
| 1698 buffer.write(data.uniqueLSUs.length); | 1686 ownerTypes.forEach((Type type) { |
| 1699 buffer.write(' non-equal LibrarySpecificUnits</p>'); | 1687 List<String> referencingTypes = |
| 1688 ownerMap[type].map((Type type) => type.toString()).toList(); |
| 1689 referencingTypes.sort(); |
| 1690 _writeRow(buffer, [type, referencingTypes.join('<br>')]); |
| 1691 }); |
| 1692 buffer.write('</table>'); |
| 1693 |
| 1694 buffer.write('<h3>Other Data</h3>'); |
| 1695 buffer.write('<p>'); |
| 1696 buffer.write(data.uniqueTargetedResults.length); |
| 1697 buffer.write(' non-equal TargetedResults</p>'); |
| 1698 buffer.write('<p>'); |
| 1699 buffer.write(data.uniqueLSUs.length); |
| 1700 buffer.write(' non-equal LibrarySpecificUnits</p>'); |
| 1701 int count = data.mismatchedTargets.length; |
| 1702 buffer.write('<p>'); |
| 1703 buffer.write(count); |
| 1704 buffer.write(' mismatched targets</p>'); |
| 1705 if (count < 100) { |
| 1706 for (AnalysisTarget target in data.mismatchedTargets) { |
| 1707 buffer.write(target); |
| 1708 buffer.write('<br>'); |
| 1709 } |
| 1710 } |
| 1711 }, (StringBuffer buffer) { |
| 1712 void writeCountMap(String title, Map<Type, int> counts) { |
| 1713 List<Type> classNames = counts.keys.toList(); |
| 1714 classNames.sort((Type left, Type right) => |
| 1715 left.toString().compareTo(right.toString())); |
| 1716 |
| 1717 buffer.write('<h3>$title</h3>'); |
| 1718 buffer.write('<table>'); |
| 1719 _writeRow(buffer, ['Count', 'Class name'], header: true); |
| 1720 classNames.forEach((Type type) { |
| 1721 _writeRow(buffer, [counts[type], type], classes: ['right', null]); |
| 1722 }); |
| 1723 buffer.write('</table>'); |
| 1724 } |
| 1725 writeCountMap('Directly Held AST Nodes', data.directNodeCounts); |
| 1726 writeCountMap('Indirectly Held AST Nodes', data.indirectNodeCounts); |
| 1727 writeCountMap('Directly Held Elements', data.elementCounts); |
| 1728 }); |
| 1700 }); | 1729 }); |
| 1701 }); | 1730 }); |
| 1702 } | 1731 } |
| 1703 | 1732 |
| 1704 void _returnOverlayContents(HttpRequest request) { | 1733 void _returnOverlayContents(HttpRequest request) { |
| 1705 String path = request.requestedUri.queryParameters[PATH_PARAM]; | 1734 String path = request.requestedUri.queryParameters[PATH_PARAM]; |
| 1706 if (path == null) { | 1735 if (path == null) { |
| 1707 return _returnFailure(request, 'Query parameter $PATH_PARAM required'); | 1736 return _returnFailure(request, 'Query parameter $PATH_PARAM required'); |
| 1708 } | 1737 } |
| 1709 String contents = _overlayContents[path]; | 1738 String contents = _overlayContents[path]; |
| (...skipping 630 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2340 buffer.write( | 2369 buffer.write( |
| 2341 'h3 {background-color: #DDDDDD; margin-top: 0em; margin-bottom: 0em;}'); | 2370 'h3 {background-color: #DDDDDD; margin-top: 0em; margin-bottom: 0em;}'); |
| 2342 buffer.write('p {margin-top: 0.5em; margin-bottom: 0.5em;}'); | 2371 buffer.write('p {margin-top: 0.5em; margin-bottom: 0.5em;}'); |
| 2343 buffer.write( | 2372 buffer.write( |
| 2344 'p.commentary {margin-top: 1em; margin-bottom: 1em; margin-left: 2em; fo
nt-style: italic;}'); | 2373 'p.commentary {margin-top: 1em; margin-bottom: 1em; margin-left: 2em; fo
nt-style: italic;}'); |
| 2345 // response.write('span.error {text-decoration-line: underline; text-decorati
on-color: red; text-decoration-style: wavy;}'); | 2374 // response.write('span.error {text-decoration-line: underline; text-decorati
on-color: red; text-decoration-style: wavy;}'); |
| 2346 buffer.write( | 2375 buffer.write( |
| 2347 'table.column {border: 0px solid black; width: 100%; table-layout: fixed
;}'); | 2376 'table.column {border: 0px solid black; width: 100%; table-layout: fixed
;}'); |
| 2348 buffer.write('td.column {vertical-align: top; width: 50%;}'); | 2377 buffer.write('td.column {vertical-align: top; width: 50%;}'); |
| 2349 buffer.write('td.right {text-align: right;}'); | 2378 buffer.write('td.right {text-align: right;}'); |
| 2350 buffer.write('th {text-align: left;}'); | 2379 buffer.write('th {text-align: left; vertical-align:top;}'); |
| 2380 buffer.write('tr {vertical-align:top;}'); |
| 2351 buffer.write('</style>'); | 2381 buffer.write('</style>'); |
| 2352 buffer.write('</head>'); | 2382 buffer.write('</head>'); |
| 2353 | 2383 |
| 2354 buffer.write('<body>'); | 2384 buffer.write('<body>'); |
| 2355 buffer.write( | 2385 buffer.write( |
| 2356 '<h2>$title <small><small>(as of $time on $date)</small></small></h2>'); | 2386 '<h2>$title <small><small>(as of $time on $date)</small></small></h2>'); |
| 2357 if (subtitles != null && subtitles.isNotEmpty) { | 2387 if (subtitles != null && subtitles.isNotEmpty) { |
| 2358 buffer.write('<blockquote>'); | 2388 buffer.write('<blockquote>'); |
| 2359 bool first = true; | 2389 bool first = true; |
| 2360 for (String subtitle in subtitles) { | 2390 for (String subtitle in subtitles) { |
| (...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2709 */ | 2739 */ |
| 2710 static String makeLink( | 2740 static String makeLink( |
| 2711 String path, Map<String, String> params, String innerHtml, | 2741 String path, Map<String, String> params, String innerHtml, |
| 2712 [bool hasError = false]) { | 2742 [bool hasError = false]) { |
| 2713 Uri uri = new Uri(path: path, queryParameters: params); | 2743 Uri uri = new Uri(path: path, queryParameters: params); |
| 2714 String href = HTML_ESCAPE.convert(uri.toString()); | 2744 String href = HTML_ESCAPE.convert(uri.toString()); |
| 2715 String classAttribute = hasError ? ' class="error"' : ''; | 2745 String classAttribute = hasError ? ' class="error"' : ''; |
| 2716 return '<a href="$href"$classAttribute>$innerHtml</a>'; | 2746 return '<a href="$href"$classAttribute>$innerHtml</a>'; |
| 2717 } | 2747 } |
| 2718 } | 2748 } |
| OLD | NEW |