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

Side by Side Diff: runtime/bin/vmservice/client/lib/src/service/service.dart

Issue 204983008: Rework how ServiceObjects are created and cached in Observatory. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: edits Created 6 years, 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 part of service;
6
7 /// Recursively upgrades all [ServiceObject]s inside [collection] which must
8 /// be an [ObservableMap] or an [ObservableList]. Upgraded elements will be
9 /// associated with [vm] and [isolate].
10 void upgradeCollection(collection, VM vm, Isolate isolate) {
11 if (collection is ObservableMap) {
12 _upgradeObservableMap(collection, vm, isolate);
13 } else if (collection is ObservableList) {
14 _upgradeObservableList(collection, vm, isolate);
15 }
16 }
17
18 void _upgradeObservableMap(ObservableMap map, VM vm, Isolate isolate) {
19 map.forEach((k, v) {
20 if ((v is ObservableMap) && ServiceObject.isServiceMap(v)) {
21 map[k] = v = _upgradeToServiceObject(vm, isolate, v);
22 } else if (v is ObservableList) {
23 _upgradeObservableList(v, vm, isolate);
24 } else if (v is ObservableMap) {
25 _upgradeObservableMap(v, vm, isolate);
26 }
27 });
28 }
29
30 void _upgradeObservableList(ObservableList list, VM vm, Isolate isolate) {
31 for (var i = 0; i < list.length; i++) {
32 var v = list[i];
33 if ((v is ObservableMap) && ServiceObject.isServiceMap(v)) {
34 list[i] = _upgradeToServiceObject(vm, isolate, v);
35 } else if (v is ObservableList) {
36 _upgradeObservableList(v, vm, isolate);
37 } else if (v is ObservableMap) {
38 _upgradeObservableMap(v, vm, isolate);
39 }
40 }
41 }
42
43 /// Upgrades response ([m]) from [vm] and [isolate] to a [ServiceObject].
44 /// This acts like a factory which consumes an ObservableMap and returns
45 /// a fully upgraded ServiceObject.
46 ServiceObject _upgradeToServiceObject(VM vm, Isolate isolate, ObservableMap m) {
47 if (m == null) {
48 return null;
49 }
50 if (!ServiceObject.isServiceMap(m)) {
51 Logger.root.severe("Malformed service object: $m");
52 }
53 assert(ServiceObject.isServiceMap(m));
54 var type = ServiceObject.stripRef(m['type']);
55 switch (type) {
56 case 'Error':
57 if (isolate != null) {
58 return new ServiceError.fromMap(isolate, m);
59 } else {
60 return new ServiceError.fromMap(vm, m);
61 }
62 break;
63 case 'Script':
64 return isolate.scripts.putIfAbsent(m);
65 case 'Code':
66 return isolate.codes.putIfAbsent(m);
67 case 'Isolate':
68 return vm.isolates.getIsolateFromMap(m);
69 case 'Class':
70 return isolate.classes.putIfAbsent(m);
71 case 'Function':
72 return isolate.functions.putIfAbsent(m);
73 case 'VM':
74 return vm.update(m);
75 }
76 return new ServiceMap.fromMap(isolate, m);
77 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698