{"ScriptPreparationCode":"$c = document.getElementById(\u0027c\u0027);\r\n$ctx = $c.getContext(\u00272d\u0027);\r\n$ctx.clearRect(0, 0, 10000, 500);\r\n$px = $ctx.createImageData(1000, 500);\r\n$pxls = [];\r\nfor (var i=0; i\u003C500000; \u002B\u002Bi) $pxls.push({\r\n x: Math.random() * 1000 \u003C\u003C 0,\r\n y: Math.random() * 500 \u003C\u003C 0,\r\n r: Math.random() * 255 \u003C\u003C 0,\r\n g: Math.random() * 255 \u003C\u003C 0,\r\n b: Math.random() * 255 \u003C\u003C 0,\r\n a: Math.random() * 128 \u003C\u003C 0 \u002B 128\r\n});\r\n$i = 0;","TestCases":[{"Name":"1*1 fillRect/concat","Code":"for (var i=1000;i--;){\r\n for(var j=500;j--;){\r\n var px = $pxls[i*j]\r\n $ctx.fillStyle = \u0027rgba(\u0027 \u002B px.r \u002B \u0027,\u0027 \u002B px.g \u002B \u0027,\u0027 \u002B px.b \u002B \u0027,\u0027 \u002B (px.a / 255) \u002B \u0027)\u0027;\r\n $ctx.fillRect(px.x, px.y, 1, 1);\r\n }\r\n}","IsDeferred":false},{"Name":"Image Data","Code":"for (var i=0; i\u003C500000; \u002B\u002Bi){\r\n var px=$pxls[i] ;\r\n$px.data[i][0] = px.r;\r\n$px.data[i][1] = px.g;\r\n$px.data[i][2] = px.b;\r\n$px.data[i][3] = px.a;\r\n}\r\n$ctx.putImageData($px, 1000,500);","IsDeferred":false}]}