{"ScriptPreparationCode":"const width = 1920;\r\nconst height = 1080;\r\n\r\nlet a = new Uint8ClampedArray(4 * width * height);\r\nfor (let i = 0; i \u003C a.length; i\u002B\u002B) {\r\n a[i] = 64;\r\n}\r\n\r\nconst img = new ImageData(a, width, height);\r\n","TestCases":[{"Name":"Full Clone","Code":"const b = structuredClone(img);","IsDeferred":false},{"Name":"Transfer buffer","Code":"const c = structuredClone(img, { transfer: [a.buffer]});\r\na = c.data;","IsDeferred":false},{"Name":"Sallow Clone Buffer First","Code":"let newBuf = new Uint8ClampedArray(a.length);\r\nnewBuf.set(a)\r\n\r\nlet c = structuredClone(new ImageData(newBuf, img.width, img.height), { transfer: [newBuf.buffer]});","IsDeferred":false},{"Name":"Plain Object Instead of ImageData class","Code":"const c = structuredClone(\r\n {\r\n data: a,\r\n width,\r\n height\r\n }, \r\n { transfer: [a.buffer] }\r\n);\r\na = c.data;","IsDeferred":false},{"Name":"Manual clone","Code":"let newBuf = new Uint8ClampedArray(a.length);\r\nnewBuf.set(a)\r\n\r\nconst c = new ImageData(newBuf, img.width, img.height)","IsDeferred":false},{"Name":"Just copy buffer","Code":"let newBuf = new Uint8ClampedArray(a.length);\r\nnewBuf.set(a)","IsDeferred":false},{"Name":"Manual shallow clone into plain object","Code":"let newBuf = new Uint8ClampedArray(a.length);\r\nnewBuf.set(a)\r\n\r\nconst c = {\r\n data: newBuf,\r\n width,\r\n height\r\n }","IsDeferred":false},{"Name":"structure clone plain object with dedicated buffer copy for transfer","Code":"let newBuf = new Uint8ClampedArray(a.length);\r\nnewBuf.set(a)\r\n\r\nconst c = {\r\n data: newBuf,\r\n width,\r\n height\r\n }\r\n\r\nconst d = structuredClone(c, { transfer: [newBuf.buffer]});","IsDeferred":false},{"Name":"structure clone plain object with no transfer","Code":"const c = {\r\n data: a,\r\n width,\r\n height\r\n }\r\n\r\nconst d = structuredClone(c)","IsDeferred":false}]}