From f6b9b61a3b3cd538109e2f90fbaf5a12b0da858c Mon Sep 17 00:00:00 2001 From: Rafael Mello Campanari Date: Wed, 14 Dec 2016 00:37:56 -0200 Subject: [PATCH 1/2] Memory management fix | Adding max number of active threads --- app/scripts/main.js | 62 ++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/app/scripts/main.js b/app/scripts/main.js index 3cfe4f2b2..546c99c0e 100644 --- a/app/scripts/main.js +++ b/app/scripts/main.js @@ -19,6 +19,8 @@ (function() { 'use strict'; + var imageDecoderWorker = new Worker('scripts/jsqrcode/qrworker.js'); + var QRCodeCamera = function(element) { // Controls the Camera and the QRCode Module @@ -28,53 +30,51 @@ cameraManager.onframe = function() { // There is a frame in the camera, what should we do with it? - - var imageData = cameraManager.getImageData(); - var detectedQRCode = qrCodeManager.detectQRCode(imageData, function(url) { - if(url !== undefined) { - qrCodeManager.showDialog(url); - } - }); + if (qrCodeManager.numActiveThreads < qrCodeManager.maxThreads) { + qrCodeManager.detectQRCode(cameraManager.getImageData()); + qrCodeManager.numActiveThreads++; + } + }; + + // Worker listener + imageDecoderWorker.onmessage = function (e) { + var url = e.data; + // freeing 1 thread slot + qrCodeManager.numActiveThreads--; + + if (url) { + // found a QRCode + qrCodeManager.showDialog(url); + qrCodeManager.currentUrl = url; + } + }; + imageDecoderWorker.onerror = function(error) { + function WorkerException(message) { + this.name = "WorkerException"; + this.message = message; + }; + throw new WorkerException('Decoder error'); }; }; var QRCodeManager = function(element) { + this.numActiveThreads = 0; + this.maxThreads = 4; + var root = document.getElementById(element); var canvas = document.getElementById("qr-canvas"); var qrcodeData = root.querySelector(".QRCodeSuccessDialog-data"); var qrcodeNavigate = root.querySelector(".QRCodeSuccessDialog-navigate"); var qrcodeIgnore = root.querySelector(".QRCodeSuccessDialog-ignore"); - var client = new QRClient(); - var imageDecoderWorker = new Worker('scripts/jsqrcode/qrworker.js'); - var self = this; this.currentUrl = undefined; - this.detectQRCode = function(imageData, callback) { - callback = callback || function() {}; - + this.detectQRCode = function(imageData) { imageDecoderWorker.postMessage(imageData); - - imageDecoderWorker.onmessage = function(result) { - var url = result.data; - if(url !== undefined) { - self.currentUrl = url; - } - callback(url); - }; - - imageDecoderWorker.onerror = function(error) { - function WorkerException(message) { - this.name = "WorkerException"; - this.message = message; - }; - throw new WorkerException('Decoder error'); - callback(undefined); - }; }; this.showDialog = function(url) { @@ -226,7 +226,7 @@ else { params = { video: { optional: [{sourceId: videoSource.id}] } }; } - + gUM.call(navigator, params, function(theStream) { localStream = theStream; diff --git a/package.json b/package.json index 7802139d6..65305fc14 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "gulp-load-plugins": "^0.8.0", "gulp-minify-html": "^0.1.8", "gulp-replace": "^0.5.0", - "gulp-sass": "^1.2.2", + "gulp-sass": "^2.1.1", "gulp-size": "^1.0.0", "gulp-uglify": "^1.0.1", "gulp-uncss": "^0.5.2", From f2ee09226a9cb46ff879e43dce555627f3b57ec4 Mon Sep 17 00:00:00 2001 From: Rafael Mello Campanari Date: Wed, 28 Dec 2016 00:07:07 -0200 Subject: [PATCH 2/2] Improving maxThreads initial value --- app/scripts/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/scripts/main.js b/app/scripts/main.js index 546c99c0e..26d95e3a5 100644 --- a/app/scripts/main.js +++ b/app/scripts/main.js @@ -60,7 +60,7 @@ var QRCodeManager = function(element) { this.numActiveThreads = 0; - this.maxThreads = 4; + this.maxThreads = window.navigator.hardwareConcurrency || 4; var root = document.getElementById(element); var canvas = document.getElementById("qr-canvas");