| 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';
|
|
|