From 56dfbcd73529ee6dc42a17a139c9ceaccf1def3d Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Tue, 6 Mar 2018 22:53:36 +0100 Subject: Avoid copies in ThreadsafeQueue and Buffer --- src/ModPlugin.cpp | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) (limited to 'src/ModPlugin.cpp') diff --git a/src/ModPlugin.cpp b/src/ModPlugin.cpp index d567a90..f907ba8 100644 --- a/src/ModPlugin.cpp +++ b/src/ModPlugin.cpp @@ -2,7 +2,7 @@ Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Her Majesty the Queen in Right of Canada (Communications Research Center Canada) - Copyright (C) 2017 + Copyright (C) 2018 Matthias P. Braendli, matthias.braendli@mpb.li http://opendigitalradio.org @@ -29,6 +29,7 @@ #include "Utils.h" #include #include +#include #define MODASSERT(cond) \ if (not (cond)) { \ @@ -92,16 +93,14 @@ int PipelinedModCodec::process(Buffer* dataIn, Buffer* dataOut) return 0; } - std::shared_ptr inbuffer = - std::make_shared(dataIn->getLength(), dataIn->getData()); - - m_input_queue.push(inbuffer); + Buffer inbuffer; + std::swap(inbuffer, *dataIn); + m_input_queue.push(std::move(inbuffer)); if (m_ready_to_output_data) { - std::shared_ptr outbuffer; + Buffer outbuffer; m_output_queue.wait_and_pop(outbuffer); - - dataOut->setData(outbuffer->getData(), outbuffer->getLength()); + std::swap(outbuffer, *dataOut); } else { dataOut->setLength(dataIn->getLength()); @@ -132,21 +131,21 @@ void PipelinedModCodec::process_thread() set_realtime_prio(1); while (m_running) { - std::shared_ptr dataIn; + Buffer dataIn; m_input_queue.wait_and_pop(dataIn); - if (!dataIn or dataIn->getLength() == 0) { + if (dataIn.getLength() == 0) { break; } - std::shared_ptr dataOut = std::make_shared(); - dataOut->setLength(dataIn->getLength()); + Buffer dataOut; + dataOut.setLength(dataIn.getLength()); - if (internal_process(dataIn.get(), dataOut.get()) == 0) { + if (internal_process(&dataIn, &dataOut) == 0) { m_running = false; } - m_output_queue.push(dataOut); + m_output_queue.push(std::move(dataOut)); } m_running = false; -- cgit v1.2.3