{"ScriptPreparationCode":" \u0027use strict\u0027\r\nlet image,\r\n imageData,\r\n ctx = new OffscreenCanvas(0, 0).getContext(\u00272d\u0027),\r\n main = document.querySelector(\u0027canvas\u0027),\r\n c = main.getContext(\u00272d\u0027),\r\n width, height,\r\n imageAsBlob,\r\n imageAsBitmap\r\nasync function globalMeasureThatScriptPrepareFunction() {\r\n image = await loadImage();\r\n ({\r\n width,\r\n height\r\n } = image)\r\n ctx.canvas.width = main.width = width\r\n ctx.canvas.height = main.height = height\r\n ctx.drawImage(image, 0, 0, width, height)\r\n imageData = ctx.getImageData(0, 0, width, height)\r\n imageAsBlob = await loadImage(URL.createObjectURL(await ctx.canvas.convertToBlob()))\r\n}\r\n\r\nfunction loadImage(url = \u0060https://www.measurethat.net/images/Picture1.png\u0060) {\r\n return new Promise(resolve =\u003E {\r\n const img = new Image\r\n img.src = url\r\n img.onload = () =\u003E resolve(img)\r\n })\r\n}\r\n\r\nfunction clear() {\r\n c.clearRect(0, 0, width, height)\r\n}\r\nconst repeatCount = 40\r\n\r\nfunction test(num) {\r\n switch (num) {\r\n case 1:\r\n for (let n = repeatCount; n--;) {\r\n c.drawImage(image, 0, 0, width, height)\r\n clear()\r\n }\r\n break\r\n case 2:\r\n for (let n = repeatCount; n--;) {\r\n c.putImageData(imageData, 0, 0,)\r\n clear()\r\n }\r\n break\r\n case 3:\r\n for (let n = repeatCount; n--;) {\r\n c.drawImage(imageAsBlob, 0, 0)\r\n clear()\r\n }\r\n break\r\n }\r\n}","TestCases":[{"Name":"draw image directly","Code":"test(1)","IsDeferred":false},{"Name":"draw imageData","Code":"test(2)","IsDeferred":false},{"Name":"draw image blob","Code":"test(3)","IsDeferred":false}]}