| Index: runtime/bin/vmservice/client/observatory/packages/observatory/src/observatory/isolate_manager.dart
|
| diff --git a/runtime/bin/vmservice/client/observatory/packages/observatory/src/observatory/isolate_manager.dart b/runtime/bin/vmservice/client/observatory/packages/observatory/src/observatory/isolate_manager.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b35dddabd0d227f0c1299ab9a268d82db8a26d70
|
| --- /dev/null
|
| +++ b/runtime/bin/vmservice/client/observatory/packages/observatory/src/observatory/isolate_manager.dart
|
| @@ -0,0 +1,38 @@
|
| +part of observatory;
|
| +
|
| +class IsolateManager extends ObservableMixin {
|
| + ObservatoryApplication _application;
|
| + ObservatoryApplication get application => _application;
|
| +
|
| + @observable final Map<int, Isolate> isolates =
|
| + toObservable(new Map<int, Isolate>());
|
| +
|
| + static bool _foundIsolateInMembers(int id, List<Map> members) {
|
| + return members.any((E) => E['id'] == id);
|
| + }
|
| +
|
| + void _updateIsolates(List<Map> members) {
|
| + // Find dead isolates.
|
| + var deadIsolates = [];
|
| + isolates.forEach((k, v) {
|
| + if (!_foundIsolateInMembers(k, members)) {
|
| + deadIsolates.add(k);
|
| + }
|
| + });
|
| + // Remove them.
|
| + deadIsolates.forEach((k) {
|
| + print('Removing ${isolates[k]}');
|
| + isolates.remove(k);
|
| + });
|
| + // Add new isolates.
|
| + members.forEach((k) {
|
| + var id = k['id'];
|
| + var name = k['name'];
|
| + if (isolates[id] == null) {
|
| + var isolate = new Isolate(id, name);
|
| + print('Adding $isolate');
|
| + isolates[id] = isolate;
|
| + }
|
| + });
|
| + }
|
| +}
|
|
|