blob: 023a2d1fc96bebfb8980ad471319506b8bef43e2 [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright (c) 2015 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<link rel="import" href="/base/deep_utils.html">
<link rel="import" href="/core/analysis/memory_dump_overview_pane.html">
<link rel="import" href="/core/test_utils.html">
<link rel="import" href="/core/trace_model/attribute.html">
<link rel="import" href="/core/trace_model/global_memory_dump.html">
<link rel="import" href="/core/trace_model/process_memory_dump.html">
<link rel="import" href="/core/trace_model/trace_model.html">
<script>
'use strict';
tv.b.unittest.testSuite(function() {
var TraceModel = tv.c.TraceModel;
var Selection = tv.c.Selection;
var GlobalMemoryDump = tv.c.trace_model.GlobalMemoryDump;
var ProcessMemoryDump = tv.c.trace_model.ProcessMemoryDump;
var MemoryAllocatorDump = tv.c.trace_model.MemoryAllocatorDump;
var VMRegion = tv.c.trace_model.VMRegion;
var VMRegionByteStats = tv.c.trace_model.VMRegionByteStats;
var ScalarAttribute = tv.c.trace_model.ScalarAttribute;
function createProcessMemoryDumps() {
var model = tv.c.test_utils.newModel(function(model) {
var p1 = model.getOrCreateProcess(1);
var p2 = model.getOrCreateProcess(2);
var gmd = new GlobalMemoryDump(model, 42);
model.globalMemoryDumps.push(gmd);
// One process with VM regions.
var pmd1 = new ProcessMemoryDump(gmd, p1, 41);
p1.memoryDumps.push(pmd1);
gmd.processMemoryDumps[p1.pid] = pmd1;
pmd1.vmRegions = [
VMRegion.fromDict({
startAddress: 1024,
sizeInBytes: 20971520, /* 20 MiB */
protectionFlags: VMRegion.PROTECTION_FLAG_READ,
mappedFile: '[stack]',
byteStats: VMRegionByteStats.fromDict({
privateResident: 8388608, /* 8 MiB */
sharedResident: 12582912, /* 12 MiB */
proportionalResident: 10485760 /* 10 MiB */
})
})
];
// One process with allocator dumps.
var pmd2 = new ProcessMemoryDump(gmd, p2, 43);
p2.memoryDumps.push(pmd2);
gmd.processMemoryDumps[p2.pid] = pmd2;
pmd2.memoryAllocatorDumps = (function() {
var oilpanDump = new MemoryAllocatorDump('oilpan');
oilpanDump.addAttribute('outer_size',
new ScalarAttribute('bytes', 2147483648) /* 2 GiB */);
oilpanDump.addAttribute('inner_size',
new ScalarAttribute('bytes', 5242880) /* 5 MiB */);
oilpanDump.addAttribute('objects_count',
new ScalarAttribute('objects', 2015));
var v8Dump = new MemoryAllocatorDump('v8');
v8Dump.addAttribute('outer_size',
new ScalarAttribute('bytes', 1073741824) /* 1 GiB */);
v8Dump.addAttribute('inner_size',
new ScalarAttribute('bytes', 2097152) /* 2 MiB */);
v8Dump.addAttribute('objects_count',
new ScalarAttribute('objects', 204));
return [oilpanDump, v8Dump];
})();
});
return tv.b.dictionaryValues(model.globalMemoryDumps[0].processMemoryDumps);
}
test('instantiate', function() {
var processMemoryDumps = createProcessMemoryDumps();
var viewEl = document.createElement('tv-c-memory-dump-overview-pane');
viewEl.processMemoryDumps = processMemoryDumps;
this.addHTMLOutput(viewEl);
var table = tv.b.findDeepElementMatching(
viewEl, 'tracing-analysis-nested-table');
var rows = table.tableRows;
var columns = table.tableColumns;
assert.lengthOf(rows, 2);
assert.lengthOf(columns, 6);
var titleColumn = columns[0];
var proportionalColumn = columns[1];
var privateColumn = columns[2];
var sharedColumn = columns[3];
var oilpanColumn = columns[4];
var v8Column = columns[5];
// Check the rows of the table.
assert.equal(titleColumn.value(rows[0]).label, 'Process 1');
assert.equal(proportionalColumn.value(rows[0]).numBytes, 10485760);
assert.equal(privateColumn.value(rows[0]).numBytes, 8388608);
assert.equal(sharedColumn.value(rows[0]).numBytes, 12582912);
assert.equal(oilpanColumn.value(rows[0]), '');
assert.equal(v8Column.value(rows[0]), '');
assert.equal(titleColumn.value(rows[1]).label, 'Process 2');
assert.equal(proportionalColumn.value(rows[1]), '');
assert.equal(privateColumn.value(rows[1]), '');
assert.equal(sharedColumn.value(rows[1]), '');
assert.equal(oilpanColumn.value(rows[1]).numBytes, 2147483648);
assert.equal(v8Column.value(rows[1]).numBytes, 1073741824);
});
test('selection', function() {
var processMemoryDumps = createProcessMemoryDumps();
var viewEl = document.createElement('tv-c-memory-dump-overview-pane');
viewEl.processMemoryDumps = processMemoryDumps;
this.addHTMLOutput(viewEl);
var didFireSelectedDumpChanged;
viewEl.addEventListener('selected-memory-dump-changed',
function(e) {
didFireSelectedDumpChanged = true;
});
var table = tv.b.findDeepElementMatching(
viewEl, 'tracing-analysis-nested-table');
// Simulate clicking on the 'oilpan' cell of the second process.
didFireSelectedDumpChanged = false;
table.selectedTableRow = table.tableRows[1];
table.selectedColumnIndex = 4;
assert.isTrue(didFireSelectedDumpChanged);
assert.strictEqual(viewEl.selectedMemoryDump,
processMemoryDumps[1].getMemoryAllocatorDumpByFullName('oilpan'));
// Simulate clicking on the 'shared_resident' cell of the first process.
didFireSelectedDumpChanged = false;
table.selectedColumnIndex = 3;
assert.isTrue(didFireSelectedDumpChanged);
assert.isUndefined(viewEl.selectedMemoryDump);
});
});
</script>