91c8be9599
The new APIs are: enableRuntimeCallStats disableRuntimeCallStats getRuntimeCallStats The RunTime Call Stats are collected per isolate. Change-Id: I7e520e2c866288aa9f9dc74f12572abedf0d3ac8 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1881601 Commit-Queue: Peter Kvitek <kvitekp@chromium.org> Reviewed-by: Yang Guo <yangguo@chromium.org> Cr-Commit-Position: refs/heads/master@{#64784}
84 lines
2.5 KiB
JavaScript
84 lines
2.5 KiB
JavaScript
// Copyright 2019 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.
|
|
|
|
let {session, contextGroup, Protocol} = InspectorTest.start(
|
|
'Test RunTimeCallStats collection using Profiler.getRuntimeCallStats.');
|
|
|
|
var source =
|
|
`
|
|
function fib(x) {
|
|
if (x < 2) return 1;
|
|
return fib(x-1) + fib(x-2);
|
|
}
|
|
fib(5);
|
|
`;
|
|
|
|
function buildCounterMap(result) {
|
|
let counterMap = new Map();
|
|
|
|
let counters = result.result.result;
|
|
for (const {name, value} of counters) {
|
|
counterMap.set(name, value);
|
|
}
|
|
|
|
return counterMap;
|
|
}
|
|
|
|
function compareCounterMaps(counterMap, counterMap2) {
|
|
// Check for counters that are present in the first map but are not found
|
|
// in the the second map
|
|
for (let counter of counterMap.keys()) {
|
|
if (!counterMap2.has(counter)) {
|
|
InspectorTest.log(`Counter ${counter} is missing`);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// Check for the counter value changes
|
|
let counterValueIncreased = false;
|
|
for (let [counter, value2] of counterMap2) {
|
|
let value = counterMap.get(counter);
|
|
if (value !== undefined) {
|
|
if (value2 < value) {
|
|
InspectorTest.log(`Counter ${counter} value decreased: ${value} -> ${value2}`);
|
|
return false;
|
|
}
|
|
if (value2 > value) {
|
|
counterValueIncreased = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!counterValueIncreased && counterMap.size === counterMap2.size) {
|
|
InspectorTest.log(`No counter values has increased or added`);
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
(async function test() {
|
|
await Protocol.Runtime.ensable();
|
|
await Protocol.Profiler.enableRuntimeCallStats();
|
|
|
|
let counterMap = buildCounterMap(await Protocol.Profiler.getRuntimeCallStats());
|
|
|
|
await Protocol.Runtime.evaluate({ expression: source, sourceURL: arguments.callee.name, persistScript: true });
|
|
|
|
let counterMap2 = buildCounterMap(await Protocol.Profiler.getRuntimeCallStats());
|
|
const check1 = compareCounterMaps(counterMap, counterMap2);
|
|
|
|
await Protocol.Runtime.evaluate({ expression: source, sourceURL: arguments.callee.name, persistScript: true });
|
|
|
|
let counterMap3 = buildCounterMap(await Protocol.Profiler.getRuntimeCallStats());
|
|
const check2 = compareCounterMaps(counterMap2, counterMap3);
|
|
|
|
await Protocol.Profiler.disableRuntimeCallStats();
|
|
await Protocol.Runtime.disable();
|
|
|
|
InspectorTest.log(check1 && check2 ? 'PASSED' : 'FAILED');
|
|
|
|
InspectorTest.completeTest();
|
|
})().catch(e => InspectorTest.log('caught: ' + e));
|