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

Side by Side Diff: runtime/bin/vmstats/isolate_list.dart

Issue 18611003: Remove VM Stats (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 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 | Annotate | Revision Log
« no previous file with comments | « runtime/bin/vmstats/favicon.ico ('k') | runtime/bin/vmstats/models.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
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.
4
5 part of dart.vmstats;
6
7 class IsolateList {
8 TableElement _isolateTable;
9
10 static const String DETAILS = 'isolate_details';
11 static const String VISIBLE = 'visible';
12 static const String HIDDEN = 'hidden';
13 static const String ISOLATE_LIST_ITEM = 'isolate_list_item';
14 static const String ISOLATE_DETAILS_COLUMN = 'isolate_details_column';
15 static const String ISOLATE_ROW = 'isolate_row';
16 static const String ISOLATE_STACKTRACE_COLUMN = 'isolate_stacktrace_column';
17 static const String NEW_SPACE = 'new_space';
18 static const String OLD_SPACE = 'old_space';
19 static const String STACK_FRAME = 'stack_frame';
20 static const String EMPTY_STACK_FRAME = 'empty_stack_frame';
21 static const String STACK_LIMIT = 'stack_limit';
22 static const String STACK_TRACE = 'stack_trace';
23 static const String STACK_TRACE_TITLE = 'stack_trace_title';
24
25 IsolateList(this._isolateTable) {}
26
27 void updateList(IsolateListModel model) {
28 var iterator = model.iterator;
29 while (iterator.moveNext()) {
30 var isolate = iterator.current;
31 var isolateId = 'isolate-${isolate.port}';
32 var isolateRow = _isolateTable.query('#$isolateId');
33 if (isolateRow != null) {
34 updateIsolateDetails(isolate, isolateRow);
35 } else {
36 isolateRow = new TableRowElement();
37 isolateRow.$dom_className = ISOLATE_ROW;
38 isolateRow.id = isolateId;
39 _isolateTable.children.add(isolateRow);
40 var detailsCell = new TableCellElement();
41 detailsCell.$dom_className = ISOLATE_DETAILS_COLUMN;
42 isolateRow.children.add(detailsCell);
43 var basicData = new DivElement();
44 basicData.text = isolate.name
45 .replaceAll('\$', ': ') // Split script from isolate, and ...
46 .replaceAll('-', ' '); // ... split name from port number.
47 detailsCell.children.add(basicData);
48
49 // Add isolate details as hidden children.
50 var details = new DivElement();
51 details.classes.addAll([DETAILS, HIDDEN]);
52 detailsCell.children.add(details);
53
54 // Add stacktrace column.
55 var stacktraceCell = new TableCellElement();
56 stacktraceCell.classes.addAll([ISOLATE_STACKTRACE_COLUMN, HIDDEN]);
57 isolateRow.children.add(stacktraceCell);
58 var stacktrace = new DivElement();
59 stacktrace.classes.addAll([STACK_TRACE, HIDDEN]);
60 stacktraceCell.children.add(stacktrace);
61
62 isolateRow.onClick.listen((e) => toggleRow(isolateRow));
63 updateIsolateDetails(isolate, isolateRow);
64 }
65 }
66 }
67
68 void setStacktrace(DivElement element, String json) {
69 element.children.clear();
70 var response = JSON.parse(json);
71 element.id = response['handle'];
72 var title = new DivElement();
73 title.$dom_className = STACK_TRACE_TITLE;
74 title.text = "Stack Trace";
75 element.children.add(title);
76
77 var stackTrace = response['stacktrace'];
78 if (stackTrace.length > 0) {
79 var stackIterator = response['stacktrace'].iterator;
80 var i = 0;
81 while (stackIterator.moveNext()) {
82 i++;
83 var frame = stackIterator.current;
84 var frameElement = new DivElement();
85 var text = '$i: ${frame["url"]}:${frame["line"]}: ${frame["function"]}';
86 var code = frame["code"];
87 if (code['optimized']) {
88 text = '$text (optimized)';
89 }
90 frameElement.text = text;
91 frameElement.$dom_className = STACK_FRAME;
92 element.children.add(frameElement);
93 }
94 } else {
95 DivElement noStack = new DivElement();
96 noStack.$dom_className = EMPTY_STACK_FRAME;
97 noStack.text = "<no stack>";
98 element.children.add(noStack);
99 }
100 }
101
102 Element findOrAddChild(DivElement parent, String className) {
103 var child = parent.query('.$className');
104 if (child == null) {
105 child = new DivElement();
106 child.$dom_className = className;
107 parent.children.add(child);
108 }
109 return child;
110 }
111
112 void updateIsolateDetails(Isolate isolate, TableRowElement row) {
113 var details = row.query('.$DETAILS');
114 var newSpace = findOrAddChild(details, NEW_SPACE);
115 newSpace.text = 'New space: ${isolate.newSpace.used}K';
116 var oldSpace = findOrAddChild(details, OLD_SPACE);
117 oldSpace.text = 'Old space: ${isolate.oldSpace.used}K';
118 var stackLimit = findOrAddChild(details, STACK_LIMIT);
119 stackLimit.text =
120 'Stack limit: ${(isolate.stackLimit.abs() / 1000000).round()}M';
121 var stackTrace = findOrAddChild(row, ISOLATE_STACKTRACE_COLUMN);
122 HttpRequest.getString('/isolate/${isolate.handle}/stacktrace').then(
123 (String response) => setStacktrace(stackTrace, response));
124 }
125
126 void toggleRow(TableRowElement row) {
127 toggleElement(row.query('.$DETAILS'));
128 toggleElement(row.query('.$ISOLATE_STACKTRACE_COLUMN'));
129 }
130
131 void toggleElement(Element e) {
132 e.classes.toggle(VISIBLE);
133 e.classes.toggle(HIDDEN);
134 }
135 }
OLDNEW
« no previous file with comments | « runtime/bin/vmstats/favicon.ico ('k') | runtime/bin/vmstats/models.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698