From e1c0d8ef4e4aaca6eb217faac5df73a015d9a18d Mon Sep 17 00:00:00 2001 From: David Starke Date: Wed, 17 Jan 2018 14:55:57 -0800 Subject: [PATCH] Correctly track memory for image pyramid functions --- src/Matrix.cc | 6 ++++++ test/memory.js | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/Matrix.cc b/src/Matrix.cc index 1e6f292..8cd71c3 100755 --- a/src/Matrix.cc +++ b/src/Matrix.cc @@ -2180,14 +2180,20 @@ NAN_METHOD(Matrix::WarpAffine) { NAN_METHOD(Matrix::PyrDown) { SETUP_FUNCTION(Matrix) + int oldSize = self->mat.dataend - self->mat.datastart; cv::pyrDown(self->mat, self->mat); + int newSize = self->mat.dataend - self->mat.datastart; + Nan::AdjustExternalMemory(newSize - oldSize); return; } NAN_METHOD(Matrix::PyrUp) { SETUP_FUNCTION(Matrix) + int oldSize = self->mat.dataend - self->mat.datastart; cv::pyrUp(self->mat, self->mat); + int newSize = self->mat.dataend - self->mat.datastart; + Nan::AdjustExternalMemory(newSize - oldSize); return; } diff --git a/test/memory.js b/test/memory.js index e414bb9..b151345 100644 --- a/test/memory.js +++ b/test/memory.js @@ -825,6 +825,43 @@ test("Matrix reshape", t=>{ t.end(); }); +test("Matrix pyrDown", t=>{ + gc(); + var startingMemory = process.memoryUsage().external; + + var image = new cv.Matrix(100, 100, cv.Constants.CV_8UC3, [0,0,0]); + t.equal(process.memoryUsage().external - startingMemory, 30000); //100 * 100 * 3 + + image.pyrDown(); + + t.equal(process.memoryUsage().external - startingMemory, 7500); //50 * 50 * 3 + + image.release(); + + var endingMemory = process.memoryUsage().external; + t.equal(endingMemory - startingMemory, 0); + t.end(); +}); + +test("Matrix pyrUp", t=>{ + gc(); + var startingMemory = process.memoryUsage().external; + + var image = new cv.Matrix(100, 100, cv.Constants.CV_8UC3, [0,0,0]); + t.equal(process.memoryUsage().external - startingMemory, 30000); //100 * 100 * 3 + + image.pyrUp(); + + t.equal(process.memoryUsage().external - startingMemory, 120000); //200 * 200 * 3 + + image.release(); + + var endingMemory = process.memoryUsage().external; + t.equal(endingMemory - startingMemory, 0); + t.end(); +}); + + //******************** // Additional Asynchronous Matrix Functions //********************