78 lines
2.9 KiB
HTML
78 lines
2.9 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
|
|
<script>
|
|
function load() {
|
|
window.context = document.body.appendChild(document.createElement("canvas")).getContext("2d");
|
|
|
|
runTest();
|
|
}
|
|
|
|
function changeSize(width, height) {
|
|
window.context.canvas.width = width;
|
|
window.context.canvas.height = height;
|
|
|
|
// Force the creation of the image buffer, which is used to determine memory cost.
|
|
window.context.canvas.toDataURL();
|
|
}
|
|
|
|
function test() {
|
|
let suite = InspectorTest.createAsyncSuite("Canvas.memory");
|
|
|
|
suite.addTestCase({
|
|
name: "Canvas.memory.memoryCost",
|
|
description: "Check that memory cost is sent with the canvas when able.",
|
|
test(resolve, reject) {
|
|
// NOTE: the memory cost of a canvas will not be retrievable until an operation is
|
|
// performed on that canvas that requires the image buffer. A blank canvas that was
|
|
// just created will not have a buffer, so its memory cost will be 0/NaN.
|
|
|
|
let canvases = Array.from(WI.canvasManager.canvasCollection).filter((canvas) => canvas.contextType === WI.Canvas.ContextType.Canvas2D);
|
|
if (!canvases.length) {
|
|
reject("Missing 2D canvas.");
|
|
return;
|
|
}
|
|
|
|
InspectorTest.assert(canvases.length === 1, "There should only be one canvas-2d.");
|
|
|
|
InspectorTest.log(`Memory cost of canvas is ${canvases[0].memoryCost}.`);
|
|
resolve();
|
|
}
|
|
});
|
|
|
|
suite.addTestCase({
|
|
name: "Canvas.memory.canvasMemoryChanged",
|
|
description: "Check that memory cost is updated when the backend value changes.",
|
|
test(resolve, reject) {
|
|
let canvases = Array.from(WI.canvasManager.canvasCollection).filter((canvas) => canvas.contextType === WI.Canvas.ContextType.Canvas2D);
|
|
if (!canvases.length) {
|
|
reject("Missing 2D canvas.");
|
|
return;
|
|
}
|
|
|
|
InspectorTest.assert(canvases.length === 1, "There should only be one canvas-2d.");
|
|
|
|
let initialMemoryCost = canvases[0].memoryCost;
|
|
canvases[0].awaitEvent(WI.Canvas.Event.MemoryChanged)
|
|
.then((event) => {
|
|
InspectorTest.expectGreaterThan(event.target.memoryCost, isNaN(initialMemoryCost) ? 0 : initialMemoryCost, "Memory cost should increase upon initially resizing canvas.");
|
|
})
|
|
.then(resolve, reject);
|
|
|
|
const width = 200;
|
|
const height = 200;
|
|
InspectorTest.log(`Change size of canvas to ${width}x${height}.`);
|
|
InspectorTest.evaluateInPage(`changeSize(${width}, ${height})`);
|
|
}
|
|
});
|
|
|
|
suite.runTestCasesAndFinish();
|
|
}
|
|
</script>
|
|
</head>
|
|
<body onload="load()">
|
|
<p>Test that CanvasManager tracks canvas memory costs and is notified of changes.</p>
|
|
</body>
|
|
</html>
|