blob: 023a2d1fc96bebfb8980ad471319506b8bef43e2 [file] [log] [blame]
Chris Craik44c28202015-05-12 17:25:16 -07001<!DOCTYPE html>
2<!--
3Copyright (c) 2015 The Chromium Authors. All rights reserved.
4Use of this source code is governed by a BSD-style license that can be
5found in the LICENSE file.
6-->
7
8<link rel="import" href="/base/deep_utils.html">
9<link rel="import" href="/core/analysis/memory_dump_overview_pane.html">
10<link rel="import" href="/core/test_utils.html">
11<link rel="import" href="/core/trace_model/attribute.html">
12<link rel="import" href="/core/trace_model/global_memory_dump.html">
13<link rel="import" href="/core/trace_model/process_memory_dump.html">
14<link rel="import" href="/core/trace_model/trace_model.html">
15
16<script>
17'use strict';
18
19tv.b.unittest.testSuite(function() {
20 var TraceModel = tv.c.TraceModel;
21 var Selection = tv.c.Selection;
22 var GlobalMemoryDump = tv.c.trace_model.GlobalMemoryDump;
23 var ProcessMemoryDump = tv.c.trace_model.ProcessMemoryDump;
24 var MemoryAllocatorDump = tv.c.trace_model.MemoryAllocatorDump;
25 var VMRegion = tv.c.trace_model.VMRegion;
26 var VMRegionByteStats = tv.c.trace_model.VMRegionByteStats;
27 var ScalarAttribute = tv.c.trace_model.ScalarAttribute;
28
29 function createProcessMemoryDumps() {
30 var model = tv.c.test_utils.newModel(function(model) {
31 var p1 = model.getOrCreateProcess(1);
32 var p2 = model.getOrCreateProcess(2);
33
34 var gmd = new GlobalMemoryDump(model, 42);
35 model.globalMemoryDumps.push(gmd);
36
37 // One process with VM regions.
38 var pmd1 = new ProcessMemoryDump(gmd, p1, 41);
39 p1.memoryDumps.push(pmd1);
40 gmd.processMemoryDumps[p1.pid] = pmd1;
41 pmd1.vmRegions = [
42 VMRegion.fromDict({
43 startAddress: 1024,
44 sizeInBytes: 20971520, /* 20 MiB */
45 protectionFlags: VMRegion.PROTECTION_FLAG_READ,
46 mappedFile: '[stack]',
47 byteStats: VMRegionByteStats.fromDict({
48 privateResident: 8388608, /* 8 MiB */
49 sharedResident: 12582912, /* 12 MiB */
50 proportionalResident: 10485760 /* 10 MiB */
51 })
52 })
53 ];
54
55 // One process with allocator dumps.
56 var pmd2 = new ProcessMemoryDump(gmd, p2, 43);
57 p2.memoryDumps.push(pmd2);
58 gmd.processMemoryDumps[p2.pid] = pmd2;
59 pmd2.memoryAllocatorDumps = (function() {
60 var oilpanDump = new MemoryAllocatorDump('oilpan');
61 oilpanDump.addAttribute('outer_size',
62 new ScalarAttribute('bytes', 2147483648) /* 2 GiB */);
63 oilpanDump.addAttribute('inner_size',
64 new ScalarAttribute('bytes', 5242880) /* 5 MiB */);
65 oilpanDump.addAttribute('objects_count',
66 new ScalarAttribute('objects', 2015));
67
68 var v8Dump = new MemoryAllocatorDump('v8');
69 v8Dump.addAttribute('outer_size',
70 new ScalarAttribute('bytes', 1073741824) /* 1 GiB */);
71 v8Dump.addAttribute('inner_size',
72 new ScalarAttribute('bytes', 2097152) /* 2 MiB */);
73 v8Dump.addAttribute('objects_count',
74 new ScalarAttribute('objects', 204));
75
76 return [oilpanDump, v8Dump];
77 })();
78 });
79
80 return tv.b.dictionaryValues(model.globalMemoryDumps[0].processMemoryDumps);
81 }
82
83 test('instantiate', function() {
84 var processMemoryDumps = createProcessMemoryDumps();
85
86 var viewEl = document.createElement('tv-c-memory-dump-overview-pane');
87 viewEl.processMemoryDumps = processMemoryDumps;
88 this.addHTMLOutput(viewEl);
89
90 var table = tv.b.findDeepElementMatching(
91 viewEl, 'tracing-analysis-nested-table');
92
93 var rows = table.tableRows;
94 var columns = table.tableColumns;
95 assert.lengthOf(rows, 2);
96 assert.lengthOf(columns, 6);
97
98 var titleColumn = columns[0];
99 var proportionalColumn = columns[1];
100 var privateColumn = columns[2];
101 var sharedColumn = columns[3];
102 var oilpanColumn = columns[4];
103 var v8Column = columns[5];
104
105 // Check the rows of the table.
106 assert.equal(titleColumn.value(rows[0]).label, 'Process 1');
107 assert.equal(proportionalColumn.value(rows[0]).numBytes, 10485760);
108 assert.equal(privateColumn.value(rows[0]).numBytes, 8388608);
109 assert.equal(sharedColumn.value(rows[0]).numBytes, 12582912);
110 assert.equal(oilpanColumn.value(rows[0]), '');
111 assert.equal(v8Column.value(rows[0]), '');
112
113 assert.equal(titleColumn.value(rows[1]).label, 'Process 2');
114 assert.equal(proportionalColumn.value(rows[1]), '');
115 assert.equal(privateColumn.value(rows[1]), '');
116 assert.equal(sharedColumn.value(rows[1]), '');
117 assert.equal(oilpanColumn.value(rows[1]).numBytes, 2147483648);
118 assert.equal(v8Column.value(rows[1]).numBytes, 1073741824);
119 });
120
121 test('selection', function() {
122 var processMemoryDumps = createProcessMemoryDumps();
123
124 var viewEl = document.createElement('tv-c-memory-dump-overview-pane');
125 viewEl.processMemoryDumps = processMemoryDumps;
126 this.addHTMLOutput(viewEl);
127
128 var didFireSelectedDumpChanged;
129 viewEl.addEventListener('selected-memory-dump-changed',
130 function(e) {
131 didFireSelectedDumpChanged = true;
132 });
133
134 var table = tv.b.findDeepElementMatching(
135 viewEl, 'tracing-analysis-nested-table');
136
137 // Simulate clicking on the 'oilpan' cell of the second process.
138 didFireSelectedDumpChanged = false;
139 table.selectedTableRow = table.tableRows[1];
140 table.selectedColumnIndex = 4;
141 assert.isTrue(didFireSelectedDumpChanged);
142 assert.strictEqual(viewEl.selectedMemoryDump,
143 processMemoryDumps[1].getMemoryAllocatorDumpByFullName('oilpan'));
144
145 // Simulate clicking on the 'shared_resident' cell of the first process.
146 didFireSelectedDumpChanged = false;
147 table.selectedColumnIndex = 3;
148 assert.isTrue(didFireSelectedDumpChanged);
149 assert.isUndefined(viewEl.selectedMemoryDump);
150 });
151});
152</script>