Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(609)

Unified Diff: runtime/bin/vmservice/observatory/lib/src/service/object.dart

Issue 560503002: Add support for TokenStream, LocalVarDescriptors, and PcDescriptors to service lib and generic obje… (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/bin/vmservice/observatory/lib/src/elements/service_view.dart ('k') | runtime/vm/object.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/bin/vmservice/observatory/lib/src/service/object.dart
diff --git a/runtime/bin/vmservice/observatory/lib/src/service/object.dart b/runtime/bin/vmservice/observatory/lib/src/service/object.dart
index 13198724d3db7843e818d54ee969984f1a628b20..6e75091b97dd27d686067a99d0aead3a03882921 100644
--- a/runtime/bin/vmservice/observatory/lib/src/service/object.dart
+++ b/runtime/bin/vmservice/observatory/lib/src/service/object.dart
@@ -123,6 +123,7 @@ abstract class ServiceObject extends Observable {
}
assert(_isServiceMap(map));
var type = _stripRef(map['type']);
+ var vmType = map['_vmType'] != null ? _stripRef(map['_vmType']) : type;
var obj = null;
assert(type != 'VM');
switch (type) {
@@ -153,6 +154,19 @@ abstract class ServiceObject extends Observable {
case 'Library':
obj = new Library._empty(owner);
break;
+ case 'Object':
+ switch (vmType) {
+ case 'PcDescriptors':
+ obj = new PcDescriptors._empty(owner);
+ break;
+ case 'LocalVarDescriptors':
+ obj = new LocalVarDescriptors._empty(owner);
+ break;
+ case 'TokenStream':
+ obj = new TokenStream._empty(owner);
+ break;
+ }
+ break;
case 'ServiceError':
obj = new ServiceError._empty(owner);
break;
@@ -172,11 +186,11 @@ abstract class ServiceObject extends Observable {
if (_isInstanceType(type) ||
type == 'Sentinel') { // TODO(rmacnak): Separate this out.
obj = new Instance._empty(owner);
- break;
- } else {
- obj = new ServiceMap._empty(owner);
- break;
}
+ break;
+ }
+ if (obj == null) {
+ obj = new ServiceMap._empty(owner);
}
obj.update(map);
return obj;
@@ -1892,7 +1906,6 @@ class CodeTick {
CodeTick(this.address, this.exclusiveTicks, this.inclusiveTicks);
}
-
class PcDescriptor extends Observable {
final int address;
@reflectable final int deoptId;
@@ -1933,6 +1946,101 @@ class PcDescriptor extends Observable {
}
}
+class PcDescriptors extends ServiceObject {
+ @observable Class clazz;
+ @observable int size;
+ bool get canCache => false;
+ bool get immutable => true;
+ @reflectable final List<PcDescriptor> descriptors =
+ new ObservableList<PcDescriptor>();
+
+ PcDescriptors._empty(ServiceObjectOwner owner) : super._empty(owner) {
+ print('created PcDescriptors.');
+ }
+
+ void _update(ObservableMap m, bool mapIsRef) {
+ if (mapIsRef) {
+ return;
+ }
+ _upgradeCollection(m, isolate);
+ clazz = m['class'];
+ size = m['size'];
+ descriptors.clear();
+ for (var descriptor in m['members']) {
+ var address = int.parse(descriptor['pc'], radix:16);
+ var deoptId = descriptor['deoptId'];
+ var tokenPos = descriptor['tokenPos'];
+ var tryIndex = descriptor['tryIndex'];
+ var kind = descriptor['kind'].trim();
+ descriptors.add(
+ new PcDescriptor(address, deoptId, tokenPos, tryIndex, kind));
+ }
+ }
+}
+
+class LocalVarDescriptor extends Observable {
+ @reflectable final String name;
+ @reflectable final int index;
+ @reflectable final int beginPos;
+ @reflectable final int endPos;
+ @reflectable final int scopeId;
+ @reflectable final String kind;
+
+ LocalVarDescriptor(this.name, this.index, this.beginPos, this.endPos,
+ this.scopeId, this.kind);
+}
+
+class LocalVarDescriptors extends ServiceObject {
+ @observable Class clazz;
+ @observable int size;
+ bool get canCache => false;
+ bool get immutable => true;
+ @reflectable final List<LocalVarDescriptor> descriptors =
+ new ObservableList<LocalVarDescriptor>();
+ LocalVarDescriptors._empty(ServiceObjectOwner owner) : super._empty(owner);
+
+ void _update(ObservableMap m, bool mapIsRef) {
+ if (mapIsRef) {
+ return;
+ }
+ _upgradeCollection(m, isolate);
+ clazz = m['class'];
+ size = m['size'];
+ descriptors.clear();
+ for (var descriptor in m['members']) {
+ var name = descriptor['name'];
+ var index = descriptor['index'];
+ var beginPos = descriptor['beginPos'];
+ var endPos = descriptor['endPos'];
+ var scopeId = descriptor['scopeId'];
+ var kind = descriptor['kind'].trim();
+ descriptors.add(
+ new LocalVarDescriptor(name, index, beginPos, endPos, scopeId, kind));
+ }
+ }
+}
+
+class TokenStream extends ServiceObject {
+ @observable Class clazz;
+ @observable int size;
+ bool get canCache => false;
+ bool get immutable => true;
+
+ @observable String privateKey;
+
+ TokenStream._empty(ServiceObjectOwner owner) : super._empty(owner);
+
+ void _update(ObservableMap m, bool mapIsRef) {
+ if (mapIsRef) {
+ return;
+ }
+ _upgradeCollection(m, isolate);
+ clazz = m['class'];
+ size = m['size'];
+ privateKey = m['privateKey'];
+ }
+}
+
class CodeInstruction extends Observable {
@observable final int address;
@observable final String machine;
@@ -2089,8 +2197,6 @@ class Code extends ServiceObject {
@observable ServiceFunction function;
@observable Script script;
@observable bool isOptimized = false;
- String name;
- String vmName;
bool get canCache => true;
bool get immutable => true;
« no previous file with comments | « runtime/bin/vmservice/observatory/lib/src/elements/service_view.dart ('k') | runtime/vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698