blob: 8acf29f9acb0871c345b45b2a4c1f5cb0e94939b [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright 2016 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="/tracing/model/memory_allocator_dump.html">
<link rel="import" href="/tracing/model/vm_region.html">
<link rel="import" href="/tracing/value/numeric.html">
<link rel="import" href="/tracing/value/unit.html">
<script>
'use strict';
/**
* @fileoverview Helper functions for tests involving memory dumps.
*/
tr.exportTo('tr.model', function() {
var MemoryAllocatorDump = tr.model.MemoryAllocatorDump;
var MemoryAllocatorDumpLink = tr.model.MemoryAllocatorDumpLink;
var VMRegion = tr.model.VMRegion;
var VMRegionClassificationNode = tr.model.VMRegionClassificationNode;
var ScalarNumeric = tr.v.ScalarNumeric;
var sizeInBytes_smallerIsBetter =
tr.v.Unit.byName.sizeInBytes_smallerIsBetter;
function castToScalarNumeric(value) {
if (typeof value === 'number')
return new ScalarNumeric(sizeInBytes_smallerIsBetter, value);
assert.instanceOf(value, ScalarNumeric);
return value;
}
function MemoryDumpTestUtils() {
throw new Error('Static class');
}
MemoryDumpTestUtils.SIZE_DELTA = 0.0001;
MemoryDumpTestUtils.newAllocatorDump = function(
containerDump, fullName, opt_numerics, opt_guid) {
var dump = new MemoryAllocatorDump(containerDump, fullName, opt_guid);
if (opt_numerics !== undefined) {
tr.b.iterItems(opt_numerics, function(numericName, value) {
dump.addNumeric(numericName, castToScalarNumeric(value));
});
}
return dump;
};
MemoryDumpTestUtils.newChildDump =
function(parentDump, name, opt_numerics, opt_guid) {
var childDump = MemoryDumpTestUtils.newAllocatorDump(
parentDump.containerMemoryDump, parentDump.fullName + '/' + name,
opt_numerics, opt_guid);
childDump.parent = parentDump;
parentDump.children.push(childDump);
return childDump;
};
MemoryDumpTestUtils.addOwnershipLink = function(
ownerDump, ownedDump, opt_importance) {
assert.isUndefined(ownerDump.owns); // Sanity check.
var ownershipLink =
new MemoryAllocatorDumpLink(ownerDump, ownedDump, opt_importance);
ownerDump.owns = ownershipLink;
ownedDump.ownedBy.push(ownershipLink);
return ownershipLink;
};
MemoryDumpTestUtils.checkDumpNumericsAndDiagnostics =
function(dump, expectedNumerics, expectedDiagnostics) {
var actualNumerics = dump.numerics;
assert.sameMembers(
Object.keys(actualNumerics), Object.keys(expectedNumerics));
for (var numericName in actualNumerics) {
var actualNumeric = actualNumerics[numericName];
var expectedNumeric = castToScalarNumeric(expectedNumerics[numericName]);
assert.instanceOf(actualNumeric, tr.v.ScalarNumeric);
assert.strictEqual(actualNumeric.unit, expectedNumeric.unit);
assert.closeTo(actualNumeric.value, expectedNumeric.value,
MemoryDumpTestUtils.SIZE_DELTA);
}
assert.deepEqual(dump.diagnostics, expectedDiagnostics);
};
MemoryDumpTestUtils.checkVMRegions = function(vmRegions, expectedRegions) {
if (vmRegions instanceof VMRegionClassificationNode)
vmRegions = vmRegions.allRegionsForTesting;
var expectedRegionsMap = new Map();
expectedRegions.forEach(function(region) {
if (!(region instanceof VMRegion))
region = VMRegion.fromDict(region);
expectedRegionsMap.set(region.uniqueIdWithinProcess, region);
});
var actualRegionsMap = new Map();
vmRegions.forEach(function(region) {
actualRegionsMap.set(region.uniqueIdWithinProcess, region);
});
assert.strictEqual(actualRegionsMap.size, expectedRegionsMap.size);
for (var id of expectedRegionsMap.keys()) {
var expectedRegion = expectedRegionsMap.get(id);
var actualRegion = actualRegionsMap.get(id);
assert.instanceOf(actualRegion, VMRegion);
assert.strictEqual(actualRegion.startAddress,
expectedRegion.startAddress);
assert.strictEqual(actualRegion.sizeInBytes, expectedRegion.sizeInBytes);
assert.strictEqual(actualRegion.protectionFlags,
expectedRegion.protectionFlags);
assert.strictEqual(actualRegion.mappedFile, expectedRegion.mappedFile);
assert.deepEqual(actualRegion.byteStats, expectedRegion.byteStats);
}
};
return {
MemoryDumpTestUtils: MemoryDumpTestUtils
};
});
</script>