76 lines
3.8 KiB
HTML
76 lines
3.8 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<script src="../../http/tests/inspector/resources/protocol-test.js"></script>
|
|
<script>
|
|
let worker1 = new Worker("resources/busy-worker.js");
|
|
let worker2 = new Worker("resources/busy-worker.js");
|
|
|
|
function test()
|
|
{
|
|
let suite = ProtocolTest.createAsyncSuite("CPUProfiler.Threads");
|
|
|
|
suite.addTestCase({
|
|
name: "CPUProfiler.Threads",
|
|
test(resolve, reject) {
|
|
InspectorProtocol.awaitEvent({event: "CPUProfiler.trackingStart"}).then((messageObject) => {
|
|
ProtocolTest.log("CPUProfiler.trackingStart");
|
|
ProtocolTest.expectThat(typeof messageObject.params.timestamp === "number", "Should have a timestamp when starting.");
|
|
});
|
|
|
|
// Skip one update to be safe. The Workers may not have existed for long.
|
|
InspectorProtocol.awaitEvent({event: "CPUProfiler.trackingUpdate"})
|
|
.then(() => InspectorProtocol.awaitEvent({event: "CPUProfiler.trackingUpdate"}))
|
|
.then((messageObject) => {
|
|
ProtocolTest.log("CPUProfiler.trackingUpdate");
|
|
ProtocolTest.expectThat(typeof messageObject.params.event === "object", "Should have an event object.");
|
|
ProtocolTest.expectThat(typeof messageObject.params.event.timestamp === "number", "Event should have a timestamp.");
|
|
ProtocolTest.expectThat(typeof messageObject.params.event.usage === "number", "Event should have a usage.");
|
|
ProtocolTest.expectThat(messageObject.params.event.usage >= 0, "usage should be greater than or equal to zero.");
|
|
ProtocolTest.expectThat(Array.isArray(messageObject.params.event.threads), "Event should have threads.");
|
|
|
|
let main = [];
|
|
let workers = [];
|
|
let others = [];
|
|
let threads = messageObject.params.event.threads;
|
|
for (let thread of threads) {
|
|
if (thread.type === "main")
|
|
main.push(thread);
|
|
else if (thread.targetId && thread.name == "WebCore: Worker")
|
|
workers.push(thread);
|
|
else
|
|
others.push(thread);
|
|
}
|
|
|
|
ProtocolTest.expectThat(threads.every((x) => x.usage >= 0 && x.usage <= 100), "Every thread has between 0 and 100 usage.");
|
|
ProtocolTest.expectEqual(main.length, 1, "Event should have 1 main thread.");
|
|
ProtocolTest.expectEqual(workers.length, 2, "Event should have 2 worker threads.");
|
|
ProtocolTest.expectThat(others.length > 0, "Event should have other worker threads.");
|
|
ProtocolTest.expectGreaterThan(workers[0].usage, 0, "Worker 1 usage should be greater than zero.");
|
|
ProtocolTest.expectGreaterThan(workers[1].usage, 0, "Worker 2 usage should be greater than zero.");
|
|
// Round to 4 decimal digits.
|
|
let totalUsage = Number(messageObject.params.event.usage.toFixed(4));
|
|
let workersUsage = Number((workers[0].usage + workers[1].usage).toFixed(4));
|
|
ProtocolTest.expectGreaterThanOrEqual(totalUsage, workersUsage, "Total usage should be greater than or equal to the sum of both worker threads.");
|
|
|
|
InspectorProtocol.sendCommand("CPUProfiler.stopTracking", {});
|
|
}).catch(reject);
|
|
|
|
InspectorProtocol.awaitEvent({event: "CPUProfiler.trackingComplete"}).then((messageObject) => {
|
|
ProtocolTest.log("CPUProfiler.trackingComplete");
|
|
resolve();
|
|
});
|
|
|
|
InspectorProtocol.sendCommand("CPUProfiler.startTracking", {});
|
|
}
|
|
});
|
|
|
|
suite.runTestCasesAndFinish();
|
|
}
|
|
</script>
|
|
</head>
|
|
<body onload="runTest()">
|
|
<p>Tests that CPUProfiler tracking events include per-Thread CPU usage.</p>
|
|
</body>
|
|
</html>
|