13#include <spdlog/spdlog.h>
14#include <spdlog/cfg/env.h>
15#include <spdlog/sinks/stdout_color_sinks.h>
22inline std::once_flag s_init_flag;
31 auto console_logger = spdlog::get(
"CaptureMoment");
33 if (!console_logger) {
34 console_logger = spdlog::stdout_color_mt(
"CaptureMoment");
35 if (!console_logger) {
36 std::cerr <<
"Failed to create spdlog logger." << std::endl;
39 spdlog::info(
"CaptureMoment Logger created and registered.");
41 spdlog::info(
"CaptureMoment Logger already exists, retrieving it.");
46 console_logger->set_level(spdlog::level::trace);
50 spdlog::cfg::load_env_levels();
53 spdlog::set_default_logger(console_logger);
56 spdlog::info(
"CaptureMoment Logger initialized. Level: {}", spdlog::level::to_string_view(spdlog::default_logger()->level()));
58 }
catch (
const spdlog::spdlog_ex& ex) {
59 std::cerr <<
"Failed to initialize spdlog: " << ex.what() << std::endl;
68 if (!level_str)
return;
71 std::string level_str_lower = level_str;
72 std::transform(level_str_lower.begin(), level_str_lower.end(), level_str_lower.begin(), ::tolower);
75 auto logger = spdlog::default_logger();
79 if (level_str_lower ==
"trace") {
80 logger->set_level(spdlog::level::trace);
82 else if (level_str_lower ==
"debug") {
83 logger->set_level(spdlog::level::debug);
85 else if (level_str_lower ==
"info") {
86 logger->set_level(spdlog::level::info);
88 else if (level_str_lower ==
"warn") {
89 logger->set_level(spdlog::level::warn);
91 else if (level_str_lower ==
"error") {
92 logger->set_level(spdlog::level::err);
94 else if (level_str_lower ==
"off") {
95 logger->set_level(spdlog::level::off);
99 logger->set_level(spdlog::level::info);
116void init_backend_decider()
118 spdlog::info(
"[CoreInitialization] Starting backend selection benchmark...");
124 auto backend = benchmark_decider.
decide();
133 spdlog::info(
"[CoreInitialization] Backend configuration complete.");
139void perform_initialization()
148 init_backend_decider();
158 std::call_once(s_init_flag, perform_initialization);
Application-wide configuration singleton.
Concrete implementation of IBackendDecider that chooses backend based on performance benchmarks.
static void setHalideTarget(const Halide::Target &target)
Sets the configured Halide Target object.
static AppConfig & instance()
Gets the singleton instance of AppConfig.
void setProcessingBackend(Common::MemoryType backend)
Sets the processing backend (CPU or GPU) for image operations.
Implements IBackendDecider using a runtime performance comparison strategy.
Common::MemoryType decide() override
Decides the optimal memory type (CPU or GPU) by running benchmarks.
const Halide::Target & getWinningTarget() const
Gets the winning Halide::Target object selected by decide().
Core library initialization entry point.
void registerDefaultBackends()
Registers all default Core backends (CPU and GPU) to the factory.
Manages the lifecycle of a single IWorkingImage instance.
void initialize()
Initializes the CaptureMoment Core library.
void set_log_level(const char *level_str)
Declaration of backend registration function.