[v2,2/3] libcamera: request: Avoid double map lookup
diff mbox series

Message ID 20250331141714.512538-2-barnabas.pocze@ideasonboard.com
State New
Headers show
Series
  • [v2,1/3] libcamera: request: Make `controls_`/`metadata_` members
Related show

Commit Message

Barnabás Pőcze March 31, 2025, 2:17 p.m. UTC
Use `try_emplace()` that more or less combines `find()` and `operator[]`
in one function.

Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
---
 src/libcamera/request.cpp | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

Comments

Kieran Bingham March 31, 2025, 6 p.m. UTC | #1
Quoting Barnabás Pőcze (2025-03-31 15:17:13)
> Use `try_emplace()` that more or less combines `find()` and `operator[]`
> in one function.
> 

Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>

> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
> ---
>  src/libcamera/request.cpp | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
> index e7eb1c0c8..fc364441a 100644
> --- a/src/libcamera/request.cpp
> +++ b/src/libcamera/request.cpp
> @@ -475,15 +475,14 @@ int Request::addBuffer(const Stream *stream, FrameBuffer *buffer,
>                 return -EEXIST;
>         }
>  
> -       auto it = bufferMap_.find(stream);
> -       if (it != bufferMap_.end()) {
> +       auto [it, inserted] = bufferMap_.try_emplace(stream, buffer);
> +       if (!inserted) {
>                 LOG(Request, Error) << "FrameBuffer already set for stream";
>                 return -EEXIST;
>         }
>  
>         buffer->_d()->setRequest(this);
>         _d()->pending_.insert(buffer);
> -       bufferMap_[stream] = buffer;
>  
>         if (fence && fence->isValid())
>                 buffer->_d()->setFence(std::move(fence));
> -- 
> 2.49.0
>
Laurent Pinchart April 1, 2025, 10:37 p.m. UTC | #2
Hi Barnabás,

Thank you for the patch.

On Mon, Mar 31, 2025 at 07:00:08PM +0100, Kieran Bingham wrote:
> Quoting Barnabás Pőcze (2025-03-31 15:17:13)
> > Use `try_emplace()` that more or less combines `find()` and `operator[]`
> > in one function.
> 
> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
> 
> > Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> > ---
> >  src/libcamera/request.cpp | 5 ++---
> >  1 file changed, 2 insertions(+), 3 deletions(-)
> > 
> > diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
> > index e7eb1c0c8..fc364441a 100644
> > --- a/src/libcamera/request.cpp
> > +++ b/src/libcamera/request.cpp
> > @@ -475,15 +475,14 @@ int Request::addBuffer(const Stream *stream, FrameBuffer *buffer,
> >                 return -EEXIST;
> >         }
> >  
> > -       auto it = bufferMap_.find(stream);
> > -       if (it != bufferMap_.end()) {
> > +       auto [it, inserted] = bufferMap_.try_emplace(stream, buffer);
> > +       if (!inserted) {
> >                 LOG(Request, Error) << "FrameBuffer already set for stream";
> >                 return -EEXIST;
> >         }
> >  
> >         buffer->_d()->setRequest(this);
> >         _d()->pending_.insert(buffer);
> > -       bufferMap_[stream] = buffer;
> >  
> >         if (fence && fence->isValid())
> >                 buffer->_d()->setFence(std::move(fence));

Patch
diff mbox series

diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
index e7eb1c0c8..fc364441a 100644
--- a/src/libcamera/request.cpp
+++ b/src/libcamera/request.cpp
@@ -475,15 +475,14 @@  int Request::addBuffer(const Stream *stream, FrameBuffer *buffer,
 		return -EEXIST;
 	}
 
-	auto it = bufferMap_.find(stream);
-	if (it != bufferMap_.end()) {
+	auto [it, inserted] = bufferMap_.try_emplace(stream, buffer);
+	if (!inserted) {
 		LOG(Request, Error) << "FrameBuffer already set for stream";
 		return -EEXIST;
 	}
 
 	buffer->_d()->setRequest(this);
 	_d()->pending_.insert(buffer);
-	bufferMap_[stream] = buffer;
 
 	if (fence && fence->isValid())
 		buffer->_d()->setFence(std::move(fence));