From 31ea0081a9fc8c658788951e9338bd3434bff2b5 Mon Sep 17 00:00:00 2001 From: "Abdullah K." Date: Thu, 23 Jul 2026 04:32:44 +0500 Subject: [PATCH] perf: skip LOGF formatting when logging is silent LOGF/LOGF_COLOR always ran fmt::sprintf even when the output was discarded; at emulator log volume the formatting alone costs frames. Add Log::IsSilent() and short-circuit before formatting. Behavior-preserving on all platforms (it only skips work whose result is thrown away); before init it reports non-silent so early logs still print. (cherry picked from commit 1749e0fc68ae4290055fb12f72c9bb4baf466190) --- src/common/logging/log.cpp | 5 +++++ src/common/logging/log.h | 15 +++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/common/logging/log.cpp b/src/common/logging/log.cpp index a53b52672..27bbe4868 100644 --- a/src/common/logging/log.cpp +++ b/src/common/logging/log.cpp @@ -178,6 +178,11 @@ Direction GetDirection() { return g_direction; } +bool IsSilent() { + // Before init LOGF must keep writing to stdout, so report non-silent. + return g_initialized && g_direction == Direction::Silent; +} + void Write(std::string_view text) { WriteImpl(text); } diff --git a/src/common/logging/log.h b/src/common/logging/log.h index babfb247a..3ce29cf1c 100644 --- a/src/common/logging/log.h +++ b/src/common/logging/log.h @@ -15,6 +15,7 @@ KYTY_SUBSYSTEM_DEFINE(Log); enum class Direction { Silent, Console, File }; Direction GetDirection(); +bool IsSilent(); void Write(std::string_view text); void Write(fmt::text_style style, std::string_view text); void WriteFatal(std::string_view text); @@ -41,8 +42,18 @@ inline constexpr auto BrightWhite = fmt::fg(fmt::terminal_color::bright_white) } // namespace Log // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) -#define LOGF(...) ::Log::Write(::fmt::sprintf(__VA_ARGS__)) +#define LOGF(...) \ + do { \ + if (!::Log::IsSilent()) { \ + ::Log::Write(::fmt::sprintf(__VA_ARGS__)); \ + } \ + } while (false) // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) -#define LOGF_COLOR(style, ...) ::Log::Write((style), ::fmt::sprintf(__VA_ARGS__)) +#define LOGF_COLOR(style, ...) \ + do { \ + if (!::Log::IsSilent()) { \ + ::Log::Write((style), ::fmt::sprintf(__VA_ARGS__)); \ + } \ + } while (false) #endif /* KYTY_COMMON_LOGGING_LOG_H_ */