From 79dcf73cc5e3f081c17b036f82771d702faa326a Mon Sep 17 00:00:00 2001 From: Jake Archibald Date: Mon, 8 Jun 2020 12:58:35 +0100 Subject: [PATCH] Update resizer --- codecs/resize/Cargo.toml | 12 +++---- codecs/resize/Dockerfile | 2 +- codecs/resize/pkg/package.json | 2 +- codecs/resize/pkg/resize.d.ts | 1 + codecs/resize/pkg/resize.js | 52 ++----------------------------- codecs/resize/pkg/resize_bg.d.ts | 3 +- codecs/resize/pkg/resize_bg.js | 52 +++++++++++++++++++++++++++++++ codecs/resize/pkg/resize_bg.wasm | Bin 19893 -> 18462 bytes package-lock.json | 4 +-- 9 files changed, 67 insertions(+), 61 deletions(-) create mode 100644 codecs/resize/pkg/resize_bg.js diff --git a/codecs/resize/Cargo.toml b/codecs/resize/Cargo.toml index b1f14fe6..79a49687 100644 --- a/codecs/resize/Cargo.toml +++ b/codecs/resize/Cargo.toml @@ -11,25 +11,25 @@ crate-type = ["cdylib"] default = ["console_error_panic_hook", "wee_alloc"] [dependencies] -cfg-if = "0.1.2" -wasm-bindgen = "0.2.38" -resize = "0.3.0" +cfg-if = "0.1.10" +wasm-bindgen = "0.2.63" +resize = "0.4.0" # The `console_error_panic_hook` crate provides better debugging of panics by # logging them with `console.error`. This is great for development, but requires # all the `std::fmt` and `std::panicking` infrastructure, so isn't great for # code size when deploying. -console_error_panic_hook = { version = "0.1.1", optional = true } +console_error_panic_hook = { version = "0.1.6", optional = true } # `wee_alloc` is a tiny allocator for wasm that is only ~1K in code size # compared to the default allocator's ~10K. It is slower than the default # allocator, however. # # Unfortunately, `wee_alloc` requires nightly Rust when targeting wasm for now. -wee_alloc = { version = "0.4.2", optional = true } +wee_alloc = { version = "0.4.5", optional = true } [dev-dependencies] -wasm-bindgen-test = "0.2" +wasm-bindgen-test = "0.3.13" [profile.release] # Tell `rustc` to optimize for small code size. diff --git a/codecs/resize/Dockerfile b/codecs/resize/Dockerfile index 4d58a71f..813d0c71 100644 --- a/codecs/resize/Dockerfile +++ b/codecs/resize/Dockerfile @@ -3,7 +3,7 @@ RUN rustup target add wasm32-unknown-unknown RUN curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh RUN mkdir /opt/wabt && \ - curl -L https://github.com/WebAssembly/wabt/releases/download/1.0.11/wabt-1.0.11-linux.tar.gz | tar -xzf - -C /opt/wabt --strip 1 + curl -L https://github.com/WebAssembly/wabt/releases/download/1.0.15/wabt-1.0.15-linux.tar.gz | tar -xzf - -C /opt/wabt --strip 1 ENV PATH="/opt/wabt:${PATH}" WORKDIR /src diff --git a/codecs/resize/pkg/package.json b/codecs/resize/pkg/package.json index 4432d6bd..8c0daa14 100644 --- a/codecs/resize/pkg/package.json +++ b/codecs/resize/pkg/package.json @@ -11,5 +11,5 @@ ], "module": "resize.js", "types": "resize.d.ts", - "sideEffects": "false" + "sideEffects": false } \ No newline at end of file diff --git a/codecs/resize/pkg/resize.d.ts b/codecs/resize/pkg/resize.d.ts index f5266aa1..58a3b484 100644 --- a/codecs/resize/pkg/resize.d.ts +++ b/codecs/resize/pkg/resize.d.ts @@ -1,4 +1,5 @@ /* tslint:disable */ +/* eslint-disable */ /** * @param {Uint8Array} input_image * @param {number} input_width diff --git a/codecs/resize/pkg/resize.js b/codecs/resize/pkg/resize.js index dbb364ae..ef00b7e9 100644 --- a/codecs/resize/pkg/resize.js +++ b/codecs/resize/pkg/resize.js @@ -1,50 +1,2 @@ -import * as wasm from './resize_bg.wasm'; - -let cachegetUint8Memory = null; -function getUint8Memory() { - if (cachegetUint8Memory === null || cachegetUint8Memory.buffer !== wasm.memory.buffer) { - cachegetUint8Memory = new Uint8Array(wasm.memory.buffer); - } - return cachegetUint8Memory; -} - -let WASM_VECTOR_LEN = 0; - -function passArray8ToWasm(arg) { - const ptr = wasm.__wbindgen_malloc(arg.length * 1); - getUint8Memory().set(arg, ptr / 1); - WASM_VECTOR_LEN = arg.length; - return ptr; -} - -let cachegetInt32Memory = null; -function getInt32Memory() { - if (cachegetInt32Memory === null || cachegetInt32Memory.buffer !== wasm.memory.buffer) { - cachegetInt32Memory = new Int32Array(wasm.memory.buffer); - } - return cachegetInt32Memory; -} - -function getArrayU8FromWasm(ptr, len) { - return getUint8Memory().subarray(ptr / 1, ptr / 1 + len); -} -/** -* @param {Uint8Array} input_image -* @param {number} input_width -* @param {number} input_height -* @param {number} output_width -* @param {number} output_height -* @param {number} typ_idx -* @param {boolean} premultiply -* @param {boolean} color_space_conversion -* @returns {Uint8Array} -*/ -export function resize(input_image, input_width, input_height, output_width, output_height, typ_idx, premultiply, color_space_conversion) { - const retptr = 8; - const ret = wasm.resize(retptr, passArray8ToWasm(input_image), WASM_VECTOR_LEN, input_width, input_height, output_width, output_height, typ_idx, premultiply, color_space_conversion); - const memi32 = getInt32Memory(); - const v0 = getArrayU8FromWasm(memi32[retptr / 4 + 0], memi32[retptr / 4 + 1]).slice(); - wasm.__wbindgen_free(memi32[retptr / 4 + 0], memi32[retptr / 4 + 1] * 1); - return v0; -} - +import * as wasm from "./resize_bg.wasm"; +export * from "./resize_bg.js"; \ No newline at end of file diff --git a/codecs/resize/pkg/resize_bg.d.ts b/codecs/resize/pkg/resize_bg.d.ts index 51e147c3..6376fa2e 100644 --- a/codecs/resize/pkg/resize_bg.d.ts +++ b/codecs/resize/pkg/resize_bg.d.ts @@ -1,5 +1,6 @@ /* tslint:disable */ +/* eslint-disable */ export const memory: WebAssembly.Memory; +export function resize(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number): void; export function __wbindgen_malloc(a: number): number; export function __wbindgen_free(a: number, b: number): void; -export function resize(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number): void; diff --git a/codecs/resize/pkg/resize_bg.js b/codecs/resize/pkg/resize_bg.js new file mode 100644 index 00000000..be791e1f --- /dev/null +++ b/codecs/resize/pkg/resize_bg.js @@ -0,0 +1,52 @@ +import * as wasm from './resize_bg.wasm'; + +let cachegetUint8Memory0 = null; +function getUint8Memory0() { + if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) { + cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer); + } + return cachegetUint8Memory0; +} + +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} input_image +* @param {number} input_width +* @param {number} input_height +* @param {number} output_width +* @param {number} output_height +* @param {number} typ_idx +* @param {boolean} premultiply +* @param {boolean} color_space_conversion +* @returns {Uint8Array} +*/ +export function resize(input_image, input_width, input_height, output_width, output_height, typ_idx, premultiply, color_space_conversion) { + var ptr0 = passArray8ToWasm0(input_image, wasm.__wbindgen_malloc); + var len0 = WASM_VECTOR_LEN; + wasm.resize(8, ptr0, len0, input_width, input_height, output_width, output_height, typ_idx, premultiply, color_space_conversion); + var r0 = getInt32Memory0()[8 / 4 + 0]; + var r1 = getInt32Memory0()[8 / 4 + 1]; + var v1 = getArrayU8FromWasm0(r0, r1).slice(); + wasm.__wbindgen_free(r0, r1 * 1); + return v1; +} + diff --git a/codecs/resize/pkg/resize_bg.wasm b/codecs/resize/pkg/resize_bg.wasm index 50fc8dc98d7dab98a5f1aed9f4f1eb8c9b76e37a..1f9abf09fefb311851db2fea42b395a96f7d6267 100644 GIT binary patch literal 18462 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 YM8QhJt?Ze03aAxd`Im$e1|8>)sz?f?J) literal 19893 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