| 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 b22a887b4a3c2ae9bf37eac9c779e770783b82a4..564914e8689aa0f49cfbf5dd0ee270f04add4fde 100644
|
| --- a/runtime/observatory/lib/src/service/object.dart
|
| +++ b/runtime/observatory/lib/src/service/object.dart
|
| @@ -4,8 +4,7 @@
|
|
|
| part of service;
|
|
|
| -/// A [ServiceObject] is an object known to the VM service and is tied
|
| -/// to an owning [Isolate].
|
| +/// A [ServiceObject] represents a persistent object within the vm.
|
| abstract class ServiceObject extends Observable {
|
| static int LexicalSortName(ServiceObject o1, ServiceObject o2) {
|
| return o1.name.compareTo(o2.name);
|
| @@ -90,9 +89,6 @@ abstract class ServiceObject extends Observable {
|
| !isMirrorReference && !isWeakProperty && !isClosure);
|
| }
|
|
|
| - /// The complete service url of this object.
|
| - @reflectable String get link => _owner.relativeLink(_id);
|
| -
|
| /// Has this object been fully loaded?
|
| bool get loaded => _loaded;
|
| bool _loaded = false;
|
| @@ -282,11 +278,6 @@ abstract class ServiceObject extends Observable {
|
|
|
| // Updates internal state from [map]. [map] can be a reference.
|
| void _update(ObservableMap map, bool mapIsRef);
|
| -
|
| - String relativeLink(String id) {
|
| - assert(id != null);
|
| - return "${link}/${id}";
|
| - }
|
| }
|
|
|
| abstract class Coverage {
|
| @@ -294,7 +285,6 @@ abstract class Coverage {
|
| ServiceObjectOwner get owner;
|
| String get type;
|
| VM get vm;
|
| - String relativeLink(String id);
|
|
|
| /// Default handler for coverage data.
|
| void processCoverageData(List coverageData) {
|
| @@ -329,9 +319,6 @@ abstract class ServiceObjectOwner extends ServiceObject {
|
| /// The result may come from the cache. The result will not necessarily
|
| /// be [loaded].
|
| ServiceObject getFromMap(ObservableMap map);
|
| -
|
| - /// Creates a link to [id] relative to [this].
|
| - String relativeLink(String id);
|
| }
|
|
|
| /// State for a VM being inspected.
|
| @@ -341,9 +328,6 @@ abstract class VM extends ServiceObjectOwner {
|
|
|
| @reflectable Iterable<Isolate> get isolates => _isolateCache.values;
|
|
|
| - @reflectable String get link => '$id';
|
| - @reflectable String relativeLink(String id) => '$id';
|
| -
|
| @observable String version = 'unknown';
|
| @observable String targetCPU;
|
| @observable int architectureBits;
|
| @@ -450,42 +434,6 @@ abstract class VM extends ServiceObjectOwner {
|
| });
|
| }
|
|
|
| - Future<ServiceObject> getDeprecated(String id) {
|
| - assert(id.startsWith('/') == false);
|
| - // Isolates are handled specially, since they can cache sub-objects.
|
| - if (id.startsWith(_isolatesPrefix)) {
|
| - String isolateId = _parseIsolateId(id);
|
| - String objectId = _parseObjectId(id);
|
| - return getIsolate(isolateId).then((isolate) {
|
| - if (isolate == null) {
|
| - // The isolate does not exist. Return the VM object instead.
|
| - //
|
| - // TODO(turnidge): Generate a service error?
|
| - return this;
|
| - }
|
| - if (objectId == null) {
|
| - return isolate.reload();
|
| - } else {
|
| - return isolate.getDeprecated(objectId);
|
| - }
|
| - });
|
| - }
|
| -
|
| - var obj = _cache[id];
|
| - if (obj != null) {
|
| - return obj.reload();
|
| - }
|
| -
|
| - // Cache miss. Get the object from the vm directly.
|
| - return _getAsMapDeprecated(id).then((ObservableMap map) {
|
| - var obj = new ServiceObject._fromMap(this, map);
|
| - if (obj.canCache) {
|
| - _cache.putIfAbsent(id, () => obj);
|
| - }
|
| - return obj;
|
| - });
|
| - }
|
| -
|
| dynamic _reviver(dynamic key, dynamic value) {
|
| return value;
|
| }
|
| @@ -527,31 +475,6 @@ abstract class VM extends ServiceObjectOwner {
|
| return new Future.value(map);
|
| }
|
|
|
| - /// Gets [id] as an [ObservableMap] from the service directly. If
|
| - /// an error occurs, the future is completed as an error with a
|
| - /// ServiceError or ServiceException. Therefore any chained then() calls
|
| - /// will only receive a map encoding a valid ServiceObject.
|
| - Future<ObservableMap> _getAsMapDeprecated(String id) {
|
| - return getStringDeprecated(id).then((response) {
|
| - var map = _parseJSON(response);
|
| - if (Tracer.current != null) {
|
| - Tracer.current.trace("Received response for ${id}", map:map);
|
| - }
|
| - return _processMap(map);
|
| - }).catchError((error) {
|
| - // ServiceError, forward to VM's ServiceError stream.
|
| - errors.add(error);
|
| - return new Future.error(error);
|
| - }, test: (e) => e is ServiceError).catchError((exception) {
|
| - // ServiceException, forward to VM's ServiceException stream.
|
| - exceptions.add(exception);
|
| - return new Future.error(exception);
|
| - }, test: (e) => e is ServiceException);
|
| - }
|
| -
|
| - /// Get [id] as a [String] from the service directly. See [getAsMap].
|
| - Future<String> getStringDeprecated(String id);
|
| -
|
| // Implemented in subclass.
|
| Future<String> invokeRpcRaw(String method, Map params);
|
|
|
| @@ -592,6 +515,10 @@ abstract class VM extends ServiceObjectOwner {
|
| return invokeRpcNoUpgrade('getVM', {});
|
| }
|
|
|
| + Future<ServiceObject> getFlagList() {
|
| + return invokeRpc('getFlagList', {});
|
| + }
|
| +
|
| /// Force the VM to disconnect.
|
| void disconnect();
|
| /// Completes when the VM first connects.
|
| @@ -754,8 +681,7 @@ class HeapSnapshot {
|
| var result = [];
|
| for (var v in graph.getMostRetained(classId: classId, limit: limit)) {
|
| var address = v.addressForWordSize(isolate.vm.architectureBits ~/ 8);
|
| - result.add(isolate.getDeprecated(
|
| - 'address/${address.toRadixString(16)}?ref=true').then((obj) {
|
| + result.add(isolate.getObjectByAddress(address.toRadixString(16)).then((obj) {
|
| obj.retainedSize = v.retainedSize;
|
| return new Future(() => obj);
|
| }));
|
| @@ -772,8 +698,6 @@ class Isolate extends ServiceObjectOwner with Coverage {
|
| @reflectable Isolate get isolate => this;
|
| @observable ObservableMap counters = new ObservableMap();
|
|
|
| - String get link => '/${_id}';
|
| -
|
| @observable ServiceEvent pauseEvent = null;
|
| bool get _isPaused => pauseEvent != null;
|
|
|
| @@ -789,9 +713,6 @@ class Isolate extends ServiceObjectOwner with Coverage {
|
| assert(owner is VM);
|
| }
|
|
|
| - /// Creates a link to [id] relative to [this].
|
| - @reflectable String relativeLink(String id) => '/${this.id}/$id';
|
| -
|
| static const TAG_ROOT_ID = 'code/tag-0';
|
|
|
| /// Returns the Code object for the root tag.
|
| @@ -890,25 +811,8 @@ class Isolate extends ServiceObjectOwner with Coverage {
|
| return obj;
|
| }
|
|
|
| - Future<ServiceObject> getDeprecated(String id) {
|
| - // Do not allow null ids or empty ids.
|
| - assert(id != null && id != '');
|
| - var obj = _cache[id];
|
| - if (obj != null) {
|
| - return obj.reload();
|
| - }
|
| - // Cache miss. Get the object from the vm directly.
|
| - return vm._getAsMapDeprecated(relativeLink(id)).then((ObservableMap map) {
|
| - var obj = new ServiceObject._fromMap(this, map);
|
| - if (obj.canCache) {
|
| - _cache.putIfAbsent(id, () => obj);
|
| - }
|
| - return obj;
|
| - });
|
| - }
|
| -
|
| Future<ObservableMap> invokeRpcNoUpgrade(String method, Map params) {
|
| - params['isolate'] = id;
|
| + params['isolateId'] = id;
|
| return vm.invokeRpcNoUpgrade(method, params);
|
| }
|
|
|
| @@ -1327,6 +1231,14 @@ class Isolate extends ServiceObjectOwner with Coverage {
|
| return invokeRpc('getInstances', params);
|
| }
|
|
|
| + Future<ServiceObject> getObjectByAddress(String address, [bool ref=true]) {
|
| + Map params = {
|
| + 'address': address,
|
| + 'ref': ref,
|
| + };
|
| + return invokeRpc('getObjectByAddress', params);
|
| + }
|
| +
|
| final ObservableMap<String, ServiceMetric> dartMetrics =
|
| new ObservableMap<String, ServiceMetric>();
|
|
|
|
|