| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library persitent_handles_page; | 5 library persitent_handles_page; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:html'; | 8 import 'dart:html'; |
| 9 import 'package:observatory/models.dart' as M; | 9 import 'package:observatory/models.dart' as M; |
| 10 import 'package:observatory/src/elements/containers/virtual_collection.dart'; | 10 import 'package:observatory/src/elements/containers/virtual_collection.dart'; |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 : (_handles.weakElements.toList() | 132 : (_handles.weakElements.toList() |
| 133 ..sort(_createSorter())), | 133 ..sort(_createSorter())), |
| 134 _createWeakLine, | 134 _createWeakLine, |
| 135 _updateWeakLine, | 135 _updateWeakLine, |
| 136 createHeader: _createWeakHeader)); | 136 createHeader: _createWeakHeader)); |
| 137 } | 137 } |
| 138 | 138 |
| 139 List<Element> _createHandlers(String name, List items, create, update, | 139 List<Element> _createHandlers(String name, List items, create, update, |
| 140 {createHeader}) { | 140 {createHeader}) { |
| 141 return [ | 141 return [ |
| 142 new DivElement()..classes = const ['content-centered-big'] | 142 new DivElement()..classes = ['content-centered-big'] |
| 143 ..children = [ | 143 ..children = [ |
| 144 new HeadingElement.h1() | 144 new HeadingElement.h1() |
| 145 ..text = items == null ? '$name' | 145 ..text = items == null ? '$name' |
| 146 : '$name (${items.length})', | 146 : '$name (${items.length})', |
| 147 new HRElement(), | 147 new HRElement(), |
| 148 ], | 148 ], |
| 149 new DivElement()..classes = const ['persistent-handles'] | 149 new DivElement()..classes = ['persistent-handles'] |
| 150 ..children = [ | 150 ..children = [ |
| 151 items == null | 151 items == null |
| 152 ? (new HeadingElement.h2()..classes = const ['content-centered-big'] | 152 ? (new HeadingElement.h2()..classes = ['content-centered-big'] |
| 153 ..text = 'Loading...') | 153 ..text = 'Loading...') |
| 154 : new VirtualCollectionElement(create, update, items: items, | 154 : new VirtualCollectionElement(create, update, items: items, |
| 155 createHeader: createHeader, | 155 createHeader: createHeader, |
| 156 queue: _r.queue) | 156 queue: _r.queue) |
| 157 ] | 157 ] |
| 158 ]; | 158 ]; |
| 159 } | 159 } |
| 160 | 160 |
| 161 _createSorter() { | 161 _createSorter() { |
| 162 var getter; | 162 var getter; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 173 } | 173 } |
| 174 switch (_sortingDirection) { | 174 switch (_sortingDirection) { |
| 175 case _SortingDirection.ascending: | 175 case _SortingDirection.ascending: |
| 176 return (a, b) => getter(a).compareTo(getter(b)); | 176 return (a, b) => getter(a).compareTo(getter(b)); |
| 177 case _SortingDirection.descending: | 177 case _SortingDirection.descending: |
| 178 return (a, b) => getter(b).compareTo(getter(a)); | 178 return (a, b) => getter(b).compareTo(getter(a)); |
| 179 } | 179 } |
| 180 } | 180 } |
| 181 | 181 |
| 182 static Element _createLine() => | 182 static Element _createLine() => |
| 183 new DivElement()..classes = const ['collection-item'] | 183 new DivElement()..classes = ['collection-item'] |
| 184 ..text = 'object'; | 184 ..text = 'object'; |
| 185 | 185 |
| 186 static Element _createWeakLine() => | 186 static Element _createWeakLine() => |
| 187 new DivElement() | 187 new DivElement() |
| 188 ..classes = const ['weak-item'] | 188 ..classes = ['weak-item'] |
| 189 ..children = [ | 189 ..children = [ |
| 190 new SpanElement()..classes = const ['external-size'] | 190 new SpanElement()..classes = ['external-size'] |
| 191 ..text = '0B', | 191 ..text = '0B', |
| 192 new SpanElement()..classes = const ['peer'] | 192 new SpanElement()..classes = ['peer'] |
| 193 ..text = '0x00000', | 193 ..text = '0x00000', |
| 194 new SpanElement()..classes = const ['object'], | 194 new SpanElement()..classes = ['object'], |
| 195 new SpanElement()..classes = const ['finalizer'] | 195 new SpanElement()..classes = ['finalizer'] |
| 196 ..text = 'dart::Class::Method()' | 196 ..text = 'dart::Class::Method()' |
| 197 ]; | 197 ]; |
| 198 | 198 |
| 199 Element _createWeakHeader() => | 199 Element _createWeakHeader() => |
| 200 new DivElement() | 200 new DivElement() |
| 201 ..classes = const ['weak-item'] | 201 ..classes = ['weak-item'] |
| 202 ..children = [ | 202 ..children = [ |
| 203 _createHeaderButton(const ['external-size'], 'External Size', | 203 _createHeaderButton(const ['external-size'], 'External Size', |
| 204 _SortingField.externalSize, | 204 _SortingField.externalSize, |
| 205 _SortingDirection.descending), | 205 _SortingDirection.descending), |
| 206 _createHeaderButton(const ['peer'], 'Peer', | 206 _createHeaderButton(const ['peer'], 'Peer', |
| 207 _SortingField.peer, | 207 _SortingField.peer, |
| 208 _SortingDirection.descending), | 208 _SortingDirection.descending), |
| 209 new SpanElement()..classes = const ['object'] | 209 new SpanElement()..classes = ['object'] |
| 210 ..text = 'Object', | 210 ..text = 'Object', |
| 211 _createHeaderButton(const ['finalizer'], 'Finalizer Callback', | 211 _createHeaderButton(const ['finalizer'], 'Finalizer Callback', |
| 212 _SortingField.finalizerCallback, | 212 _SortingField.finalizerCallback, |
| 213 _SortingDirection.ascending) | 213 _SortingDirection.ascending) |
| 214 ]; | 214 ]; |
| 215 | 215 |
| 216 ButtonElement _createHeaderButton(List<String> classes, | 216 ButtonElement _createHeaderButton(List<String> classes, |
| 217 String text, | 217 String text, |
| 218 _SortingField field, | 218 _SortingField field, |
| 219 _SortingDirection direction) => | 219 _SortingDirection direction) => |
| (...skipping 20 matching lines...) Expand all Loading... |
| 240 _sortingField = field; | 240 _sortingField = field; |
| 241 } | 241 } |
| 242 _r.dirty(); | 242 _r.dirty(); |
| 243 } | 243 } |
| 244 | 244 |
| 245 void _updateWeakLine(Element e, M.WeakPersistentHandle item, | 245 void _updateWeakLine(Element e, M.WeakPersistentHandle item, |
| 246 index) { | 246 index) { |
| 247 e.children[0].text = Utils.formatSize(_getExternalSize(item)); | 247 e.children[0].text = Utils.formatSize(_getExternalSize(item)); |
| 248 e.children[1].text = '${_getPeer(item)}'; | 248 e.children[1].text = '${_getPeer(item)}'; |
| 249 e.children[2] = anyRef(_isolate, item.object, _instances, queue: _r.queue) | 249 e.children[2] = anyRef(_isolate, item.object, _instances, queue: _r.queue) |
| 250 ..classes = const ['object']; | 250 ..classes = ['object']; |
| 251 e.children[3]..text = '${_getFinalizerCallback(item)}' | 251 e.children[3]..text = '${_getFinalizerCallback(item)}' |
| 252 ..title = '${_getFinalizerCallback(item)}'; | 252 ..title = '${_getFinalizerCallback(item)}'; |
| 253 } | 253 } |
| 254 | 254 |
| 255 void _updateLine(Element e, M.PersistentHandle item, | 255 void _updateLine(Element e, M.PersistentHandle item, |
| 256 index) { | 256 index) { |
| 257 e.children = [ | 257 e.children = [ |
| 258 anyRef(_isolate, item.object, _instances, queue: _r.queue) | 258 anyRef(_isolate, item.object, _instances, queue: _r.queue) |
| 259 ..classes = const ['object'] | 259 ..classes = ['object'] |
| 260 ]; | 260 ]; |
| 261 } | 261 } |
| 262 | 262 |
| 263 Future _refresh({bool gc: false, bool reset: false}) async { | 263 Future _refresh({bool gc: false, bool reset: false}) async { |
| 264 _handles = null; | 264 _handles = null; |
| 265 _r.dirty(); | 265 _r.dirty(); |
| 266 _handles = await _repository.get(_isolate); | 266 _handles = await _repository.get(_isolate); |
| 267 _r.dirty(); | 267 _r.dirty(); |
| 268 } | 268 } |
| 269 | 269 |
| 270 static int _getExternalSize(M.WeakPersistentHandle h) => h.externalSize; | 270 static int _getExternalSize(M.WeakPersistentHandle h) => h.externalSize; |
| 271 static String _getPeer(M.WeakPersistentHandle h) => h.peer; | 271 static String _getPeer(M.WeakPersistentHandle h) => h.peer; |
| 272 static String _getFinalizerCallback(M.WeakPersistentHandle h) => | 272 static String _getFinalizerCallback(M.WeakPersistentHandle h) => |
| 273 '${h.callbackSymbolName} (${h.callbackAddress})'; | 273 '${h.callbackSymbolName} (${h.callbackAddress})'; |
| 274 } | 274 } |
| OLD | NEW |