From 5758e5db9ae6c0cc30e7341d49fcdd731f09f1d0 Mon Sep 17 00:00:00 2001 From: Ingvar Stepanyan Date: Tue, 8 Dec 2020 20:19:48 +0000 Subject: [PATCH] Fix PNG decoder returning Rust-owned ImageData --- codecs/png/package.json | 2 +- codecs/png/pkg/squoosh_png.d.ts | 4 +- codecs/png/pkg/squoosh_png.js | 313 +++++++----------------- codecs/png/pkg/squoosh_png_bg.wasm | Bin 127671 -> 127134 bytes codecs/png/pkg/squoosh_png_bg.wasm.d.ts | 4 +- codecs/png/src/lib.rs | 22 +- 6 files changed, 103 insertions(+), 242 deletions(-) diff --git a/codecs/png/package.json b/codecs/png/package.json index 5e22d088..552448fd 100644 --- a/codecs/png/package.json +++ b/codecs/png/package.json @@ -1,6 +1,6 @@ { "name": "oxipng", "scripts": { - "build": "../build-rust.sh rm -rf pkg && wasm-pack build --target web -- --verbose --locked && rm pkg/.gitignore" + "build": "../build-rust.sh" } } diff --git a/codecs/png/pkg/squoosh_png.d.ts b/codecs/png/pkg/squoosh_png.d.ts index 46614316..5670650b 100644 --- a/codecs/png/pkg/squoosh_png.d.ts +++ b/codecs/png/pkg/squoosh_png.d.ts @@ -19,10 +19,8 @@ export interface InitOutput { readonly memory: WebAssembly.Memory; readonly encode: (a: number, b: number, c: number, d: number, e: number) => void; readonly decode: (a: number, b: number) => number; - readonly __wbindgen_malloc: (a: number) => number; - readonly __wbindgen_realloc: (a: number, b: number, c: number) => number; readonly __wbindgen_free: (a: number, b: number) => void; - readonly __wbindgen_exn_store: (a: number) => void; + readonly __wbindgen_malloc: (a: number) => number; } /** diff --git a/codecs/png/pkg/squoosh_png.js b/codecs/png/pkg/squoosh_png.js index 651ae14d..1a9ef331 100644 --- a/codecs/png/pkg/squoosh_png.js +++ b/codecs/png/pkg/squoosh_png.js @@ -1,214 +1,6 @@ let wasm; -const heap = new Array(32).fill(undefined); - -heap.push(undefined, null, true, false); - -function getObject(idx) { return heap[idx]; } - -let heap_next = heap.length; - -function dropObject(idx) { - if (idx < 36) return; - heap[idx] = heap_next; - heap_next = idx; -} - -function takeObject(idx) { - const ret = getObject(idx); - dropObject(idx); - return ret; -} - -function debugString(val) { - // primitive types - const type = typeof val; - if (type == 'number' || type == 'boolean' || val == null) { - return `${val}`; - } - if (type == 'string') { - return `"${val}"`; - } - if (type == 'symbol') { - const description = val.description; - if (description == null) { - return 'Symbol'; - } else { - return `Symbol(${description})`; - } - } - if (type == 'function') { - const name = val.name; - if (typeof name == 'string' && name.length > 0) { - return `Function(${name})`; - } else { - return 'Function'; - } - } - // objects - if (Array.isArray(val)) { - const length = val.length; - let debug = '['; - if (length > 0) { - debug += debugString(val[0]); - } - for(let i = 1; i < length; i++) { - debug += ', ' + debugString(val[i]); - } - debug += ']'; - return debug; - } - // Test for built-in - const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); - let className; - if (builtInMatches.length > 1) { - className = builtInMatches[1]; - } else { - // Failed to match the standard '[object ClassName]' - return toString.call(val); - } - if (className == 'Object') { - // we're a user defined class or Object - // JSON.stringify avoids problems with cycles, and is generally much - // easier than looping through ownProperties of `val`. - try { - return 'Object(' + JSON.stringify(val) + ')'; - } catch (_) { - return 'Object'; - } - } - // errors - if (val instanceof Error) { - return `${val.name}: ${val.message}\n${val.stack}`; - } - // TODO we could test for more things here, like `Set`s and `Map`s. - return className; -} - -let WASM_VECTOR_LEN = 0; - -let cachegetUint8Memory0 = null; -function getUint8Memory0() { - if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) { - cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer); - } - return cachegetUint8Memory0; -} - -let cachedTextEncoder = new TextEncoder('utf-8'); - -const encodeString = (typeof cachedTextEncoder.encodeInto === 'function' - ? function (arg, view) { - return cachedTextEncoder.encodeInto(arg, view); -} - : function (arg, view) { - const buf = cachedTextEncoder.encode(arg); - view.set(buf); - return { - read: arg.length, - written: buf.length - }; -}); - -function passStringToWasm0(arg, malloc, realloc) { - - if (realloc === undefined) { - const buf = cachedTextEncoder.encode(arg); - const ptr = malloc(buf.length); - getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); - WASM_VECTOR_LEN = buf.length; - return ptr; - } - - let len = arg.length; - let ptr = malloc(len); - - const mem = getUint8Memory0(); - - let offset = 0; - - for (; offset < len; offset++) { - const code = arg.charCodeAt(offset); - if (code > 0x7F) break; - mem[ptr + offset] = code; - } - - if (offset !== len) { - if (offset !== 0) { - arg = arg.slice(offset); - } - ptr = realloc(ptr, len, len = offset + arg.length * 3); - const view = getUint8Memory0().subarray(ptr + offset, ptr + len); - const ret = encodeString(arg, view); - - offset += ret.written; - } - - WASM_VECTOR_LEN = offset; - return ptr; -} - -let cachegetInt32Memory0 = null; -function getInt32Memory0() { - if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) { - cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer); - } - return cachegetInt32Memory0; -} - -let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); - -cachedTextDecoder.decode(); - -function getStringFromWasm0(ptr, len) { - return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); -} - -function passArray8ToWasm0(arg, malloc) { - const ptr = malloc(arg.length * 1); - getUint8Memory0().set(arg, ptr / 1); - WASM_VECTOR_LEN = arg.length; - return ptr; -} - -function getArrayU8FromWasm0(ptr, len) { - return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len); -} -/** -* @param {Uint8Array} data -* @param {number} width -* @param {number} height -* @returns {Uint8Array} -*/ -export function encode(data, width, height) { - try { - const retptr = wasm.__wbindgen_export_2.value - 16; - wasm.__wbindgen_export_2.value = retptr; - var ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); - var len0 = WASM_VECTOR_LEN; - wasm.encode(retptr, ptr0, len0, width, height); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - var v1 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1); - return v1; - } finally { - wasm.__wbindgen_export_2.value += 16; - } -} - -/** -* @param {Uint8Array} data -* @returns {ImageData} -*/ -export function decode(data) { - var ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); - var len0 = WASM_VECTOR_LEN; - var ret = wasm.decode(ptr0, len0); - return takeObject(ret); -} - let cachegetUint8ClampedMemory0 = null; function getUint8ClampedMemory0() { if (cachegetUint8ClampedMemory0 === null || cachegetUint8ClampedMemory0.buffer !== wasm.memory.buffer) { @@ -221,6 +13,12 @@ function getClampedArrayU8FromWasm0(ptr, len) { return getUint8ClampedMemory0().subarray(ptr / 1, ptr / 1 + len); } +const heap = new Array(32).fill(undefined); + +heap.push(undefined, null, true, false); + +let heap_next = heap.length; + function addHeapObject(obj) { if (heap_next === heap.length) heap.push(heap.length + 1); const idx = heap_next; @@ -230,15 +28,79 @@ function addHeapObject(obj) { return idx; } -function handleError(f) { - return function () { - try { - return f.apply(this, arguments); +let cachegetUint8Memory0 = null; +function getUint8Memory0() { + if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) { + cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer); + } + return cachegetUint8Memory0; +} - } catch (e) { - wasm.__wbindgen_exn_store(addHeapObject(e)); - } - }; +let WASM_VECTOR_LEN = 0; + +function passArray8ToWasm0(arg, malloc) { + const ptr = malloc(arg.length * 1); + getUint8Memory0().set(arg, ptr / 1); + WASM_VECTOR_LEN = arg.length; + return ptr; +} + +let cachegetInt32Memory0 = null; +function getInt32Memory0() { + if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) { + cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer); + } + return cachegetInt32Memory0; +} + +function getArrayU8FromWasm0(ptr, len) { + return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len); +} +/** +* @param {Uint8Array} data +* @param {number} width +* @param {number} height +* @returns {Uint8Array} +*/ +export function encode(data, width, height) { + try { + const retptr = wasm.__wbindgen_export_1.value - 16; + wasm.__wbindgen_export_1.value = retptr; + var ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + var len0 = WASM_VECTOR_LEN; + wasm.encode(retptr, ptr0, len0, width, height); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var v1 = getArrayU8FromWasm0(r0, r1).slice(); + wasm.__wbindgen_free(r0, r1 * 1); + return v1; + } finally { + wasm.__wbindgen_export_1.value += 16; + } +} + +function getObject(idx) { return heap[idx]; } + +function dropObject(idx) { + if (idx < 36) return; + heap[idx] = heap_next; + heap_next = idx; +} + +function takeObject(idx) { + const ret = getObject(idx); + dropObject(idx); + return ret; +} +/** +* @param {Uint8Array} data +* @returns {ImageData} +*/ +export function decode(data) { + var ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + var len0 = WASM_VECTOR_LEN; + var ret = wasm.decode(ptr0, len0); + return takeObject(ret); } async function load(module, imports) { @@ -280,22 +142,11 @@ async function init(input) { } const imports = {}; imports.wbg = {}; - imports.wbg.__wbg_newwithu8clampedarrayandsh_104cc36644cfc313 = handleError(function(arg0, arg1, arg2, arg3) { - var ret = new ImageData(getClampedArrayU8FromWasm0(arg0, arg1), arg2 >>> 0, arg3 >>> 0); + imports.wbg.__wbg_newwithownedu8clampedarrayandsh_787b2db8ea6bfd62 = function(arg0, arg1, arg2, arg3) { + var v0 = getClampedArrayU8FromWasm0(arg0, arg1).slice(); + wasm.__wbindgen_free(arg0, arg1 * 1); + var ret = new ImageData(v0, arg2 >>> 0, arg3 >>> 0); return addHeapObject(ret); - }); - imports.wbg.__wbindgen_object_drop_ref = function(arg0) { - takeObject(arg0); - }; - imports.wbg.__wbindgen_debug_string = function(arg0, arg1) { - var ret = debugString(getObject(arg1)); - var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len0 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len0; - getInt32Memory0()[arg0 / 4 + 0] = ptr0; - }; - imports.wbg.__wbindgen_throw = function(arg0, arg1) { - throw new Error(getStringFromWasm0(arg0, arg1)); }; if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) { diff --git a/codecs/png/pkg/squoosh_png_bg.wasm b/codecs/png/pkg/squoosh_png_bg.wasm index a0ad39c330dc41ea1b8da37e90df2ec65eff2667..65f76eaa1946c5d8d2bbfbdc3cc544bfc70d3bab 100644 GIT binary patch delta 43949 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 diff --git a/codecs/png/pkg/squoosh_png_bg.wasm.d.ts b/codecs/png/pkg/squoosh_png_bg.wasm.d.ts index 87b40bef..dda8850f 100644 --- a/codecs/png/pkg/squoosh_png_bg.wasm.d.ts +++ b/codecs/png/pkg/squoosh_png_bg.wasm.d.ts @@ -3,7 +3,5 @@ export const memory: WebAssembly.Memory; export function encode(a: number, b: number, c: number, d: number, e: number): void; export function decode(a: number, b: number): number; -export function __wbindgen_malloc(a: number): number; -export function __wbindgen_realloc(a: number, b: number, c: number): number; export function __wbindgen_free(a: number, b: number): void; -export function __wbindgen_exn_store(a: number): void; +export function __wbindgen_malloc(a: number): number; diff --git a/codecs/png/src/lib.rs b/codecs/png/src/lib.rs index 11f05476..4dccd08b 100644 --- a/codecs/png/src/lib.rs +++ b/codecs/png/src/lib.rs @@ -1,7 +1,22 @@ use std::io::Cursor; use wasm_bindgen::prelude::*; -use web_sys::ImageData; +use wasm_bindgen::Clamped; + +// Custom ImageData bindings to allow construction with +// a JS-owned copy of the data. +#[wasm_bindgen] +extern "C" { + #[wasm_bindgen(typescript_type = ImageData)] + pub type ImageData; + + #[wasm_bindgen(constructor)] + fn new_with_owned_u8_clamped_array_and_sh( + data: Clamped>, + sw: u32, + sh: u32, + ) -> ImageData; +} #[wasm_bindgen(catch)] pub fn encode(data: &[u8], width: u32, height: u32) -> Vec { @@ -38,10 +53,9 @@ pub fn decode(data: &[u8]) -> ImageData { } } - ImageData::new_with_u8_clamped_array_and_sh( - wasm_bindgen::Clamped(&mut buf), + ImageData::new_with_owned_u8_clamped_array_and_sh( + wasm_bindgen::Clamped(buf), info.width, info.height, ) - .unwrap() }