[libcamera-devel] [RFC PATCH v1 05/12] libcamera: framebuffer: Move planes check to constructor

Hirokazu Honda hiroh at chromium.org
Fri Sep 3 12:57:21 CEST 2021


Hi Laurent, thank you for the patch.

On Fri, Sep 3, 2021 at 3:03 AM Laurent Pinchart
<laurent.pinchart at ideasonboard.com> wrote:
>
> Hi Kieran,
>
> On Thu, Sep 02, 2021 at 10:27:51AM +0100, Kieran Bingham wrote:
> > On 02/09/2021 05:22, Laurent Pinchart wrote:
> > > The FrameBuffer::planes() function checks that planes are correctly
> > > initialized with an offset. This can be done at construction time
> > > instead, as the planes are constant. The runtime overhead is reduced,
> > > and the backtrace generated by the assertion will show where the faulty
> > > frame buffer is created instead of where it is used, easing debugging.
> >
> > That sounds very enticing...
> >
> > > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>


Reviewed-by: Hirokazu Honda <hiroh at chromium.org>

-Hiro
> > > ---
> > >  include/libcamera/framebuffer.h | 9 +--------
> > >  src/libcamera/framebuffer.cpp   | 3 +++
> > >  2 files changed, 4 insertions(+), 8 deletions(-)
> > >
> > > diff --git a/include/libcamera/framebuffer.h b/include/libcamera/framebuffer.h
> > > index d5aeff00387b..fd68ed0a139d 100644
> > > --- a/include/libcamera/framebuffer.h
> > > +++ b/include/libcamera/framebuffer.h
> > > @@ -51,14 +51,7 @@ public:
> > >
> > >     FrameBuffer(const std::vector<Plane> &planes, unsigned int cookie = 0);
> > >
> > > -   const std::vector<Plane> &planes() const
> > > -   {
> > > -           /* \todo Remove the assertions after sufficient testing */
> > > -           for (const auto &plane : planes_)
> > > -                   assert(plane.offset != Plane::kInvalidOffset);
> > > -           return planes_;
> > > -   }
> > > -
> > > +   const std::vector<Plane> &planes() const { return planes_; }
> > >     Request *request() const;
> > >     const FrameMetadata &metadata() const { return metadata_; }
> > >
> > > diff --git a/src/libcamera/framebuffer.cpp b/src/libcamera/framebuffer.cpp
> > > index c99f5b15e6ff..53ef89bf458f 100644
> > > --- a/src/libcamera/framebuffer.cpp
> > > +++ b/src/libcamera/framebuffer.cpp
> > > @@ -199,6 +199,9 @@ FrameBuffer::FrameBuffer(const std::vector<Plane> &planes, unsigned int cookie)
> > >     : Extensible(std::make_unique<Private>()), planes_(planes),
> > >       cookie_(cookie)
> > >  {
> > > +   /* \todo Remove the assertions after sufficient testing */
> >
> > As a construction time validation event, which is compiled/optimised out
> > in release builds anyway, I'm tempted to remove the todo here and keep
> > the ASSERT ...
>
> I agree, I'll drop the comment and explain why in the commit message:
>
> libcamera: framebuffer: Move planes check to constructor
>
> The FrameBuffer::planes() function checks that planes are correctly
> initialized with an offset. This can be done at construction time
> instead, as the planes are constant. The backtrace generated by the
> assertion will show where the faulty frame buffer is created instead of
> where it is used, easing debugging.
>
> As the runtime overhead is reduced, there's no real need to drop the
> assertion in the future anymore, it can be useful to ensure that the
> planes are correctly populated by the caller. Drop the comment that
> calls for removing the check.
>
> > But either way,
> >
> > Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> >
> > > +   for (const auto &plane : planes_)
> > > +           ASSERT(plane.offset != Plane::kInvalidOffset);
> > >  }
> > >
> > >  /**
>
> --
> Regards,
>
> Laurent Pinchart


More information about the libcamera-devel mailing list