| 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 heap_snapshot_element; | 5 library heap_snapshot_element; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:html'; | 8 import 'dart:html'; |
| 9 import 'observatory_element.dart'; | 9 import 'observatory_element.dart'; |
| 10 import 'package:observatory/app.dart'; | 10 import 'package:observatory/app.dart'; |
| 11 import 'package:observatory/service.dart'; | 11 import 'package:observatory/service.dart'; |
| 12 import 'package:observatory/elements.dart'; | 12 import 'package:observatory/elements.dart'; |
| 13 import 'package:observatory/object_graph.dart'; | 13 import 'package:observatory/object_graph.dart'; |
| 14 import 'package:polymer/polymer.dart'; | 14 import 'package:polymer/polymer.dart'; |
| 15 import 'package:logging/logging.dart'; |
| 15 | 16 |
| 16 class DominatorTreeRow extends TableTreeRow { | 17 class DominatorTreeRow extends TableTreeRow { |
| 17 final ObjectVertex vertex; | 18 final ObjectVertex vertex; |
| 18 final HeapSnapshot snapshot; | 19 final HeapSnapshot snapshot; |
| 19 | 20 |
| 20 var _domTreeChildren; | 21 var _domTreeChildren; |
| 21 get domTreeChildren { | 22 get domTreeChildren { |
| 22 if (_domTreeChildren == null) { | 23 if (_domTreeChildren == null) { |
| 23 _domTreeChildren = vertex.dominatorTreeChildren(); | 24 _domTreeChildren = vertex.dominatorTreeChildren(); |
| 24 } | 25 } |
| (...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 328 int retainedSize = 0; | 329 int retainedSize = 0; |
| 329 | 330 |
| 330 List<MergedEdge> incomingEdges = new List<MergedEdge>(); | 331 List<MergedEdge> incomingEdges = new List<MergedEdge>(); |
| 331 Map<int, MergedEdge> outgoingEdges = new Map<int, MergedEdge>(); | 332 Map<int, MergedEdge> outgoingEdges = new Map<int, MergedEdge>(); |
| 332 | 333 |
| 333 MergedVertex(this.cid); | 334 MergedVertex(this.cid); |
| 334 } | 335 } |
| 335 | 336 |
| 336 | 337 |
| 337 Future<List<MergedVertex>> buildMergedVertices(ObjectGraph graph) async { | 338 Future<List<MergedVertex>> buildMergedVertices(ObjectGraph graph) async { |
| 339 Logger.root.info("Start merge vertices"); |
| 340 |
| 338 var cidToMergedVertex = {}; | 341 var cidToMergedVertex = {}; |
| 339 | 342 |
| 340 for (var vertex in graph.vertices) { | 343 for (var vertex in graph.vertices) { |
| 341 var cid = vertex.vmCid; | 344 var cid = vertex.vmCid; |
| 342 MergedVertex source = cidToMergedVertex[cid]; | 345 MergedVertex source = cidToMergedVertex[cid]; |
| 343 if (source == null) { | 346 if (source == null) { |
| 344 cidToMergedVertex[cid] = source = new MergedVertex(cid); | 347 cidToMergedVertex[cid] = source = new MergedVertex(cid); |
| 345 } | 348 } |
| 346 | 349 |
| 347 source.instances++; | 350 source.instances++; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 358 edge = new MergedEdge(source, target); | 361 edge = new MergedEdge(source, target); |
| 359 source.outgoingEdges[cid2] = edge; | 362 source.outgoingEdges[cid2] = edge; |
| 360 target.incomingEdges.add(edge); | 363 target.incomingEdges.add(edge); |
| 361 } | 364 } |
| 362 edge.count++; | 365 edge.count++; |
| 363 // An over-estimate if there are multiple references to the same object. | 366 // An over-estimate if there are multiple references to the same object. |
| 364 edge.shallowSize += vertex2.shallowSize == null ? 0 : vertex2.shallowSize; | 367 edge.shallowSize += vertex2.shallowSize == null ? 0 : vertex2.shallowSize; |
| 365 } | 368 } |
| 366 } | 369 } |
| 367 | 370 |
| 371 Logger.root.info("End merge vertices"); |
| 372 |
| 368 return cidToMergedVertex.values.toList(); | 373 return cidToMergedVertex.values.toList(); |
| 369 } | 374 } |
| 370 | 375 |
| 371 @CustomTag('heap-snapshot') | 376 @CustomTag('heap-snapshot') |
| 372 class HeapSnapshotElement extends ObservatoryElement { | 377 class HeapSnapshotElement extends ObservatoryElement { |
| 373 @published Isolate isolate; | 378 @published Isolate isolate; |
| 374 @observable HeapSnapshot snapshot; | 379 @observable HeapSnapshot snapshot; |
| 375 | 380 |
| 376 @published String state = 'Requested'; | 381 @published String state = 'Requested'; |
| 377 @published String analysisSelector = 'DominatorTree'; | 382 @published String analysisSelector = 'DominatorTree'; |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 451 | 456 |
| 452 new Future.delayed(const Duration(milliseconds: 500), () { | 457 new Future.delayed(const Duration(milliseconds: 500), () { |
| 453 buildMergedVertices(snapshot.graph).then((vertices) { | 458 buildMergedVertices(snapshot.graph).then((vertices) { |
| 454 state = 'Loaded'; | 459 state = 'Loaded'; |
| 455 var rootRow = new MergedVerticesRow(tree, null, isolate, vertices); | 460 var rootRow = new MergedVerticesRow(tree, null, isolate, vertices); |
| 456 tree.initialize(rootRow); | 461 tree.initialize(rootRow); |
| 457 }); | 462 }); |
| 458 }); | 463 }); |
| 459 } | 464 } |
| 460 } | 465 } |
| OLD | NEW |