From 6476b8d6988c62c745516f9addb667c5f67e6251 Mon Sep 17 00:00:00 2001 From: Harsh Khandeparkar <34770591+HarshKhandeparkar@users.noreply.github.com> Date: Thu, 19 Dec 2019 23:45:42 +0000 Subject: [PATCH] [GCI] Added Lightning Bolt for WASM accelerated modules (#1365) * wasmSuccess * modules use wasmSuccess * modules use wasmSuccess * add the tooltip --- examples/demo.css | 8 ++++---- examples/lib/defaultHtmlStepUi.js | 19 +++++++++++++++++-- src/Run.js | 2 ++ src/modules/AddQR/Module.js | 7 ++++--- src/modules/Average/Module.js | 9 ++------- src/modules/Blend/Module.js | 7 ++----- src/modules/BlobAnalysis/Module.js | 5 ++--- src/modules/Blur/Module.js | 7 ++----- src/modules/Brightness/Module.js | 7 ++----- src/modules/CanvasResize/Module.js | 7 ++----- src/modules/Channel/Module.js | 7 ++----- src/modules/ColorTemperature/Module.js | 6 ++---- src/modules/Colormap/Module.js | 8 +++----- src/modules/Contrast/Module.js | 7 ++----- src/modules/Convolution/Module.js | 6 ++---- src/modules/DecodeQr/Module.js | 9 +++------ src/modules/Dither/Module.js | 6 ++---- src/modules/DrawRectangle/Module.js | 6 ++---- src/modules/Dynamic/Module.js | 8 +++----- src/modules/EdgeDetect/Module.js | 4 ++-- src/modules/Exposure/Module.js | 7 ++----- src/modules/FlipImage/Module.js | 5 +++-- src/modules/GammaCorrection/Module.js | 6 ++---- src/modules/Gradient/Module.js | 7 ++----- src/modules/GridOverlay/Module.js | 7 ++----- src/modules/Histogram/Module.js | 7 ++----- src/modules/Invert/Module.js | 7 ++----- src/modules/MinifyImage/Module.js | 9 ++------- src/modules/Ndvi/Module.js | 7 ++----- src/modules/NoiseReduction/Module.js | 6 ++---- src/modules/Overlay/Module.js | 7 ++----- src/modules/PaintBucket/Module.js | 5 ++--- src/modules/ReplaceColor/Module.js | 7 ++----- src/modules/Resize/Module.js | 6 ++---- src/modules/Rotate/Module.js | 5 ++--- src/modules/Saturation/Module.js | 7 ++----- src/modules/TextOverlay/Module.js | 7 ++----- src/modules/Threshold/Module.js | 7 ++++--- src/modules/Tint/Module.js | 7 ++----- src/modules/WhiteBalance/Module.js | 6 ++---- src/modules/_nomodule/PixelManipulation.js | 15 ++++++++++++++- 41 files changed, 119 insertions(+), 173 deletions(-) diff --git a/examples/demo.css b/examples/demo.css index 857f81a2..2b9c9f90 100644 --- a/examples/demo.css +++ b/examples/demo.css @@ -296,19 +296,19 @@ a.name-header{ cursor: default; } -.dimension-tooltip:hover{ +.general-tooltip:hover{ text-decoration: none; } -.dimension-tooltip:focus{ +.general-tooltip:focus{ outline: none; } -.dimension-tooltip:focus-within{ +.general-tooltip:focus-within{ outline: none; } -.dimension-tooltip{ +.general-tooltip{ position: relative; bottom: 7px; font-size: 16px; diff --git a/examples/lib/defaultHtmlStepUi.js b/examples/lib/defaultHtmlStepUi.js index 163a0207..76cce036 100644 --- a/examples/lib/defaultHtmlStepUi.js +++ b/examples/lib/defaultHtmlStepUi.js @@ -28,7 +28,14 @@ function DefaultHtmlStepUi(_sequencer, options) {
\
\
\ -
\ +
\ + \ + \ +
\

' + '' + step.name + ' \ \ @@ -335,7 +342,15 @@ function DefaultHtmlStepUi(_sequencer, options) { _sequencer.getImageDimensions(step.imgElement.src, function (dim) { step.ui.querySelector('.' + step.name).attributes['data-original-title'].value = `

Image Width: ${dim.width}
Image Height: ${dim.height}

`; }); - }); + }) + + // Handle the wasm bolt display + + if (step.useWasm) { + if (step.wasmSuccess) $step('.wasm-tooltip').fadeIn(); + else $step('.wasm-tooltip').fadeOut(); + } + else $step('.wasm-tooltip').fadeOut(); } function imageHover(step){ diff --git a/src/Run.js b/src/Run.js index b6cc74df..29cad9de 100644 --- a/src/Run.js +++ b/src/Run.js @@ -45,6 +45,8 @@ function Run(ref, json_q, callback, ind, progressObj) { // This output is accessible by UI ref.steps[i].options.step.output = ref.steps[i].output.src; + ref.steps[i].options.step.wasmSuccess = ref.steps[i].output.wasmSuccess || false; + ref.steps[i].options.step.useWasm = ref.steps[i].output.useWasm || false; // Tell UI that step has been drawn. ref.steps[i].UI.onComplete(ref.steps[i].options.step); diff --git a/src/modules/AddQR/Module.js b/src/modules/AddQR/Module.js index 1f65b61f..ca88fa0f 100644 --- a/src/modules/AddQR/Module.js +++ b/src/modules/AddQR/Module.js @@ -25,9 +25,11 @@ module.exports = function AddQR(options, UI) { } require('./QR')(options, pixels, oldPixels, generateOutput); } - function output(image, datauri, mimetype) { - step.output = { src: datauri, format: mimetype }; + + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } + return require('../_nomodule/PixelManipulation.js')(input, { output: output, ui: options.step.ui, @@ -40,7 +42,6 @@ module.exports = function AddQR(options, UI) { useWasm:options.useWasm }); }); - } return { diff --git a/src/modules/Average/Module.js b/src/modules/Average/Module.js index 462de146..4f19751b 100755 --- a/src/modules/Average/Module.js +++ b/src/modules/Average/Module.js @@ -47,13 +47,8 @@ module.exports = function Average(options, UI) { return pixels; } - function output(image, datauri, mimetype) { - - // This output is accessible by Image Sequencer - step.output = { - src: datauri, - format: mimetype - }; + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/Blend/Module.js b/src/modules/Blend/Module.js index dd8af882..bf8d7987 100644 --- a/src/modules/Blend/Module.js +++ b/src/modules/Blend/Module.js @@ -47,11 +47,8 @@ module.exports = function Dynamic(options, UI, util) { ); } - function output(image, datauri, mimetype) { - - // This output is accessible by Image Sequencer - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } // run PixelManipulatin on second image's pixels diff --git a/src/modules/BlobAnalysis/Module.js b/src/modules/BlobAnalysis/Module.js index f654cdc2..ebacb3c5 100644 --- a/src/modules/BlobAnalysis/Module.js +++ b/src/modules/BlobAnalysis/Module.js @@ -18,9 +18,8 @@ module.exports = function BlobAnalysis(options, UI){ return pixels; } - function output(image, datauri, mimetype){ - - step.output = { src: datauri, format: mimetype}; + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/Blur/Module.js b/src/modules/Blur/Module.js index 8e75cfc6..b470aae0 100755 --- a/src/modules/Blur/Module.js +++ b/src/modules/Blur/Module.js @@ -20,11 +20,8 @@ module.exports = function Blur(options, UI) { return pixels; } - function output(image, datauri, mimetype) { - - // This output is accessible by Image Sequencer - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/Brightness/Module.js b/src/modules/Brightness/Module.js index c230ba3d..b004ef9c 100644 --- a/src/modules/Brightness/Module.js +++ b/src/modules/Brightness/Module.js @@ -31,11 +31,8 @@ module.exports = function Brightness(options, UI) { return [r, g, b, a]; } - function output(image, datauri, mimetype) { - - // This output is accessible by Image Sequencer - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/CanvasResize/Module.js b/src/modules/CanvasResize/Module.js index cee2ca5e..2ce4c8cc 100644 --- a/src/modules/CanvasResize/Module.js +++ b/src/modules/CanvasResize/Module.js @@ -35,11 +35,8 @@ module.exports = function canvasResize(options, UI) { return newPixels; } - function output(image, datauri, mimetype) { - - // This output is accessible by Image Sequencer - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/Channel/Module.js b/src/modules/Channel/Module.js index 162cdd16..ac51b3c4 100644 --- a/src/modules/Channel/Module.js +++ b/src/modules/Channel/Module.js @@ -22,11 +22,8 @@ module.exports = function Channel(options, UI) { if (options.channel === 'blue') return [0, 0, b, a]; } - function output(image, datauri, mimetype) { - - // This output is accesible by Image Sequencer - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/ColorTemperature/Module.js b/src/modules/ColorTemperature/Module.js index 1b976418..c8c7ffad 100644 --- a/src/modules/ColorTemperature/Module.js +++ b/src/modules/ColorTemperature/Module.js @@ -52,10 +52,8 @@ module.exports = function ColorTemperature(options, UI) { return pixels; } - function output(image, datauri, mimetype) { - - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/Colormap/Module.js b/src/modules/Colormap/Module.js index 13c65298..328b2b0b 100644 --- a/src/modules/Colormap/Module.js +++ b/src/modules/Colormap/Module.js @@ -16,12 +16,10 @@ module.exports = function Colormap(options, UI) { return [res[0], res[1], res[2], 255]; } - function output(image, datauri, mimetype) { - - // This output is accessible by Image Sequencer - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } + return require('../_nomodule/PixelManipulation.js')(input, { output: output, ui: options.step.ui, diff --git a/src/modules/Contrast/Module.js b/src/modules/Contrast/Module.js index 111598f3..2040f0ee 100644 --- a/src/modules/Contrast/Module.js +++ b/src/modules/Contrast/Module.js @@ -20,11 +20,8 @@ module.exports = function Contrast(options, UI) { return pixels; } - function output(image, datauri, mimetype) { - - // This output is accessible by Image Sequencer - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/Convolution/Module.js b/src/modules/Convolution/Module.js index 4e55a54e..1c98ec62 100644 --- a/src/modules/Convolution/Module.js +++ b/src/modules/Convolution/Module.js @@ -19,10 +19,8 @@ module.exports = function Convolution(options, UI) { return pixels; } - function output(image, datauri, mimetype) { - - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/DecodeQr/Module.js b/src/modules/DecodeQr/Module.js index 226dfdc7..e0415342 100644 --- a/src/modules/DecodeQr/Module.js +++ b/src/modules/DecodeQr/Module.js @@ -28,13 +28,10 @@ module.exports = function DoNothing(options, UI) { options.step.qrval = (decoded) ? decoded.data : 'undefined'; }); - function output(image, datauri, mimetype) { - // This output is accessible by Image Sequencer - step.output = { - src: datauri, - format: mimetype - }; + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } + return require('../_nomodule/PixelManipulation.js')(input, { output: output, ui: options.step.ui, diff --git a/src/modules/Dither/Module.js b/src/modules/Dither/Module.js index 71e802f1..33333f0d 100644 --- a/src/modules/Dither/Module.js +++ b/src/modules/Dither/Module.js @@ -15,10 +15,8 @@ module.exports = function Dither(options, UI) { return pixels; } - function output(image, datauri, mimetype) { - // This output is accessible by Image Sequencer - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/DrawRectangle/Module.js b/src/modules/DrawRectangle/Module.js index 7e3b4922..6f2cc2f6 100644 --- a/src/modules/DrawRectangle/Module.js +++ b/src/modules/DrawRectangle/Module.js @@ -19,10 +19,8 @@ module.exports = function DrawRectangle(options, UI) { return pixels; } - function output(image, datauri, mimetype) { - - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/Dynamic/Module.js b/src/modules/Dynamic/Module.js index b6eab345..ec4c56b0 100644 --- a/src/modules/Dynamic/Module.js +++ b/src/modules/Dynamic/Module.js @@ -71,12 +71,10 @@ module.exports = function Dynamic(options, UI) { } } - function output(image, datauri, mimetype) { - - // This output is accessible by Image Sequencer - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } + return require('../_nomodule/PixelManipulation.js')(input, { output: output, ui: options.step.ui, diff --git a/src/modules/EdgeDetect/Module.js b/src/modules/EdgeDetect/Module.js index 113dfa2a..404f688e 100644 --- a/src/modules/EdgeDetect/Module.js +++ b/src/modules/EdgeDetect/Module.js @@ -38,8 +38,8 @@ module.exports = function edgeDetect(options, UI) { return require('./EdgeUtils')(blurPixels, options.highThresholdRatio, options.lowThresholdRatio, options.hysteresis); } - function output(image, datauri, mimetype) { - step.output = { src: datauri, format: mimetype }; + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/Exposure/Module.js b/src/modules/Exposure/Module.js index 8bb7189a..745077e6 100644 --- a/src/modules/Exposure/Module.js +++ b/src/modules/Exposure/Module.js @@ -24,11 +24,8 @@ module.exports = function Exposure(options, UI) { return [r, g, b, a]; } - function output(image, datauri, mimetype) { - - // This output is accessible by Image Sequencer - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/FlipImage/Module.js b/src/modules/FlipImage/Module.js index 59f19fa2..5b59befc 100644 --- a/src/modules/FlipImage/Module.js +++ b/src/modules/FlipImage/Module.js @@ -25,8 +25,9 @@ module.exports = function FlipImage(options, UI) { } return require('./flipImage')(oldPixels, pixels, options.Axis); } - function output(image, datauri, mimetype) { - step.output = { src: datauri, format: mimetype }; + + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/GammaCorrection/Module.js b/src/modules/GammaCorrection/Module.js index 18a4ee75..14ae96ef 100644 --- a/src/modules/GammaCorrection/Module.js +++ b/src/modules/GammaCorrection/Module.js @@ -21,10 +21,8 @@ module.exports = function Gamma(options, UI) { return [r, g, b, a]; } - function output(image, datauri, mimetype) { - - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/Gradient/Module.js b/src/modules/Gradient/Module.js index 8d3c1249..5ddd4559 100644 --- a/src/modules/Gradient/Module.js +++ b/src/modules/Gradient/Module.js @@ -44,11 +44,8 @@ module.exports = function Invert(options, UI) { }); }); - function output(image, datauri, mimetype) { - - // This output is accessible by Image Sequencer - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } } diff --git a/src/modules/GridOverlay/Module.js b/src/modules/GridOverlay/Module.js index 5f697c20..121ba6d4 100644 --- a/src/modules/GridOverlay/Module.js +++ b/src/modules/GridOverlay/Module.js @@ -15,11 +15,8 @@ module.exports = function GridOverlay(options, UI) { return pixels; } - function output(image, datauri, mimetype) { - - // This output is accesible by Image Sequencer - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/Histogram/Module.js b/src/modules/Histogram/Module.js index 3179dec0..e556911f 100644 --- a/src/modules/Histogram/Module.js +++ b/src/modules/Histogram/Module.js @@ -63,11 +63,8 @@ module.exports = function Channel(options, UI) { return pixels; } - function output(image, datauri, mimetype) { - - // This output is accesible by Image Sequencer - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/Invert/Module.js b/src/modules/Invert/Module.js index b6176b8f..ca0b9702 100644 --- a/src/modules/Invert/Module.js +++ b/src/modules/Invert/Module.js @@ -17,11 +17,8 @@ function Invert(options, UI) { return [255 - r, 255 - g, 255 - b, a]; } - function output(image, datauri, mimetype) { - - // This output is accessible by Image Sequencer - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return input.pixelManipulation({ diff --git a/src/modules/MinifyImage/Module.js b/src/modules/MinifyImage/Module.js index 35d527c6..198c34da 100644 --- a/src/modules/MinifyImage/Module.js +++ b/src/modules/MinifyImage/Module.js @@ -82,13 +82,8 @@ module.exports = function MinifyImage(options, UI) { } - function output(datauri, mimetype) { - - // This output is accessible by Image Sequencer - step.output = { - src: datauri, - format: mimetype - }; + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } } return { diff --git a/src/modules/Ndvi/Module.js b/src/modules/Ndvi/Module.js index 7754abbd..478bfa0d 100644 --- a/src/modules/Ndvi/Module.js +++ b/src/modules/Ndvi/Module.js @@ -25,11 +25,8 @@ module.exports = function Ndvi(options, UI) { return [x, x, x, a]; } - function output(image, datauri, mimetype) { - - // This output is accessible by Image Sequencer - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } function modifiedCallback() { diff --git a/src/modules/NoiseReduction/Module.js b/src/modules/NoiseReduction/Module.js index 3c6272e3..f2e03487 100644 --- a/src/modules/NoiseReduction/Module.js +++ b/src/modules/NoiseReduction/Module.js @@ -15,10 +15,8 @@ module.exports = function NoiseReduction(options, UI) { return pixels; } - function output(image, datauri, mimetype) { - // This output is accessible by Image Sequencer - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/Overlay/Module.js b/src/modules/Overlay/Module.js index d34af36a..40109fbc 100644 --- a/src/modules/Overlay/Module.js +++ b/src/modules/Overlay/Module.js @@ -55,11 +55,8 @@ module.exports = function Dynamic(options, UI, util) { return [r1, g1, b1, a1]; } - function output(image, datauri, mimetype) { - - // This output is accessible by Image Sequencer - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } // run PixelManipulation on first Image pixels diff --git a/src/modules/PaintBucket/Module.js b/src/modules/PaintBucket/Module.js index 4c5bf1c7..7b80a8bb 100644 --- a/src/modules/PaintBucket/Module.js +++ b/src/modules/PaintBucket/Module.js @@ -16,9 +16,8 @@ module.exports = function PaintBucket(options, UI) { } - function output(image, datauri, mimetype) { - // This output is accesible by Image Sequencer - step.output = { src: datauri, format: mimetype }; + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/ReplaceColor/Module.js b/src/modules/ReplaceColor/Module.js index 50934c6b..9d011e62 100644 --- a/src/modules/ReplaceColor/Module.js +++ b/src/modules/ReplaceColor/Module.js @@ -18,11 +18,8 @@ module.exports = function ReplaceColor(options, UI) { return pixels; } - function output(image, datauri, mimetype) { - - // This output is accessible by Image Sequencer - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/Resize/Module.js b/src/modules/Resize/Module.js index bf34cdb1..46f39180 100644 --- a/src/modules/Resize/Module.js +++ b/src/modules/Resize/Module.js @@ -47,11 +47,9 @@ module.exports = function Resize(options, UI) { return pixels; } - function output(image, datauri, mimetype) { - // This output is accesible by Image Sequencer - step.output = { src: datauri, format: mimetype }; + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } - return require('../_nomodule/PixelManipulation.js')(input, { output: output, ui: options.step.ui, diff --git a/src/modules/Rotate/Module.js b/src/modules/Rotate/Module.js index 6c522d4d..010e8e5f 100644 --- a/src/modules/Rotate/Module.js +++ b/src/modules/Rotate/Module.js @@ -35,9 +35,8 @@ module.exports = function Rotate(options, UI) { } - function output(image, datauri, mimetype) { - // This output is accesible by Image Sequencer - step.output = { src: datauri, format: mimetype }; + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/Saturation/Module.js b/src/modules/Saturation/Module.js index 93ca04f4..834b9293 100644 --- a/src/modules/Saturation/Module.js +++ b/src/modules/Saturation/Module.js @@ -31,11 +31,8 @@ module.exports = function Saturation(options, UI) { return [Math.round(r), Math.round(g), Math.round(b), a]; } - function output(image, datauri, mimetype) { - - // This output is accesible by Image Sequencer - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/TextOverlay/Module.js b/src/modules/TextOverlay/Module.js index 64683136..8589110a 100644 --- a/src/modules/TextOverlay/Module.js +++ b/src/modules/TextOverlay/Module.js @@ -15,11 +15,8 @@ module.exports = function TextOverlay(options, UI) { return pixels; } - function output(image, datauri, mimetype) { - - // This output is accesible by Image Sequencer - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/Threshold/Module.js b/src/modules/Threshold/Module.js index fc0e0ef6..cf9cb1ec 100644 --- a/src/modules/Threshold/Module.js +++ b/src/modules/Threshold/Module.js @@ -22,10 +22,11 @@ module.exports = function ImageThreshold(options, UI) { pixels = require('./Threshold')(pixels, options, hist); return pixels; } - function output(image, datauri, mimetype) { - // This output is accessible by Image Sequencer - step.output = { src: datauri, format: mimetype }; + + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } + return require('../_nomodule/PixelManipulation.js')(input, { output: output, ui: options.step.ui, diff --git a/src/modules/Tint/Module.js b/src/modules/Tint/Module.js index 76799af3..9d6cdbbd 100644 --- a/src/modules/Tint/Module.js +++ b/src/modules/Tint/Module.js @@ -25,11 +25,8 @@ module.exports = function Tint(options, UI) { return [r, g, b, a]; } - function output(image, datauri, mimetype) { - - // This output is accessible by Image Sequencer - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/WhiteBalance/Module.js b/src/modules/WhiteBalance/Module.js index 731259e5..7e01b65e 100644 --- a/src/modules/WhiteBalance/Module.js +++ b/src/modules/WhiteBalance/Module.js @@ -32,10 +32,8 @@ module.exports = function Balance(options, UI) { return pixels; } - function output(image, datauri, mimetype) { - - step.output = { src: datauri, format: mimetype }; - + function output(image, datauri, mimetype, wasmSuccess) { + step.output = { src: datauri, format: mimetype, wasmSuccess, useWasm: options.useWasm }; } return require('../_nomodule/PixelManipulation.js')(input, { diff --git a/src/modules/_nomodule/PixelManipulation.js b/src/modules/_nomodule/PixelManipulation.js index 3ad6223b..af69ccc4 100644 --- a/src/modules/_nomodule/PixelManipulation.js +++ b/src/modules/_nomodule/PixelManipulation.js @@ -15,6 +15,7 @@ module.exports = function PixelManipulation(image, options) { // like input.pixelManipulation(options) const pixelSetter = require('../../util/pixelSetter.js'); + let wasmSuccess; // Whether wasm succeded or failed if (arguments.length <= 1) { options = image; @@ -67,10 +68,11 @@ module.exports = function PixelManipulation(image, options) { var data = Buffer.concat(chunks, totalLength).toString('base64'); var datauri = 'data:image/' + options.format + ';base64,' + data; if (options.output) - options.output(options.image, datauri, options.format); + options.output(options.image, datauri, options.format, wasmSuccess); if (options.callback) options.callback(); }); } + if (res) { pixels = res; generateOutput(); @@ -113,6 +115,7 @@ module.exports = function PixelManipulation(image, options) { const inBrowser = (options.inBrowser) ? 1 : 0; const test = (process.env.TEST) ? 1 : 0; + if (options.useWasm) { if (options.inBrowser) { @@ -122,10 +125,14 @@ module.exports = function PixelManipulation(image, options) { WebAssembly.instantiate(bytes, imports) ).then(results => { results.instance.exports.manipulatePixel(pixels.shape[0], pixels.shape[1], inBrowser, test); + wasmSuccess = true; + extraOperation(); }).catch(err => { console.log(err); console.log('WebAssembly acceleration errored; falling back to JavaScript in PixelManipulation'); + wasmSuccess = false; + perPixelManipulation(); extraOperation(); }); @@ -137,17 +144,23 @@ module.exports = function PixelManipulation(image, options) { const buf = fs.readFileSync(wasmPath); WebAssembly.instantiate(buf, imports).then(results => { results.instance.exports.manipulatePixel(pixels.shape[0], pixels.shape[1], inBrowser, test); + wasmSuccess = true; + extraOperation(); }); } catch(err){ console.log(err); console.log('WebAssembly acceleration errored; falling back to JavaScript in PixelManipulation'); + wasmSuccess = false; + perPixelManipulation(); extraOperation(); } } } else { + wasmSuccess = false; + perPixelManipulation(); extraOperation(); }