[libcamera-devel] [PATCH] cam: convert to libfmt
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Tue May 10 15:22:49 CEST 2022
Hi Tomi,
Thank you for the patch.
On Tue, May 10, 2022 at 10:16:17AM +0300, Tomi Valkeinen wrote:
> This is just a conversation starter, not for merging. I really like
> libfmt, and I really hate the C++ stream-based string formatting. libfmt
> is the first library I add to any new C++ project I make.
You've got it wrong. The first library you should add to any new C++
project you make is libcamera :-)
> You can find more information about libfmt from:
>
> https://github.com/fmtlib/fmt
> https://fmt.dev/latest/index.html
>
> This patch is just a crude conversion with ugly macros to showcase what
> the formatting code might look like.
>
> libfmt pages suggest that libfmt would be faster and smaller (exe size)
> than iostreams, but for the size it didn't seem to be true in cam's case
> as the tests below show. However, simple prints did reduce the exe size,
> but the few more complex ones increased the size.
>
> Size tests with gcc 11.2.0-19ubuntu1
>
> - Without libfmt
>
> debug 3523400
> debug lto 3269368
> release 223056
> release lto 172280
>
> - With libfmt
>
> debug 4424256
> debug lto 4143840
> release 303952
> release lto 252640
>
> Above shows that cam's size clearly increases with libfmt. However, the
> increase really comes only from one case, the use of fmt::memory_buffer
> and std::back_inserter.
Is this because libfmt is a header-only library ? What if it is built as
a shared object, what's the impact on code size in cam ?
> Converting that code to use fmt::format() and
> naive string append gives:
>
> release with string append 233680
> release lto with string append 186936
What's the impact of switching to string concatenation on runtime ?
Would you consider the option of keeping std::stringstream ?
> Also, if I add another use of fmt::memory_buffer and std::back_inserter
> to another file, I see much less increase in the size:
>
> release lto with two uses of memory_buffer, back_inserter 256736
>
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen at ideasonboard.com>
> ---
> src/cam/camera_session.cpp | 105 ++++++++++++++++---------------------
> src/cam/drm.cpp | 68 ++++++++----------------
> src/cam/event_loop.cpp | 9 ++--
> src/cam/file_sink.cpp | 31 +++++------
> src/cam/image.cpp | 15 +++---
> src/cam/kms_sink.cpp | 38 ++++++--------
> src/cam/main.cpp | 28 +++++-----
> src/cam/meson.build | 5 +-
> src/cam/options.cpp | 66 ++++++++++-------------
> src/cam/stream_options.cpp | 18 +++----
> 10 files changed, 165 insertions(+), 218 deletions(-)
[snip]
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list