Index: runtime/observatory/lib/src/elements/debugger.dart |
diff --git a/runtime/observatory/lib/src/elements/debugger.dart b/runtime/observatory/lib/src/elements/debugger.dart |
index 10d5a677610cb84ab0c2ca2ae9832b99499e4ebd..28f75139b86b89015130e0aab4edc643a8531012 100644 |
--- a/runtime/observatory/lib/src/elements/debugger.dart |
+++ b/runtime/observatory/lib/src/elements/debugger.dart |
@@ -969,21 +969,59 @@ class IsolateCommand extends DebuggerCommand { |
' isolate <name>\n'; |
} |
+String _isolateRunState(Isolate isolate) { |
+ if (isolate.paused) { |
+ return 'paused'; |
+ } else if (isolate.running) { |
+ return 'running'; |
+ } else if (isolate.idle) { |
+ return 'idle'; |
+ } else { |
+ return 'unknown'; |
+ } |
+} |
+ |
class IsolateListCommand extends DebuggerCommand { |
IsolateListCommand(Debugger debugger) : super(debugger, 'list', []); |
- Future run(List<String> args) { |
+ Future run(List<String> args) async { |
if (debugger.vm == null) { |
debugger.console.print( |
"Internal error: vm has not been set"); |
- return new Future.value(null); |
+ return; |
} |
+ |
+ // Refresh all isolates first. |
+ var pending = []; |
for (var isolate in debugger.vm.isolates) { |
- String current = (isolate == debugger.isolate ? ' *' : ''); |
+ pending.add(isolate.reload()); |
+ } |
+ await Future.wait(pending); |
+ |
+ const maxIdLen = 9; |
+ const maxRunStateLen = 7; |
+ var maxNameLen = 0; |
+ for (var isolate in debugger.vm.isolates) { |
+ if (isolate.name.length > maxNameLen) { |
+ maxNameLen = isolate.name.length; |
+ } |
+ } |
+ |
+ debugger.console.print("${'ID'.padLeft(maxIdLen, ' ')} " |
+ "${'ORIGIN'.padLeft(maxIdLen, ' ')} " |
+ "${'NAME'.padRight(maxNameLen, ' ')} " |
+ "${'STATE'.padRight(maxRunStateLen, ' ')} " |
+ "CURRENT"); |
+ for (var isolate in debugger.vm.isolates) { |
+ String current = (isolate == debugger.isolate ? '*' : ''); |
debugger.console.print( |
- "Isolate ${isolate.number} '${isolate.name}'${current}"); |
+ "${isolate.number.toString().padLeft(maxIdLen, ' ')} " |
+ "${isolate.originNumber.toString().padLeft(maxIdLen, ' ')} " |
+ "${isolate.name.padRight(maxNameLen, ' ')} " |
+ "${_isolateRunState(isolate).padRight(maxRunStateLen, ' ')} " |
+ "${current}"); |
} |
- return new Future.value(null); |
+ debugger.console.newline(); |
} |
String helpShort = 'List all isolates'; |