222 lines
8.5 KiB
HTML
222 lines
8.5 KiB
HTML
<!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>
|