From 08477f316eff9db45b5e1dc8eb45ec4431d5b54a Mon Sep 17 00:00:00 2001 From: legatt Date: Wed, 18 Feb 2026 22:27:30 +0300 Subject: [PATCH] P7 Logger to module --- engine-api/src/Render.cpp | 2 +- engine/modules/AssetManager.cppm | 1 - engine/src/Client.cpp | 1 - engine/src/FileSystem.cpp | 3 +- engine/src/GLFWInput.cpp | 2 +- engine/src/main.cpp | 14 +- p7lib/Headers/Logger.h | 10 -- renderers/magnum-renderer/src/Materials.cpp | 2 +- renderers/magnum-renderer/src/Render.cpp | 2 - utils/include/ee_utils/platform.hpp | 4 + utils/modules/lockfree.cppm | 9 +- utils/modules/logger.cppm | 148 ++++++++++++++++++++ utils/modules/utils.cppm | 1 + utils/modules/worker.cppm | 12 +- 14 files changed, 173 insertions(+), 38 deletions(-) delete mode 100644 p7lib/Headers/Logger.h create mode 100644 utils/modules/logger.cppm diff --git a/engine-api/src/Render.cpp b/engine-api/src/Render.cpp index 6516693..92971de 100644 --- a/engine-api/src/Render.cpp +++ b/engine-api/src/Render.cpp @@ -1,12 +1,12 @@ module; -#include "Logger.h" #include #include #include module Render; import std; +import utils; ee_engine::IRenderer::IRenderer(GLFWwindow *window) { diff --git a/engine/modules/AssetManager.cppm b/engine/modules/AssetManager.cppm index c2a2fd2..a4227b9 100644 --- a/engine/modules/AssetManager.cppm +++ b/engine/modules/AssetManager.cppm @@ -1,6 +1,5 @@ module; -#include "Logger.h" #include "compile_config.hpp" #include #include diff --git a/engine/src/Client.cpp b/engine/src/Client.cpp index 9d8aa66..39811f4 100644 --- a/engine/src/Client.cpp +++ b/engine/src/Client.cpp @@ -1,6 +1,5 @@ module; -#include "Logger.h" #include module Client; diff --git a/engine/src/FileSystem.cpp b/engine/src/FileSystem.cpp index 42d1aa4..2538234 100644 --- a/engine/src/FileSystem.cpp +++ b/engine/src/FileSystem.cpp @@ -1,7 +1,6 @@ module; -#include "Logger.h" - +#include module FileSystem; import utils; diff --git a/engine/src/GLFWInput.cpp b/engine/src/GLFWInput.cpp index 371f3d8..ba56e1d 100644 --- a/engine/src/GLFWInput.cpp +++ b/engine/src/GLFWInput.cpp @@ -1,6 +1,5 @@ module; -#include "Logger.h" #include #define GLFW_GET_INPUT reinterpret_cast(glfwGetWindowUserPointer(window)) @@ -8,6 +7,7 @@ module; module GLFWInput; import Engine; +import utils; GLFWInput::GLFWInput(ee_engine::InputHandlers handlers) : ee_engine::IInput(handlers) { diff --git a/engine/src/main.cpp b/engine/src/main.cpp index ce50334..f9c14dd 100644 --- a/engine/src/main.cpp +++ b/engine/src/main.cpp @@ -1,4 +1,3 @@ -#include "Logger.h" #include "compile_config.hpp" #include @@ -10,15 +9,11 @@ import MagnumRender; import GLFWInput; import std; - -IP7_Trace* Logger::trace; int main(int argc, char **argv) { // Setup P7 logger - IP7_Client *p7client = P7_Create_Client(P7_SINK P7_LOGS_PATH); - P7_Set_Crash_Handler(); - Logger::trace = P7_Create_Trace(p7client, L"TC 1"); - Logger::trace->Register_Thread(L"Main", 0); + Logger::Init(P7_SINK P7_LOGS_PATH); + Logger::RegisterThread(L"Main"); LOG(INFO, "Etredia Empires, v%d.%d.%d", MAJOR_VERSION, MINOR_VERSION, PATCH_VERSION); @@ -98,9 +93,8 @@ int main(int argc, char **argv) // Free memory LOG(INFO, "Exit..."); Engine::Shutdown(); - Logger::trace->Unregister_Thread(0); - Logger::trace->Release(); - p7client->Release(); + Logger::UnregisterThread(); + Logger::Release(); return 0; } diff --git a/p7lib/Headers/Logger.h b/p7lib/Headers/Logger.h deleted file mode 100644 index 74efe10..0000000 --- a/p7lib/Headers/Logger.h +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once -#include "P7_Trace.h" - -#define LOG(level, format, ...) Logger::trace->P7_DELIVER(0, EP7TRACE_LEVEL_##level, NULL, TM(format), __VA_ARGS__) - -class Logger -{ -public: - static IP7_Trace *trace; -}; diff --git a/renderers/magnum-renderer/src/Materials.cpp b/renderers/magnum-renderer/src/Materials.cpp index b042308..2451690 100644 --- a/renderers/magnum-renderer/src/Materials.cpp +++ b/renderers/magnum-renderer/src/Materials.cpp @@ -7,10 +7,10 @@ module; #include #include -#include "Logger.h" module MagnumRender; import :Materials; +import utils; ee_magnum::BaseMaterial::BaseMaterial(const std::string &vertSrc, const std::string &fragSrc) { diff --git a/renderers/magnum-renderer/src/Render.cpp b/renderers/magnum-renderer/src/Render.cpp index 06fe2f0..56f022c 100644 --- a/renderers/magnum-renderer/src/Render.cpp +++ b/renderers/magnum-renderer/src/Render.cpp @@ -2,8 +2,6 @@ module; #define NOMINMAX -#include "Logger.h" - #include #include #include diff --git a/utils/include/ee_utils/platform.hpp b/utils/include/ee_utils/platform.hpp index c89380b..47a728a 100644 --- a/utils/include/ee_utils/platform.hpp +++ b/utils/include/ee_utils/platform.hpp @@ -2,7 +2,11 @@ #define ETREDIAEMPIRES_PLATFORM_HPP #ifdef _WIN32 + #include +#define WIN_ERROR 0 +#undef ERROR + #endif #ifdef __linux__ diff --git a/utils/modules/lockfree.cppm b/utils/modules/lockfree.cppm index 0ea084e..fc7925c 100644 --- a/utils/modules/lockfree.cppm +++ b/utils/modules/lockfree.cppm @@ -5,7 +5,10 @@ module; export module utils:lockfree; -export using boost::lockfree::capacity; +export namespace boost +{ + using lockfree::capacity; -export using boost::lockfree::queue; -export using boost::lockfree::spsc_queue; \ No newline at end of file + using lockfree::queue; + using lockfree::spsc_queue; +} \ No newline at end of file diff --git a/utils/modules/logger.cppm b/utils/modules/logger.cppm new file mode 100644 index 0000000..9f787b4 --- /dev/null +++ b/utils/modules/logger.cppm @@ -0,0 +1,148 @@ +module; + +#include +#undef ERROR +#undef TM + +export module utils:logger; +import std; + +namespace logger +{ + template + struct wstring + { + wchar_t content[length]; + constexpr operator const wchar_t*() const {return content;} + + explicit constexpr wstring(const char (&str)[length]) : content{} + { + for (std::size_t i = 0; i < length; i++) + content[i] = static_cast(str[i]); + } + }; + + template + constexpr wstring TM(const char (&str)[length]) + { + return wstring(str); + } + + enum LogLevel : std::uint8_t + { + TRACE, + DEBUG, + INFO, + WARNING, + ERROR, + CRITICAL, + }; + + class Logger; + + template + struct LOG_WCHAR + { + LOG_WCHAR( + LogLevel level, + const wchar_t* format, + Args&&... args, + const std::source_location &location = std::source_location::current() + ) + { + Logger::trace->Trace( + 0, + static_cast(level), + nullptr, + location.line(), + location.file_name(), + location.function_name(), + format, + std::forward(args)... + ); + } + }; + + // Notice: logging char string supports only ASCII, use LOG_WCHAR with wchar string for UTF-8 + template + struct LOG + { + LOG( + LogLevel level, + const char (&format)[length], + Args&&... args, + const std::source_location &location = std::source_location::current() + ) + { + Logger::trace->Trace( + 0, + static_cast(level), + nullptr, + location.line(), + location.file_name(), + location.function_name(), + TM(format), + std::forward(args)... + ); + } + }; + + template LOG_WCHAR(LogLevel, const wchar_t*, Args&&...) -> LOG_WCHAR; + template LOG(LogLevel, const char (&)[length], Args&&...) -> LOG; + + class Logger + { + public: + Logger() = delete; + + static void Init(const wchar_t *options) + { + if (isReady) + { + LOG_WCHAR(WARNING, L"Logger already initialized."); + return; + } + + client = P7_Create_Client(options); + P7_Set_Crash_Handler(); + trace = P7_Create_Trace(client, L"TC 1"); + + isReady = true; + } + + static void Release() + { + trace->Release(); + client->Release(); + } + + static void RegisterThread(const wchar_t *name) + { + trace->Register_Thread(name, 0); + } + static void UnregisterThread() + { + trace->Unregister_Thread(0); + } + + private: + inline static IP7_Client *client = nullptr; + inline static IP7_Trace *trace = nullptr; + + inline static bool isReady = false; + + template friend struct LOG_WCHAR; + template friend struct LOG; + }; + +} + +export using logger::Logger; +export using logger::LOG_WCHAR; +export using logger::LOG; +export using logger::LogLevel::TRACE; +export using logger::LogLevel::DEBUG; +export using logger::LogLevel::INFO; +export using logger::LogLevel::WARNING; +export using logger::LogLevel::ERROR; +export using logger::LogLevel::CRITICAL; \ No newline at end of file diff --git a/utils/modules/utils.cppm b/utils/modules/utils.cppm index 0bd1360..b635cd6 100644 --- a/utils/modules/utils.cppm +++ b/utils/modules/utils.cppm @@ -3,5 +3,6 @@ export import :allocator; export import :worker; export import :buffers; export import :lockfree; +export import :logger; export namespace ee_utils {} \ No newline at end of file diff --git a/utils/modules/worker.cppm b/utils/modules/worker.cppm index 59a3efc..c8508fb 100644 --- a/utils/modules/worker.cppm +++ b/utils/modules/worker.cppm @@ -1,9 +1,6 @@ -module; - -#include "Logger.h" - export module utils:worker; import :lockfree; + import :logger; import std; export namespace ee_utils @@ -48,6 +45,8 @@ export namespace ee_utils // TODO: maybe I should use lockfree::queue ? boost::lockfree::spsc_queue> commands; + Worker() {}; + void ProcessCommand(TCommand &command) { if (command.type > maxCmdType || !commandsMapping[command.type]) @@ -110,7 +109,7 @@ export namespace ee_utils void Threading() { - Logger::trace->Register_Thread(threadName, 0); + Logger::RegisterThread(threadName); LOG(INFO, "Thread started"); Loop(); @@ -121,6 +120,7 @@ export namespace ee_utils void Loop() { TCommand commandBuffer{}; + // ReSharper disable once CppTooWideScope std::vector incompleteCommands; while (!stoken->stop_requested()) { @@ -138,7 +138,7 @@ export namespace ee_utils { Release(); LOG(INFO, "Thread is released"); - Logger::trace->Unregister_Thread(0); + Logger::UnregisterThread(); isRunning.store(false); } };