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

Side by Side Diff: runtime/observatory/tests/service/dominator_tree_test.dart

Issue 1124153006: Heap snapshot visualizations (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: sync Created 5 years, 6 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
1 // Copyright (c) 2014, 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 // VMOptions=--compile-all --error_on_bad_type --error_on_bad_override 4 // VMOptions=--compile-all --error_on_bad_type --error_on_bad_override
5 5
6 import 'package:observatory/dominator_tree.dart'; 6 import 'package:observatory/service_io.dart';
7 import 'package:unittest/unittest.dart'; 7 import 'package:unittest/unittest.dart';
8 import 'test_helper.dart';
9 import 'dart:async';
8 10
9 void main() { 11 // small example from [Lenguaer & Tarjan 1979]
10 test('small example from [Lenguaer & Tarjan 1979]', smallTest); 12 class R { var x; var y; var z; }
11 test('non-flowgraph', nonFlowgraph); 13 class A { var x; }
14 class B { var x; var y; var z; }
15 class C { var x; var y; }
16 class D { var x; }
17 class E { var x; }
18 class F { var x; }
19 class G { var x; var y; }
20 class H { var x; var y; }
21 class I { var x; }
22 class J { var x; }
23 class K { var x; var y; }
24 class L { var x; }
25
26 var r;
27
28 buildGraph() {
29 r = new R();
30 var a = new A();
31 var b = new B();
32 var c = new C();
33 var d = new D();
34 var e = new E();
35 var f = new F();
36 var g = new G();
37 var h = new H();
38 var i = new I();
39 var j = new J();
40 var k = new K();
41 var l = new L();
42
43 r.x = a; r.y = b; r.z = c;
44 a.x = d;
45 b.x = a; b.y = d; b.z = e;
46 c.x = f; c.y = g;
47 d.x = l;
48 e.x = h;
49 f.x = i;
50 g.x = i; g.y = j;
51 h.x = e; h.y = k;
52 i.x = k;
53 j.x = i;
54 k.x = i; k.y = r;
55 l.x = h;
12 } 56 }
13 57
14 void smallTest() { 58 var tests = [
15 var g = { 59 (Isolate isolate) async {
16 'R': ['A', 'B', 'C'], 60 var rootLib = await isolate.rootLibrary.load();
17 'A': ['D'], 61 var snapshot = await isolate.fetchHeapSnapshot().last;
18 'B': ['A', 'D', 'E'], 62
19 'C': ['F', 'G'], 63 node(String className) {
20 'D': ['L'], 64 var cls = rootLib.classes.singleWhere((cls) => cls.name == className);
21 'E': ['H'], 65 return snapshot.graph.vertices.singleWhere((v) => v.vmCid == cls.vmCid);
22 'F': ['I'],
23 'G': ['I', 'J'],
24 'H': ['E', 'K'],
25 'I': ['K'],
26 'J': ['I'],
27 'K': ['I', 'R'],
28 'L': ['H'],
29 };
30 var d = new Dominator();
31 for (String u in g.keys) {
32 d.addEdges(u, g[u]);
33 } 66 }
34 d.computeDominatorTree('R');
35 expect(d.dominator('I'), equals('R'));
36 expect(d.dominator('K'), equals('R'));
37 expect(d.dominator('C'), equals('R'));
38 expect(d.dominator('H'), equals('R'));
39 expect(d.dominator('E'), equals('R'));
40 expect(d.dominator('A'), equals('R'));
41 expect(d.dominator('D'), equals('R'));
42 expect(d.dominator('B'), equals('R'));
43 67
44 expect(d.dominator('F'), equals('C')); 68 expect(node('I').dominator, equals(node('R')));
45 expect(d.dominator('G'), equals('C')); 69 expect(node('K').dominator, equals(node('R')));
46 expect(d.dominator('J'), equals('G')); 70 expect(node('C').dominator, equals(node('R')));
47 expect(d.dominator('L'), equals('D')); 71 expect(node('H').dominator, equals(node('R')));
48 expect(d.dominator('R'), isNull); 72 expect(node('E').dominator, equals(node('R')));
49 } 73 expect(node('A').dominator, equals(node('R')));
74 expect(node('D').dominator, equals(node('R')));
75 expect(node('B').dominator, equals(node('R')));
50 76
51 void nonFlowgraph() { 77 expect(node('F').dominator, equals(node('C')));
52 var d = new Dominator(); 78 expect(node('G').dominator, equals(node('C')));
53 d.addEdges('A', ['B']); 79 expect(node('J').dominator, equals(node('G')));
54 expect(() => d.computeDominatorTree('B'), throwsStateError); 80 expect(node('L').dominator, equals(node('D')));
55 } 81
82 expect(node('R'), isNotNull); // The field.
83 },
84 ];
85
86 main(args) => runIsolateTests(args, tests, testeeBefore: buildGraph);
OLDNEW
« no previous file with comments | « runtime/observatory/observatory_sources.gypi ('k') | runtime/observatory/tests/service/graph_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698