Chromium Code Reviews| Index: runtime/observatory/lib/src/service/object.dart |
| diff --git a/runtime/observatory/lib/src/service/object.dart b/runtime/observatory/lib/src/service/object.dart |
| index 58ef53fefb0b940567960e1500e12d68edc410b9..a58ad9cbebe36d536277fa8071eed682777e8208 100644 |
| --- a/runtime/observatory/lib/src/service/object.dart |
| +++ b/runtime/observatory/lib/src/service/object.dart |
| @@ -238,6 +238,9 @@ abstract class ServiceObject { |
| case 'SourceLocation': |
| obj = new SourceLocation._empty(owner); |
| break; |
| + case '_Thread': |
| + obj = new Thread._empty(owner); |
| + break; |
| case 'UnresolvedSourceLocation': |
| obj = new UnresolvedSourceLocation._empty(owner); |
| break; |
| @@ -1501,6 +1504,9 @@ class Isolate extends ServiceObjectOwner implements M.Isolate { |
| List<ByteData> _chunksInProgress; |
| + List<Thread> get threads => _threads; |
| + List<Thread> _threads = new List<Thread>(); |
| + |
| void _loadHeapSnapshot(ServiceEvent event) { |
| if (_snapshotFetch == null || _snapshotFetch.isClosed) { |
| // No outstanding snapshot request. Presumably another client asked for a |
| @@ -1624,6 +1630,11 @@ class Isolate extends ServiceObjectOwner implements M.Isolate { |
| if (map['extensionRPCs'] != null) { |
| extensionRPCs.addAll(map['extensionRPCs']); |
| } |
| + |
| + List threadsList = map['threads']; |
|
Cutch
2016/12/19 14:46:09
please address all comments. From my previous revi
bkonyi
2016/12/19 16:40:20
Sorry, I had thought I had done this before. Done.
|
| + threadsList.forEach((thread) { |
| + threads.add(thread); |
| + }); |
| } |
| Future<TagProfile> updateTagProfile() { |
| @@ -3056,6 +3067,57 @@ class Sentinel extends ServiceObject implements M.Sentinel { |
| String get shortName => valueAsString; |
| } |
| +class Thread extends ServiceObject implements M.Thread { |
| + M.ThreadKind get kind => _kind; |
| + M.ThreadKind _kind; |
| + List<Zone> get zones => _zones; |
| + List<Zone> _zones = new List<Zone>(); |
| + |
| + Thread._empty(ServiceObjectOwner owner) : super._empty(owner); |
| + |
| + void _update(Map map, bool mapIsRef) { |
| + String kindString = map['kind']; |
| + List zoneList = map['zones']; |
|
Cutch
2016/12/19 14:46:09
use strong mode types here and elsewhere
bkonyi
2016/12/19 16:40:20
Done.
|
| + |
| + switch(kindString) { |
| + case "kUnknownTask": |
| + _kind = M.ThreadKind.kUnknownTask; |
| + break; |
| + case "kMutatorTask": |
| + _kind = M.ThreadKind.kMutatorTask; |
| + break; |
| + case "kCompilerTask": |
| + _kind = M.ThreadKind.kCompilerTask; |
| + break; |
| + case "kSweeperTask": |
| + _kind = M.ThreadKind.kSweeperTask; |
| + break; |
| + case "kMarkerTask": |
| + _kind = M.ThreadKind.kMarkerTask; |
| + break; |
| + case "kFinalizerTask": |
| + _kind = M.ThreadKind.kFinalizerTask; |
| + break; |
| + default: |
| + assert(false); |
| + } |
| + zoneList.forEach((zone) { |
|
Cutch
2016/12/19 14:46:09
This will repeatedly add to the zone list. Follow
bkonyi
2016/12/19 16:40:20
Same as above. Done.
|
| + int capacity = zone['capacity']; |
| + int used = zone['used']; |
| + zones.add(new Zone(capacity, used)); |
| + }); |
| + } |
| +} |
| + |
| +class Zone implements M.Zone { |
| + num get capacity => _capacity; |
| + num _capacity; |
| + num get used => _used; |
| + num _used; |
| + |
| + Zone(this._capacity, this._used); |
| +} |
| + |
| class Field extends HeapObject implements M.Field { |
| // Library or Class. |
| HeapObject dartOwner; |