blob: 1a6d01d8d072f7c3316007d96c45227f54d6c071 [file] [log] [blame]
<!doctype html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<script src="../../http/tests/inspector/resources/protocol-test.js"></script>
<script>
function runFor(func, millis) {
let start = Date.now();
do {
func();
} while (Date.now() - start < millis);
}
function a() { b(); }
function b() { c(); }
function c() { d(); }
function d() { e(); }
function e() { f(); }
function f() { g(); }
function g() { top(); }
function top() {
for (let i = 0; i < 10000; i++) {
i++;
i--;
}
}
noInline(top);
function test()
{
let suite = ProtocolTest.createAsyncSuite("ScriptProfiler.Samples.ManyCallFrames");
suite.addTestCase({
name: "Sampling Profiler sourceURL directive.",
description: "Sample some basic code.",
test(resolve, reject) {
InspectorProtocol.awaitEvent({event: "ScriptProfiler.trackingComplete"}).then((messageObject) => {
let tree = WI.CallingContextTree.__test_makeTreeFromProtocolMessageObject(messageObject);
let trace = [
{name: "top"},
{name: "g"},
{name: "f"},
{name: "e"},
{name: "d"},
{name: "c"},
{name: "b"},
{name: "a"},
{name: "runFor"}
];
ProtocolTest.expectThat(tree.__test_matchesStackTrace(trace), "Should have seen stacktrace:\n" + JSON.stringify(trace, undefined, 2));
resolve();
});
InspectorProtocol.sendCommand("ScriptProfiler.startTracking", {includeSamples: true});
ProtocolTest.evaluateInPage("runFor(a, 100)");
InspectorProtocol.sendCommand('ScriptProfiler.stopTracking', {});
}
});
suite.runTestCasesAndFinish();
}
</script>
</head>
<body onload="runTest()">
</body>
</html>