Files
Kmake/deps/v8/test/inspector/heap-profiler/sampling-heap-profiler-flags.js

68 lines
2.4 KiB
JavaScript
Raw Normal View History

2026-05-26 23:36:42 -07:00
// Copyright 2017 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --sampling-heap-profiler-suppress-randomness
// Flags: --no-stress-incremental-marking
// Flags: --allow-natives-syntax
(async function() {
let {contextGroup, Protocol} = InspectorTest.start('Checks sampling heap profiler methods.');
contextGroup.addScript(`
function generateTrash() {
var arr = new Array(100);
for (var i = 0; i < 3000; ++i) {
var s = {a:i, b: new Array(100).fill(42)};
arr[i % 100] = s;
}
return arr[30];
}
%PrepareFunctionForOptimization(generateTrash);
generateTrash();
%OptimizeFunctionOnNextCall(generateTrash);
generateTrash();
//# sourceURL=test.js`);
Protocol.HeapProfiler.enable();
await Protocol.HeapProfiler.startSampling({
samplingInterval: 1e4,
includeObjectsCollectedByMajorGC: false,
includeObjectsCollectedByMinorGC: false,
});
await Protocol.Runtime.evaluate({ expression: 'generateTrash()' });
const profile1 = await Protocol.HeapProfiler.stopSampling();
const size1 = nodeSize(profile1.result.profile.head);
InspectorTest.log('Retained size is less than 15KB:', size1 < 15000);
await Protocol.HeapProfiler.startSampling({
samplingInterval: 100,
includeObjectsCollectedByMajorGC: true,
includeObjectsCollectedByMinorGC: false,
});
await Protocol.Runtime.evaluate({ expression: 'generateTrash()' });
const profile2 = await Protocol.HeapProfiler.stopSampling();
const size2 = nodeSize(profile2.result.profile.head);
InspectorTest.log('Including major GC increases size:', size1 < size2);
await Protocol.HeapProfiler.startSampling({
samplingInterval: 100,
includeObjectsCollectedByMajorGC: true,
includeObjectsCollectedByMinorGC: true,
});
await Protocol.Runtime.evaluate({ expression: 'generateTrash()' });
const profile3 = await Protocol.HeapProfiler.stopSampling();
const size3 = nodeSize(profile3.result.profile.head);
InspectorTest.log('Minor GC collected more:', size3 > size2);
InspectorTest.log('Total allocation is greater than 100KB:', size3 > 100000);
InspectorTest.log('Successfully finished');
InspectorTest.completeTest();
function nodeSize(node) {
return node.children.reduce((res, child) => res + nodeSize(child),
node.callFrame.functionName === 'generateTrash' ? node.selfSize : 0);
}
})();