Index: runtime/bin/vmstats/isolate_list.dart |
=================================================================== |
--- runtime/bin/vmstats/isolate_list.dart (revision 21575) |
+++ runtime/bin/vmstats/isolate_list.dart (working copy) |
@@ -17,6 +17,7 @@ |
static const String NEW_SPACE = 'new_space'; |
static const String OLD_SPACE = 'old_space'; |
static const String STACK_FRAME = 'stack_frame'; |
+ static const String EMPTY_STACK_FRAME = 'empty_stack_frame'; |
static const String STACK_LIMIT = 'stack_limit'; |
static const String STACK_TRACE = 'stack_trace'; |
static const String STACK_TRACE_TITLE = 'stack_trace_title'; |
@@ -58,7 +59,7 @@ |
stacktrace.classes.addAll([STACK_TRACE, HIDDEN]); |
stacktraceCell.children.add(stacktrace); |
- isolateRow.onClick.listen((e) => toggle(isolateRow)); |
+ isolateRow.onClick.listen((e) => toggleRow(isolateRow)); |
updateIsolateDetails(isolate, isolateRow); |
} |
} |
@@ -73,20 +74,28 @@ |
title.text = "Stack Trace"; |
element.children.add(title); |
- var stackIterator = response['stacktrace'].iterator; |
- var i = 0; |
- while (stackIterator.moveNext()) { |
- i++; |
- var frame = stackIterator.current; |
- var frameElement = new DivElement(); |
- frameElement.$dom_className = STACK_FRAME; |
- var text = '$i: ${frame["url"]}:${frame["line"]}: ${frame["function"]}'; |
- var code = frame["code"]; |
- if (code['optimized']) { |
- text = '$text (optimized)'; |
+ var stackTrace = response['stacktrace']; |
+ if (stackTrace.length > 0) { |
+ var stackIterator = response['stacktrace'].iterator; |
+ var i = 0; |
+ while (stackIterator.moveNext()) { |
+ i++; |
+ var frame = stackIterator.current; |
+ var frameElement = new DivElement(); |
+ var text = '$i: ${frame["url"]}:${frame["line"]}: ${frame["function"]}'; |
+ var code = frame["code"]; |
+ if (code['optimized']) { |
+ text = '$text (optimized)'; |
+ } |
+ frameElement.text = text; |
+ frameElement.$dom_className = STACK_FRAME; |
+ element.children.add(frameElement); |
} |
- frameElement.text = text; |
- element.children.add(frameElement); |
+ } else { |
+ DivElement noStack = new DivElement(); |
+ noStack.$dom_className = EMPTY_STACK_FRAME; |
+ noStack.text = "<no stack>"; |
+ element.children.add(noStack); |
} |
} |
@@ -114,12 +123,13 @@ |
(String response) => setStacktrace(stackTrace, response)); |
} |
- void toggle(TableRowElement row) { |
- var details = row.query('.$DETAILS'); |
- details.classes.toggle(VISIBLE); |
- details.classes.toggle(HIDDEN); |
- var stacktrace = row.query('.$ISOLATE_STACKTRACE_COLUMN'); |
- stacktrace.classes.toggle(VISIBLE); |
- stacktrace.classes.toggle(HIDDEN); |
+ void toggleRow(TableRowElement row) { |
+ toggleElement(row.query('.$DETAILS')); |
+ toggleElement(row.query('.$ISOLATE_STACKTRACE_COLUMN')); |
} |
+ |
+ void toggleElement(Element e) { |
+ e.classes.toggle(VISIBLE); |
+ e.classes.toggle(HIDDEN); |
+ } |
} |