Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Run results for:
drawImage and getImageData on Canvas vs OffscreenCanvas 2
Go to the benchmark
Embed
Embed Benchmark Result
Run details:
User agent:
Mozilla/5.0 (iPad; CPU OS 16_7_10 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.7.2 Mobile/15E148 Safari/604.1
Browser:
Mobile Safari 17
Operating system:
iOS 16.7.10
Device Platform:
Tablet
Date tested:
13 days ago
Test name
Executions per second
Main Thread
8447055.0 Ops/sec
Worker Thread
9518210.0 Ops/sec
Script Preparation code:
var blob = new Blob([ ` let bitmap = undefined; let canvas = undefined; let ctx = undefined; let postAMessage=self.postMessage; self.onmessage = function(ev) { if(ev.data.msg === 'bitmap' && canvas != undefined) { bitmap = ev.data.imageB; console.log("Received an ImageBitmap next!"); while (true) { ctx.clearRect(0,0,640,480); ctx.drawImage(bitmap, 0,0); } } if(ev.data.msg === 'init' && bitmap != undefined) { canvas = ev.data.canvas; ctx = canvas.getContext('2d'); console.log("Received a canvas next!"); while (true) { ctx.clearRect(0,0,640,480); ctx.drawImage(bitmap, 0,0); } } if(ev.data.msg === 'bitmap' && canvas == undefined) { console.log("Received a bitmap first!"); bitmap = ev.data.imageB; } if(ev.data.msg === 'init' && bitmap == undefined) { console.log("Received a canvas first!"); canvas = ev.data.canvas; ctx = canvas.getContext('2d'); } } `]); var myWorker = new Worker(window.URL.createObjectURL(blob)); var buff = new ArrayBuffer(8); var img = new Image(); img.crossOrigin = 'Anonymous'; img.src = "https://www.google.com/s2/favicons?domain=www.google.com"; img.decode().then(() => {createImageBitmap(img).then(Ibitmap => { myWorker.postMessage({imageB: Ibitmap, msg:'bitmap'}, [Ibitmap]); })}); var canvas = document.createElement("canvas"); var c2 = document.createElement("canvas"); c2.width = 640; c2.height = 480; c2 = c2.transferControlToOffscreen(); canvas.width = 640; canvas.height = 480; c2.width = 640; c2.height = 480; var ctx = canvas.getContext('2d'); myWorker.postMessage({msg: 'init', canvas: c2}, [c2]);
Tests:
Main Thread
if (img.width > 0){ ctx.drawImage(img, 0, 0); var imageData = ctx.getImageData(0, 0, img.width, img.height); }
Worker Thread
if (img.width > 0) myWorker.postMessage(buff);