blob: 55e552473083aa2d1baeb0e887ee05fc28f0a0e6 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script>
if (window.internals)
window.internals.settings.setWebGLErrorsToConsoleEnabled(false);
let requestAnimationFrameId = NaN;
function cancelActions() {
cancelAnimationFrame(requestAnimationFrameId);
requestAnimationFrameId = NaN;
}
function performActions(frames) {
let index = 0;
function executeFrameFunction() {
frames[index++]();
if (index < frames.length)
requestAnimationFrameId = requestAnimationFrame(executeFrameFunction);
else {
setTimeout(() => {
TestPage.dispatchEventToFrontend("LastFrame");
}, 0);
}
};
executeFrameFunction();
}
function performActions2D() {
let context = document.createElement("canvas").getContext("2d");
performActions([
() => {
context.fill();
},
() => {
context.stroke();
},
]);
}
function performActionsWebGL() {
let context = document.createElement("canvas").getContext("webgl");
performActions([
() => {
context.drawArrays(1, 2, 3);
},
() => {
context.drawElements(1, 2, 3, 4);
},
]);
}
function test() {
let suite = InspectorTest.createAsyncSuite("Canvas.setRecordingAutoCaptureFrameCount");
function addTest({name, description, frameCount, expression, handleRecordingStarted, handleRecordingStopped, handleLastFrame}) {
suite.addTestCase({
name,
description,
test(resolve, reject) {
let canvas = null;
function handleRecordingStartedWrapper(event)
{
InspectorTest.assert(event.target === canvas, "Should be recording the canvas.");
handleRecordingStarted(canvas);
}
function handleRecordingStoppedWrapper(event)
{
InspectorTest.assert(event.target === canvas, "Should be recording the canvas.");
handleRecordingStopped(canvas, event.data.recording);
}
WI.canvasManager.canvasCollection.singleFireEventListener(WI.Collection.Event.ItemAdded, (event) => {
canvas = event.data.item;
InspectorTest.assert(!canvas.recordingActive)
canvas.addEventListener(WI.Canvas.Event.RecordingStarted, handleRecordingStartedWrapper);
canvas.addEventListener(WI.Canvas.Event.RecordingStopped, handleRecordingStoppedWrapper);
});
InspectorTest.awaitEvent("LastFrame")
.then((event) => {
canvas.removeEventListener(WI.Canvas.Event.RecordingStarted, handleRecordingStartedWrapper);
canvas.removeEventListener(WI.Canvas.Event.RecordingStopped, handleRecordingStoppedWrapper);
handleLastFrame(canvas);
})
.then(resolve, reject);
CanvasAgent.setRecordingAutoCaptureFrameCount(frameCount)
.then(() => {
InspectorTest.evaluateInPage(expression).catch(reject);
})
.catch(reject);
},
});
}
addTest({
name: "Canvas.setRecordingAutoCaptureFrameCount.2D.None",
description: "Check that newly created 2D contexts are not recorded when setRecordingAutoCaptureFrameCount is 0.",
frameCount: 0,
expression: `performActions2D()`,
handleRecordingStarted(canvas) {
InspectorTest.fail("Canvas should not be recording.");
},
handleRecordingStopped(canvas, recording) {
InspectorTest.fail("Canvas should not be recording.");
},
handleLastFrame(canvas) {
InspectorTest.expectEqual(canvas.recordingCollection.size, 0, "Canvas should have no finished recordings.");
},
});
addTest({
name: "Canvas.setRecordingAutoCaptureFrameCount.2D.Single",
description: "Check that newly created 2D contexts only record one frame when setRecordingAutoCaptureFrameCount is 1.",
frameCount: 1,
expression: `performActions2D()`,
handleRecordingStarted(canvas) {
InspectorTest.pass("Recording started.");
},
handleRecordingStopped(canvas, recording) {
InspectorTest.pass("Recording stopped.");
InspectorTest.expectEqual(recording.frames.length, 1, "Recording should have one frame.");
InspectorTest.expectEqual(recording.frames[0].actions.length, 1, "Recording should have one action.");
},
handleLastFrame(canvas) {
InspectorTest.expectEqual(canvas.recordingCollection.size, 1, "Canvas should have one finished recording.");
},
});
addTest({
name: "Canvas.setRecordingAutoCaptureFrameCount.2D.Multiple",
description: "Check that newly created 2D contexts don't finish recording when setRecordingAutoCaptureFrameCount is 10.",
frameCount: 10,
expression: `performActions2D()`,
handleRecordingStarted(canvas) {
InspectorTest.pass("Recording started.");
},
handleRecordingStopped(canvas, recording) {
InspectorTest.fail("Canvas should not be done recording.");
},
handleLastFrame(canvas) {
InspectorTest.expectEqual(canvas.recordingCollection.size, 0, "Canvas should have no finished recordings.");
InspectorTest.expectThat(canvas.recordingActive, "Canvas should be actively recording.");
InspectorTest.expectEqual(canvas.recordingFrameCount, 2, "Recording should have 2 frames.");
canvas.stopRecording();
},
});
addTest({
name: "Canvas.setRecordingAutoCaptureFrameCount.WebGL.None",
description: "Check that newly created WebGL contexts are not recorded when setRecordingAutoCaptureFrameCount is 0.",
frameCount: 0,
expression: `performActionsWebGL()`,
handleRecordingStarted(canvas) {
InspectorTest.fail("Canvas should not be recording.");
},
handleRecordingStopped(canvas, recording) {
InspectorTest.fail("Canvas should not be recording.");
},
handleLastFrame(canvas) {
InspectorTest.expectEqual(canvas.recordingCollection.size, 0, "Canvas should have no finished recordings.");
},
});
addTest({
name: "Canvas.setRecordingAutoCaptureFrameCount.WebGL.Single",
description: "Check that newly created WebGL contexts only record one frame when setRecordingAutoCaptureFrameCount is 1.",
frameCount: 1,
expression: `performActionsWebGL()`,
handleRecordingStarted(canvas) {
InspectorTest.pass("Recording started.");
},
handleRecordingStopped(canvas, recording) {
InspectorTest.pass("Recording stopped.");
InspectorTest.expectEqual(recording.frames.length, 1, "Recording should have one frame.");
InspectorTest.expectEqual(recording.frames[0].actions.length, 1, "Recording should have one action.");
},
handleLastFrame(canvas) {
InspectorTest.expectEqual(canvas.recordingCollection.size, 1, "Canvas should have one finished recording.");
},
});
addTest({
name: "Canvas.setRecordingAutoCaptureFrameCount.WebGL.Multiple",
description: "Check that newly created WebGL contexts don't finish recording when setRecordingAutoCaptureFrameCount is 10.",
frameCount: 10,
expression: `performActionsWebGL()`,
handleRecordingStarted(canvas) {
InspectorTest.pass("Recording started.");
},
handleRecordingStopped(canvas, recording) {
InspectorTest.fail("Canvas should not be done recording.");
},
handleLastFrame(canvas) {
InspectorTest.expectEqual(canvas.recordingCollection.size, 0, "Canvas should have no finished recordings.");
InspectorTest.expectThat(canvas.recordingActive, "Canvas should be actively recording.");
InspectorTest.expectEqual(canvas.recordingFrameCount, 2, "Recording should have 2 frames.");
canvas.stopRecording();
},
});
suite.runTestCasesAndFinish();
}
</script>
</head>
<body onload="runTest()">
<p>Test that contexts created after calling Canvas.setRecordingAutoCaptureFrameCount are properly recorded.</p>
</body>
</html>