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

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

Issue 2157613002: Keep track of where objects are being referenced in memory status page (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 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 | pkg/analysis_server/lib/src/status/memory_use.dart » ('j') | 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: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
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
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
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 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analysis_server/lib/src/status/memory_use.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698