[libcamera-devel] [PATCH v6 1/9] libcamera: control_serializer: Save serialized ControlInfoMap in a cache
paul.elder at ideasonboard.com
paul.elder at ideasonboard.com
Mon Dec 28 10:48:11 CET 2020
Hi Niklas,
Thank you for the review.
On Sun, Dec 27, 2020 at 12:36:15PM +0100, Niklas Söderlund wrote:
> Hi Paul,
>
> Thanks for your work.
>
> On 2020-12-24 17:15:26 +0900, Paul Elder wrote:
> > The ControlSerializer saves all ControlInfoMaps that it has already
> > (de)serialized, in order to (de)serialize ControlLists that contain the
> > ControlInfoMaps. Leverage this to cache ControlInfoMaps, such that the
> > ControlSerializer will not re-(de)serialize a ControlInfoMap that it has
> > previously (de)serialized.
> >
> > Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
> >
> > ---
> > New in v6
> > ---
> > .../libcamera/internal/control_serializer.h | 1 +
> > src/libcamera/control_serializer.cpp | 30 +++++++++++++++++++
> > 2 files changed, 31 insertions(+)
> >
> > diff --git a/include/libcamera/internal/control_serializer.h b/include/libcamera/internal/control_serializer.h
> > index 0ab29d9a..76cb3c10 100644
> > --- a/include/libcamera/internal/control_serializer.h
> > +++ b/include/libcamera/internal/control_serializer.h
> > @@ -33,6 +33,7 @@ public:
> > template<typename T>
> > T deserialize(ByteStreamBuffer &buffer);
> >
> > + bool isCached(const ControlInfoMap *infoMap);
> > private:
> > static size_t binarySize(const ControlValue &value);
> > static size_t binarySize(const ControlInfo &info);
> > diff --git a/src/libcamera/control_serializer.cpp b/src/libcamera/control_serializer.cpp
> > index 258db6df..4cf1c720 100644
> > --- a/src/libcamera/control_serializer.cpp
> > +++ b/src/libcamera/control_serializer.cpp
> > @@ -173,6 +173,11 @@ void ControlSerializer::store(const ControlInfo &info, ByteStreamBuffer &buffer)
> > int ControlSerializer::serialize(const ControlInfoMap &infoMap,
> > ByteStreamBuffer &buffer)
> > {
> > + if (isCached(&infoMap)) {
> > + LOG(Serializer, Info) << "Serializing ControlInfoMap from cache";
>
> I wonder if this and the one below should be Debug messages?
Yeah it should be.
> > + return 0;
> > + }
> > +
> > /* Compute entries and data required sizes. */
> > size_t entriesSize = infoMap.size()
> > * sizeof(struct ipa_control_info_entry);
> > @@ -347,6 +352,12 @@ ControlInfoMap ControlSerializer::deserialize<ControlInfoMap>(ByteStreamBuffer &
> > return {};
> > }
> >
> > + auto iter = infoMaps_.find(hdr->handle);
> > + if (iter != infoMaps_.end()) {
> > + LOG(Serializer, Info) << "Deserializing ControlInfoMap from cache";
> > + return iter->second;
> > + }
>
> I think you should either fold the check from isChached() in above or
> add a isCached(unsigned int) and use it here. I'm leaning towards the
> former as then if we switch to C++20 we could use
> std::map<>::contains().
I don't see how the former would work. The latter would just be the same
as what's here, and it's only used once.
> > +
> > if (hdr->version != IPA_CONTROLS_FORMAT_VERSION) {
> > LOG(Serializer, Error)
> > << "Unsupported controls format version "
> > @@ -485,4 +496,23 @@ ControlList ControlSerializer::deserialize<ControlList>(ByteStreamBuffer &buffer
> > return ctrls;
> > }
> >
> > +/**
> > + * \brief Check if some ControlInfoMap is cached
>
> s/some/a/
>
> > + * \param[in] infoMap The ControlInfoMap to check
> > + *
> > + * The ControlSerializer caches all ControlInfoMaps that it has
> > (de)serialized.
> > + * This function checks if \a infoMap is in the cache.
> > + *
> > + * \return True if \a infoMap is in the cache or if \a infoMap is
> > + * controls::controls, false otherwise
>
> controls::controls ?
Oh, it should be nullptr here. I was thinking about ControlLists that
use controls::controls.
Thanks,
Paul
> > + */
> > +bool ControlSerializer::isCached(const ControlInfoMap *infoMap)
> > +{
> > + if (!infoMap)
> > + return true;
> > +
> > + auto iter = infoMapHandles_.find(infoMap);
> > + return iter != infoMapHandles_.end();
> > +}
> > +
> > } /* namespace libcamera */
> > --
> > 2.27.0
> >
> > _______________________________________________
> > libcamera-devel mailing list
> > libcamera-devel at lists.libcamera.org
> > https://lists.libcamera.org/listinfo/libcamera-devel
>
> --
> Regards,
> Niklas Söderlund
More information about the libcamera-devel
mailing list