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

Unified 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 side-by-side diff with in-line comments
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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analysis_server/lib/src/status/get_handler.dart
diff --git a/pkg/analysis_server/lib/src/status/get_handler.dart b/pkg/analysis_server/lib/src/status/get_handler.dart
index 9a7aadd46f525ef2edc419f91d6b20f1d9d3f788..13a149a3e01d0e071ae0f22bb07fe46173ab74a6 100644
--- a/pkg/analysis_server/lib/src/status/get_handler.dart
+++ b/pkg/analysis_server/lib/src/status/get_handler.dart
@@ -1660,43 +1660,72 @@ class GetHandler {
MemoryUseData data = new MemoryUseData();
data.processAnalysisServer(server);
Map<Type, Set> instances = data.instances;
- List<Type> types = instances.keys.toList();
- types.sort((Type left, Type right) =>
+ List<Type> instanceTypes = instances.keys.toList();
+ instanceTypes.sort((Type left, Type right) =>
+ left.toString().compareTo(right.toString()));
+ Map<Type, Set> ownerMap = data.ownerMap;
+ List<Type> ownerTypes = ownerMap.keys.toList();
+ ownerTypes.sort((Type left, Type right) =>
left.toString().compareTo(right.toString()));
- buffer.write('<h3>Instance Counts (reachable from contexts)</h3>');
- buffer.write('<table>');
- _writeRow(buffer, ['Count', 'Class name'], header: true);
- types.forEach((Type type) {
- _writeRow(buffer, [instances[type].length, type],
- classes: ['right', null]);
- });
- buffer.write('</table>');
-
- void writeCountMap(String title, Map<Type, int> counts) {
- List<Type> classNames = counts.keys.toList();
- classNames.sort((Type left, Type right) =>
- left.toString().compareTo(right.toString()));
-
- buffer.write('<h3>$title</h3>');
+ _writeTwoColumns(buffer, (StringBuffer buffer) {
+ buffer.write('<h3>Instance Counts (reachable from contexts)</h3>');
buffer.write('<table>');
_writeRow(buffer, ['Count', 'Class name'], header: true);
- classNames.forEach((Type type) {
- _writeRow(buffer, [counts[type], type], classes: ['right', null]);
+ instanceTypes.forEach((Type type) {
+ _writeRow(buffer, [instances[type].length, type],
+ classes: ['right', null]);
});
buffer.write('</table>');
- }
- writeCountMap('Directly Held AST Nodes', data.directNodeCounts);
- writeCountMap('Indirectly Held AST Nodes', data.indirectNodeCounts);
- writeCountMap('Directly Held Elements', data.elementCounts);
- buffer.write('<h3>Other Data</h3>');
- buffer.write('<p>');
- buffer.write(data.uniqueTargetedResults.length);
- buffer.write(' non-equal TargetedResults</p>');
- buffer.write('<p>');
- buffer.write(data.uniqueLSUs.length);
- buffer.write(' non-equal LibrarySpecificUnits</p>');
+ buffer.write(
+ '<h3>Ownership (which classes of objects hold on to others)</h3>');
+ buffer.write('<table>');
+ _writeRow(buffer, ['Referenced Type', 'Referencing Types'],
+ header: true);
+ ownerTypes.forEach((Type type) {
+ List<String> referencingTypes =
+ ownerMap[type].map((Type type) => type.toString()).toList();
+ referencingTypes.sort();
+ _writeRow(buffer, [type, referencingTypes.join('<br>')]);
+ });
+ buffer.write('</table>');
+
+ buffer.write('<h3>Other Data</h3>');
+ buffer.write('<p>');
+ buffer.write(data.uniqueTargetedResults.length);
+ buffer.write(' non-equal TargetedResults</p>');
+ buffer.write('<p>');
+ buffer.write(data.uniqueLSUs.length);
+ buffer.write(' non-equal LibrarySpecificUnits</p>');
+ int count = data.mismatchedTargets.length;
+ buffer.write('<p>');
+ buffer.write(count);
+ buffer.write(' mismatched targets</p>');
+ if (count < 100) {
+ for (AnalysisTarget target in data.mismatchedTargets) {
+ buffer.write(target);
+ buffer.write('<br>');
+ }
+ }
+ }, (StringBuffer buffer) {
+ void writeCountMap(String title, Map<Type, int> counts) {
+ List<Type> classNames = counts.keys.toList();
+ classNames.sort((Type left, Type right) =>
+ left.toString().compareTo(right.toString()));
+
+ buffer.write('<h3>$title</h3>');
+ buffer.write('<table>');
+ _writeRow(buffer, ['Count', 'Class name'], header: true);
+ classNames.forEach((Type type) {
+ _writeRow(buffer, [counts[type], type], classes: ['right', null]);
+ });
+ buffer.write('</table>');
+ }
+ writeCountMap('Directly Held AST Nodes', data.directNodeCounts);
+ writeCountMap('Indirectly Held AST Nodes', data.indirectNodeCounts);
+ writeCountMap('Directly Held Elements', data.elementCounts);
+ });
});
});
}
@@ -2347,7 +2376,8 @@ class GetHandler {
'table.column {border: 0px solid black; width: 100%; table-layout: fixed;}');
buffer.write('td.column {vertical-align: top; width: 50%;}');
buffer.write('td.right {text-align: right;}');
- buffer.write('th {text-align: left;}');
+ buffer.write('th {text-align: left; vertical-align:top;}');
+ buffer.write('tr {vertical-align:top;}');
buffer.write('</style>');
buffer.write('</head>');
« 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