blob: a0ece9461f95612dd69485876f487817d6d6214c [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright (c) 2013 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="/extras/tcmalloc/heap.html">
<script>
'use strict';
tv.b.unittest.testSuite(function() {
var HeapSnapshot = tv.e.tcmalloc.HeapSnapshot;
// Tests total allocation count.
test('totals', function() {
var snapshot = new HeapSnapshot({}, 1, [
{
'current_allocs': 10,
'total_allocs': 100,
'current_bytes': 10000,
'trace': '',
'total_bytes': 100000
},
{
'current_allocs': 2,
'total_allocs': 22,
'current_bytes': 200,
'trace': 'TestObject::TestMethod ',
'total_bytes': 2200
}
]);
snapshot.preInitialize();
snapshot.initialize();
// Base class got the timestamp.
assertEquals(1, snapshot.ts);
// The first entry in the list is for totals.
assertEquals(10, snapshot.total_.currentAllocs);
assertEquals(10000, snapshot.total_.currentBytes);
});
// Tests multi-level trace stacks.
test('multiLevel', function() {
var snapshot = new HeapSnapshot({}, 1, [
{
'current_allocs': 10,
'total_allocs': 100,
'current_bytes': 10000,
'trace': '',
'total_bytes': 100000
},
{
'current_allocs': 2,
'total_allocs': 22,
'current_bytes': 200,
'trace': 'TestObject::TestMethod ',
'total_bytes': 2200
},
{
'current_allocs': 3,
'total_allocs': 33,
'current_bytes': 300,
'trace': 'TestObject2::TestMethod2 ',
'total_bytes': 3300
},
{
'current_allocs': 5,
'total_allocs': 55,
'current_bytes': 500,
'trace': 'TestObject2::TestMethod2 TestObject3::TestMethod3 ',
'total_bytes': 5500
}
]);
snapshot.preInitialize();
snapshot.initialize();
// Our heap has two top-level stacks.
var heap = snapshot.heap_;
var childKeys = Object.keys(heap.children);
assertEquals(2, childKeys.length);
// Both methods exist as children.
assertNotEquals(-1, childKeys.indexOf('TestObject::TestMethod'));
assertNotEquals(-1, childKeys.indexOf('TestObject2::TestMethod2'));
// Verify the first trace entry stack.
var trace = heap.children['TestObject::TestMethod'];
assertEquals(2, trace.currentAllocs);
assertEquals(200, trace.currentBytes);
// One child for "(here)".
assertEquals(1, Object.keys(trace.children).length);
assertNotNull(trace.children['(here)']);
// Verify the second trace entry stack.
trace = heap.children['TestObject2::TestMethod2'];
// Memory should have summed up.
assertEquals(8, trace.currentAllocs);
assertEquals(800, trace.currentBytes);
// Two children, "(here)" and another stack.
assertEquals(2, Object.keys(trace.children).length);
assertNotNull(trace.children['TestObject3::TestMethod3']);
assertNotNull(trace.children['(here)']);
trace = trace.children['TestObject3::TestMethod3'];
assertEquals(5, trace.currentAllocs);
assertEquals(500, trace.currentBytes);
assertEquals(1, Object.keys(trace.children).length);
});
});
</script>