OLD | NEW |
| (Empty) |
1 // Copyright (c) 2013, 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 library service_object_view_element; | |
6 | |
7 import 'dart:html'; | |
8 import 'package:logging/logging.dart'; | |
9 import 'package:observatory/service.dart'; | |
10 import 'package:observatory/tracer.dart'; | |
11 import 'package:observatory/elements.dart'; | |
12 import 'package:polymer/polymer.dart'; | |
13 import 'observatory_element.dart'; | |
14 | |
15 @CustomTag('service-view') | |
16 class ServiceObjectViewElement extends ObservatoryElement { | |
17 @published ServiceObject object; | |
18 @published ObservableMap args; | |
19 | |
20 ServiceObjectViewElement.created() : super.created(); | |
21 | |
22 ObservatoryElement _constructElementForObject() { | |
23 var type = object.type; | |
24 switch (type) { | |
25 case 'AllocationProfile': | |
26 HeapProfileElement element = new Element.tag('heap-profile'); | |
27 element.profile = object; | |
28 return element; | |
29 case 'BreakpointList': | |
30 BreakpointListElement element = new Element.tag('breakpoint-list'); | |
31 element.msg = object; | |
32 return element; | |
33 case 'Class': | |
34 ClassViewElement element = new Element.tag('class-view'); | |
35 element.cls = object; | |
36 return element; | |
37 case 'Code': | |
38 CodeViewElement element = new Element.tag('code-view'); | |
39 element.code = object; | |
40 return element; | |
41 case 'Context': | |
42 ContextViewElement element = new Element.tag('context-view'); | |
43 element.context = object; | |
44 return element; | |
45 case 'Error': | |
46 ErrorViewElement element = new Element.tag('error-view'); | |
47 element.error = object; | |
48 return element; | |
49 case 'Field': | |
50 FieldViewElement element = new Element.tag('field-view'); | |
51 element.field = object; | |
52 return element; | |
53 case 'FlagList': | |
54 FlagListElement element = new Element.tag('flag-list'); | |
55 element.flagList = object; | |
56 return element; | |
57 case 'Function': | |
58 FunctionViewElement element = new Element.tag('function-view'); | |
59 element.function = object; | |
60 return element; | |
61 case 'HeapMap': | |
62 HeapMapElement element = new Element.tag('heap-map'); | |
63 element.fragmentation = object; | |
64 return element; | |
65 case 'IO': | |
66 IOViewElement element = new Element.tag('io-view'); | |
67 element.io = object; | |
68 return element; | |
69 case 'HttpServerList': | |
70 IOHttpServerListViewElement element = | |
71 new Element.tag('io-http-server-list-view'); | |
72 element.list = object; | |
73 return element; | |
74 case 'HttpServer': | |
75 IOHttpServerViewElement element = | |
76 new Element.tag('io-http-server-view'); | |
77 element.httpServer = object; | |
78 return element; | |
79 case 'HttpServerConnection': | |
80 IOHttpServerConnectionViewElement element = | |
81 new Element.tag('io-http-server-connection-view'); | |
82 element.connection = object; | |
83 return element; | |
84 case 'Object': | |
85 ObjectViewElement element = new Element.tag('object-view'); | |
86 element.object = object; | |
87 return element; | |
88 case 'SocketList': | |
89 IOSocketListViewElement element = | |
90 new Element.tag('io-socket-list-view'); | |
91 element.list = object; | |
92 return element; | |
93 case 'Socket': | |
94 IOSocketViewElement element = new Element.tag('io-socket-view'); | |
95 element.socket = object; | |
96 return element; | |
97 case 'WebSocketList': | |
98 IOWebSocketListViewElement element = | |
99 new Element.tag('io-web-socket-list-view'); | |
100 element.list = object; | |
101 return element; | |
102 case 'WebSocket': | |
103 IOWebSocketViewElement element = new Element.tag('io-web-socket-view'); | |
104 element.webSocket = object; | |
105 return element; | |
106 case 'Isolate': | |
107 IsolateViewElement element = new Element.tag('isolate-view'); | |
108 element.isolate = object; | |
109 return element; | |
110 case 'Library': | |
111 LibraryViewElement element = new Element.tag('library-view'); | |
112 element.library = object; | |
113 return element; | |
114 case 'ProcessList': | |
115 IOProcessListViewElement element = | |
116 new Element.tag('io-process-list-view'); | |
117 element.list = object; | |
118 return element; | |
119 case 'Process': | |
120 IOProcessViewElement element = new Element.tag('io-process-view'); | |
121 element.process = object; | |
122 return element; | |
123 case 'Profile': | |
124 IsolateProfileElement element = new Element.tag('isolate-profile'); | |
125 element.profile = object; | |
126 return element; | |
127 case 'RandomAccessFileList': | |
128 IORandomAccessFileListViewElement element = | |
129 new Element.tag('io-random-access-file-list-view'); | |
130 element.list = object; | |
131 return element; | |
132 case 'RandomAccessFile': | |
133 IORandomAccessFileViewElement element = | |
134 new Element.tag('io-random-access-file-view'); | |
135 element.file = object; | |
136 return element; | |
137 case 'ServiceError': | |
138 ServiceErrorViewElement element = | |
139 new Element.tag('service-error-view'); | |
140 element.error = object; | |
141 return element; | |
142 case 'ServiceException': | |
143 ServiceExceptionViewElement element = | |
144 new Element.tag('service-exception-view'); | |
145 element.exception = object; | |
146 return element; | |
147 case 'Script': | |
148 ScriptViewElement element = new Element.tag('script-view'); | |
149 element.script = object; | |
150 return element; | |
151 case 'VM': | |
152 VMViewElement element = new Element.tag('vm-view'); | |
153 element.vm = object; | |
154 return element; | |
155 default: | |
156 if (object.isInstance || | |
157 object.isSentinel) { // TODO(rmacnak): Separate this out. | |
158 InstanceViewElement element = new Element.tag('instance-view'); | |
159 element.instance = object; | |
160 return element; | |
161 } else { | |
162 JsonViewElement element = new Element.tag('json-view'); | |
163 element.map = object; | |
164 return element; | |
165 } | |
166 } | |
167 } | |
168 | |
169 objectChanged(oldValue) { | |
170 // Remove the current view. | |
171 children.clear(); | |
172 if (object == null) { | |
173 Logger.root.info('Viewing null object.'); | |
174 return; | |
175 } | |
176 var type = object.vmType; | |
177 var element = _constructElementForObject(); | |
178 if (element == null) { | |
179 Logger.root.info('Unable to find a view element for \'${type}\''); | |
180 return; | |
181 } | |
182 children.add(element); | |
183 Logger.root.info('Viewing object of \'${type}\''); | |
184 } | |
185 } | |
186 | |
187 @CustomTag('trace-view') | |
188 class TraceViewElement extends ObservatoryElement { | |
189 @published Tracer tracer; | |
190 TraceViewElement.created() : super.created(); | |
191 } | |
192 | |
193 @CustomTag('map-viewer') | |
194 class MapViewerElement extends ObservatoryElement { | |
195 @published Map map; | |
196 @published bool expand = false; | |
197 MapViewerElement.created() : super.created(); | |
198 | |
199 bool isMap(var m) { | |
200 return m is Map; | |
201 } | |
202 | |
203 bool isList(var m) { | |
204 return m is List; | |
205 } | |
206 | |
207 dynamic expander() { | |
208 return expandEvent; | |
209 } | |
210 | |
211 void expandEvent(bool exp, var done) { | |
212 expand = exp; | |
213 done(); | |
214 } | |
215 } | |
216 | |
217 @CustomTag('list-viewer') | |
218 class ListViewerElement extends ObservatoryElement { | |
219 @published List list; | |
220 @published bool expand = false; | |
221 ListViewerElement.created() : super.created(); | |
222 | |
223 bool isMap(var m) { | |
224 return m is Map; | |
225 } | |
226 | |
227 bool isList(var m) { | |
228 return m is List; | |
229 } | |
230 | |
231 dynamic expander() { | |
232 return expandEvent; | |
233 } | |
234 | |
235 void expandEvent(bool exp, var done) { | |
236 expand = exp; | |
237 done(); | |
238 } | |
239 } | |
OLD | NEW |