From 61a71c65ace5124cb26a074715280537e6e34d00 Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Wed, 6 Sep 2023 12:51:36 +0200 Subject: internal: Formatter rework (#3186) --- src/debug/CrashReporter.cpp | 44 ++--- src/debug/HyprCtl.cpp | 425 ++++++++++++++++++++--------------------- src/debug/HyprDebugOverlay.cpp | 10 +- src/debug/Log.cpp | 58 ------ src/debug/Log.hpp | 74 ++++++- src/debug/TracyDefines.hpp | 2 +- 6 files changed, 309 insertions(+), 304 deletions(-) (limited to 'src/debug') diff --git a/src/debug/CrashReporter.cpp b/src/debug/CrashReporter.cpp index a580ecd8..d4b2a431 100644 --- a/src/debug/CrashReporter.cpp +++ b/src/debug/CrashReporter.cpp @@ -14,19 +14,19 @@ std::string getRandomMessage() { const std::vector MESSAGES = {"Sorry, didn't mean to...", - "This was an accident, I swear!", - "Calm down, it was a misinput! MISINPUT!", - "Oops", - "Vaxry is going to be upset.", - "Who tried dividing by zero?!", - "Maybe you should try dusting your PC in the meantime?", - "I tried so hard, and got so far...", - "I don't feel so good...", - "*thud*", - "Well this is awkward.", - "\"stable\"", - "I hope you didn't have any unsaved progress.", - "All these computers..."}; + "This was an accident, I swear!", + "Calm down, it was a misinput! MISINPUT!", + "Oops", + "Vaxry is going to be upset.", + "Who tried dividing by zero?!", + "Maybe you should try dusting your PC in the meantime?", + "I tried so hard, and got so far...", + "I don't feel so good...", + "*thud*", + "Well this is awkward.", + "\"stable\"", + "I hope you didn't have any unsaved progress.", + "All these computers..."}; std::random_device dev; std::mt19937 engine(dev()); @@ -45,15 +45,15 @@ void CrashReporter::createAndSaveCrash(int sig) { finalCrashReport += "--------------------------------------------\n Hyprland Crash Report\n--------------------------------------------\n"; finalCrashReport += getRandomMessage() + "\n\n"; - finalCrashReport += getFormat("Hyprland received signal %d (%s)\n\n", sig, strsignal(sig)); + finalCrashReport += getFormat("Hyprland received signal {} ({})\n\n", sig, (const char*)strsignal(sig)); - finalCrashReport += getFormat("Version: %s\nTag: %s\n\n", GIT_COMMIT_HASH, GIT_TAG); + finalCrashReport += getFormat("Version: {}\nTag: {}\n\n", GIT_COMMIT_HASH, GIT_TAG); if (g_pPluginSystem && !g_pPluginSystem->getAllPlugins().empty()) { finalCrashReport += "Hyprland seems to be running with plugins. This crash might not be Hyprland's fault.\nPlugins:\n"; for (auto& p : g_pPluginSystem->getAllPlugins()) { - finalCrashReport += getFormat("\t%s (%s) %s\n", p->name.c_str(), p->author.c_str(), p->version.c_str()); + finalCrashReport += getFormat("\t{} ({}) {}\n", p->name.c_str(), p->author.c_str(), p->version.c_str()); } finalCrashReport += "\n\n"; @@ -65,7 +65,7 @@ void CrashReporter::createAndSaveCrash(int sig) { uname(&unameInfo); finalCrashReport += - getFormat("\tSystem name: %s\n\tNode name: %s\n\tRelease: %s\n\tVersion: %s\n\n", unameInfo.sysname, unameInfo.nodename, unameInfo.release, unameInfo.version); + getFormat("\tSystem name: {}\n\tNode name: {}\n\tRelease: {}\n\tVersion: {}\n\n", unameInfo.sysname, unameInfo.nodename, unameInfo.release, unameInfo.version); #if defined(__DragonFly__) || defined(__FreeBSD__) const std::string GPUINFO = execAndGet("pciconf -lv | fgrep -A4 vga"); @@ -75,7 +75,7 @@ void CrashReporter::createAndSaveCrash(int sig) { finalCrashReport += "GPU:\n\t" + GPUINFO; - finalCrashReport += getFormat("\n\nos-release:\n\t%s\n\n\n", replaceInString(execAndGet("cat /etc/os-release"), "\n", "\n\t").c_str()); + finalCrashReport += getFormat("\n\nos-release:\n\t{}\n\n\n", replaceInString(execAndGet("cat /etc/os-release"), "\n", "\n\t").c_str()); finalCrashReport += "Backtrace:\n"; @@ -107,12 +107,12 @@ void CrashReporter::createAndSaveCrash(int sig) { #endif for (size_t i = 0; i < CALLSTACK.size(); ++i) { - finalCrashReport += getFormat("\t#%lu | %s\n", i, CALLSTACK[i].desc.c_str()); + finalCrashReport += getFormat("\t#{} | {}\n", i, CALLSTACK[i].desc.c_str()); #ifdef __clang__ - const auto CMD = getFormat("llvm-addr2line -e %s -f 0x%lx", FPATH.c_str(), (uint64_t)CALLSTACK[i].adr); + const auto CMD = getFormat("llvm-addr2line -e {} -f 0x{:x}", FPATH.c_str(), (uint64_t)CALLSTACK[i].adr); #else - const auto CMD = getFormat("addr2line -e %s -f 0x%lx", FPATH.c_str(), (uint64_t)CALLSTACK[i].adr); + const auto CMD = getFormat("addr2line -e {} -f 0x{:x}", FPATH.c_str(), (uint64_t)CALLSTACK[i].adr); #endif const auto ADDR2LINE = replaceInString(execAndGet(CMD.c_str()), "\n", "\n\t\t"); finalCrashReport += "\t\t" + ADDR2LINE.substr(0, ADDR2LINE.length() - 2); @@ -156,5 +156,5 @@ void CrashReporter::createAndSaveCrash(int sig) { ofs.close(); Debug::disableStdout = false; - Debug::log(CRIT, "Hyprland has crashed :( Consult the crash report at %s for more information.", path.c_str()); + Debug::log(CRIT, "Hyprland has crashed :( Consult the crash report at {} for more information.", path.c_str()); } diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index 2713dee2..a33f66b0 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -38,33 +38,33 @@ std::string monitorsRequest(HyprCtl::eHyprCtlOutputFormat format) { continue; result += getFormat( - R"#({ - "id": %i, - "name": "%s", - "description": "%s", - "make": "%s", - "model": "%s", - "serial": "%s", - "width": %i, - "height": %i, - "refreshRate": %f, - "x": %i, - "y": %i, - "activeWorkspace": { - "id": %i, - "name": "%s" - }, - "specialWorkspace": { - "id": %i, - "name": "%s" - }, - "reserved": [%i, %i, %i, %i], - "scale": %.2f, - "transform": %i, - "focused": %s, - "dpmsStatus": %s, - "vrr": %s -},)#", + R"#({{ + "id": {}, + "name": "{}", + "description": "{}", + "make": "{}", + "model": "{}", + "serial": "{}", + "width": {}, + "height": {}, + "refreshRate": {:.5f}, + "x": {}, + "y": {}, + "activeWorkspace": {{ + "id": {}, + "name": "{}" + }}, + "specialWorkspace": {{ + "id": {}, + "name": "{}" + }}, + "reserved": [{}, {}, {}, {}], + "scale": {:.2f}, + "transform": {}, + "focused": {}, + "dpmsStatus": {}, + "vrr": {} +}},)#", m->ID, escapeJSONStrings(m->szName).c_str(), escapeJSONStrings(m->output->description ? m->output->description : "").c_str(), (m->output->make ? m->output->make : ""), (m->output->model ? m->output->model : ""), (m->output->serial ? m->output->serial : ""), (int)m->vecPixelSize.x, (int)m->vecPixelSize.y, m->refreshRate, (int)m->vecPosition.x, (int)m->vecPosition.y, m->activeWorkspace, @@ -82,10 +82,10 @@ std::string monitorsRequest(HyprCtl::eHyprCtlOutputFormat format) { if (!m->output) continue; - result += getFormat("Monitor %s (ID %i):\n\t%ix%i@%f at %ix%i\n\tdescription: %s\n\tmake: %s\n\tmodel: %s\n\tserial: %s\n\tactive workspace: %i (%s)\n\tspecial " - "workspace: %i (%s)\n\treserved: %i " - "%i %i %i\n\tscale: %.2f\n\ttransform: " - "%i\n\tfocused: %s\n\tdpmsStatus: %i\n\tvrr: %i\n\n", + result += getFormat("Monitor {} (ID {}):\n\t{}x{}@{:.5f} at {}x{}\n\tdescription: {}\n\tmake: {}\n\tmodel: {}\n\tserial: {}\n\tactive workspace: {} ({})\n\tspecial " + "workspace: {} ({})\n\treserved: {} " + "{} {} {}\n\tscale: {:.2f}\n\ttransform: " + "{}\n\tfocused: {}\n\tdpmsStatus: {}\n\tvrr: {}\n\n", m->szName.c_str(), m->ID, (int)m->vecPixelSize.x, (int)m->vecPixelSize.y, m->refreshRate, (int)m->vecPosition.x, (int)m->vecPosition.y, (m->output->description ? m->output->description : ""), (m->output->make ? m->output->make : ""), (m->output->model ? m->output->model : ""), (m->output->serial ? m->output->serial : ""), m->activeWorkspace, g_pCompositor->getWorkspaceByID(m->activeWorkspace)->m_szName.c_str(), @@ -113,7 +113,7 @@ static std::string getGroupedData(CWindow* w, HyprCtl::eHyprCtlOutputFormat form } while (curr != w); const auto comma = isJson ? ", " : ","; - const auto fmt = isJson ? "\"0x%lx\"" : "%lx"; + const auto fmt = isJson ? "\"0x{:x}\"" : "{:x}"; std::ostringstream result; bool first = true; @@ -123,7 +123,7 @@ static std::string getGroupedData(CWindow* w, HyprCtl::eHyprCtlOutputFormat form else result << comma; - result << getFormat(fmt, gw); + result << getFormat(fmt, (uintptr_t)gw); } return result.str(); @@ -132,57 +132,56 @@ static std::string getGroupedData(CWindow* w, HyprCtl::eHyprCtlOutputFormat form static std::string getWindowData(CWindow* w, HyprCtl::eHyprCtlOutputFormat format) { if (format == HyprCtl::FORMAT_JSON) { return getFormat( - R"#({ - "address": "0x%lx", - "mapped": %s, - "hidden": %s, - "at": [%i, %i], - "size": [%i, %i], - "workspace": { - "id": %i, - "name": "%s" - }, - "floating": %s, - "monitor": %i, - "class": "%s", - "title": "%s", - "initialClass": "%s", - "initialTitle": "%s", - "pid": %i, - "xwayland": %s, - "pinned": %s, - "fullscreen": %s, - "fullscreenMode": %i, - "fakeFullscreen": %s, - "grouped": [%s], - "swallowing": %s -},)#", - w, (w->m_bIsMapped ? "true" : "false"), (w->isHidden() ? "true" : "false"), (int)w->m_vRealPosition.goalv().x, (int)w->m_vRealPosition.goalv().y, + R"#({{ + "address": "0x{:x}", + "mapped": {}, + "hidden": {}, + "at": [{}, {}], + "size": [{}, {}], + "workspace": {{ + "id": {}, + "name": "{}" + }}, + "floating": {}, + "monitor": {}, + "class": "{}", + "title": "{}", + "initialClass": "{}", + "initialTitle": "{}", + "pid": {}, + "xwayland": {}, + "pinned": {}, + "fullscreen": {}, + "fullscreenMode": {}, + "fakeFullscreen": {}, + "grouped": [{}], + "swallowing": "0x{:x}" +}},)#", + (uintptr_t)w, (w->m_bIsMapped ? "true" : "false"), (w->isHidden() ? "true" : "false"), (int)w->m_vRealPosition.goalv().x, (int)w->m_vRealPosition.goalv().y, (int)w->m_vRealSize.goalv().x, (int)w->m_vRealSize.goalv().y, w->m_iWorkspaceID, escapeJSONStrings(w->m_iWorkspaceID == -1 ? "" : g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID) ? g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID)->m_szName : - std::string("Invalid workspace " + std::to_string(w->m_iWorkspaceID))) - .c_str(), - ((int)w->m_bIsFloating == 1 ? "true" : "false"), w->m_iMonitorID, escapeJSONStrings(g_pXWaylandManager->getAppIDClass(w)).c_str(), - escapeJSONStrings(g_pXWaylandManager->getTitle(w)).c_str(), escapeJSONStrings(w->m_szInitialClass).c_str(), escapeJSONStrings(w->m_szInitialTitle).c_str(), w->getPID(), + std::string("Invalid workspace " + std::to_string(w->m_iWorkspaceID))), + ((int)w->m_bIsFloating == 1 ? "true" : "false"), w->m_iMonitorID, escapeJSONStrings(g_pXWaylandManager->getAppIDClass(w)), + escapeJSONStrings(g_pXWaylandManager->getTitle(w)), escapeJSONStrings(w->m_szInitialClass), escapeJSONStrings(w->m_szInitialTitle), w->getPID(), ((int)w->m_bIsX11 == 1 ? "true" : "false"), (w->m_bPinned ? "true" : "false"), (w->m_bIsFullscreen ? "true" : "false"), - (w->m_bIsFullscreen ? (g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID) ? g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID)->m_efFullscreenMode : 0) : 0), - w->m_bFakeFullscreenState ? "true" : "false", getGroupedData(w, format).c_str(), (w->m_pSwallowed ? getFormat("\"0x%lx\"", w->m_pSwallowed).c_str() : "null")); + (w->m_bIsFullscreen ? (g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID) ? (int)g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID)->m_efFullscreenMode : 0) : 0), + w->m_bFakeFullscreenState ? "true" : "false", getGroupedData(w, format), (uintptr_t)w->m_pSwallowed); } else { return getFormat( - "Window %lx -> %s:\n\tmapped: %i\n\thidden: %i\n\tat: %i,%i\n\tsize: %i,%i\n\tworkspace: %i (%s)\n\tfloating: %i\n\tmonitor: %i\n\tclass: %s\n\ttitle: " - "%s\n\tinitialClass: %s\n\tinitialTitle: %s\n\tpid: " - "%i\n\txwayland: %i\n\tpinned: " - "%i\n\tfullscreen: %i\n\tfullscreenmode: %i\n\tfakefullscreen: %i\n\tgrouped: %s\n\tswallowing: %lx\n\n", - w, w->m_szTitle.c_str(), (int)w->m_bIsMapped, (int)w->isHidden(), (int)w->m_vRealPosition.goalv().x, (int)w->m_vRealPosition.goalv().y, (int)w->m_vRealSize.goalv().x, - (int)w->m_vRealSize.goalv().y, w->m_iWorkspaceID, + "Window {:x} -> {}:\n\tmapped: {}\n\thidden: {}\n\tat: {},{}\n\tsize: {},{}\n\tworkspace: {} ({})\n\tfloating: {}\n\tmonitor: {}\n\tclass: {}\n\ttitle: " + "{}\n\tinitialClass: {}\n\tinitialTitle: {}\n\tpid: " + "{}\n\txwayland: {}\n\tpinned: " + "{}\n\tfullscreen: {}\n\tfullscreenmode: {}\n\tfakefullscreen: {}\n\tgrouped: {}\n\tswallowing: {:x}\n\n", + (uintptr_t)w, w->m_szTitle.c_str(), (int)w->m_bIsMapped, (int)w->isHidden(), (int)w->m_vRealPosition.goalv().x, (int)w->m_vRealPosition.goalv().y, + (int)w->m_vRealSize.goalv().x, (int)w->m_vRealSize.goalv().y, w->m_iWorkspaceID, (w->m_iWorkspaceID == -1 ? "" : g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID) ? g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID)->m_szName.c_str() : std::string("Invalid workspace " + std::to_string(w->m_iWorkspaceID)).c_str()), (int)w->m_bIsFloating, w->m_iMonitorID, g_pXWaylandManager->getAppIDClass(w).c_str(), g_pXWaylandManager->getTitle(w).c_str(), w->m_szInitialClass.c_str(), w->m_szInitialTitle.c_str(), w->getPID(), (int)w->m_bIsX11, (int)w->m_bPinned, (int)w->m_bIsFullscreen, (w->m_bIsFullscreen ? (g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID) ? g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID)->m_efFullscreenMode : 0) : 0), - (int)w->m_bFakeFullscreenState, getGroupedData(w, format).c_str(), w->m_pSwallowed); + (int)w->m_bFakeFullscreenState, getGroupedData(w, format).c_str(), (uintptr_t)w->m_pSwallowed); } } @@ -210,21 +209,21 @@ static std::string getWorkspaceData(CWorkspace* w, HyprCtl::eHyprCtlOutputFormat const auto PLASTW = w->getLastFocusedWindow(); const auto PMONITOR = g_pCompositor->getMonitorFromID(w->m_iMonitorID); if (format == HyprCtl::FORMAT_JSON) { - return getFormat(R"#({ - "id": %i, - "name": "%s", - "monitor": "%s", - "windows": %i, - "hasfullscreen": %s, - "lastwindow": "0x%lx", - "lastwindowtitle": "%s" -})#", + return getFormat(R"#({{ + "id": {}, + "name": "{}", + "monitor": "{}", + "windows": {}, + "hasfullscreen": {}, + "lastwindow": "0x{:x}", + "lastwindowtitle": "{}" +}})#", w->m_iID, escapeJSONStrings(w->m_szName).c_str(), escapeJSONStrings(PMONITOR ? PMONITOR->szName : "?").c_str(), - g_pCompositor->getWindowsOnWorkspace(w->m_iID), ((int)w->m_bHasFullscreenWindow == 1 ? "true" : "false"), PLASTW, + g_pCompositor->getWindowsOnWorkspace(w->m_iID), ((int)w->m_bHasFullscreenWindow == 1 ? "true" : "false"), (uintptr_t)PLASTW, PLASTW ? escapeJSONStrings(PLASTW->m_szTitle).c_str() : ""); } else { - return getFormat("workspace ID %i (%s) on monitor %s:\n\twindows: %i\n\thasfullscreen: %i\n\tlastwindow: 0x%lx\n\tlastwindowtitle: %s\n\n", w->m_iID, w->m_szName.c_str(), - PMONITOR ? PMONITOR->szName.c_str() : "?", g_pCompositor->getWindowsOnWorkspace(w->m_iID), (int)w->m_bHasFullscreenWindow, PLASTW, + return getFormat("workspace ID {} ({}) on monitor {}:\n\twindows: {}\n\thasfullscreen: {}\n\tlastwindow: 0x{:x}\n\tlastwindowtitle: {}\n\n", w->m_iID, w->m_szName.c_str(), + PMONITOR ? PMONITOR->szName.c_str() : "?", g_pCompositor->getWindowsOnWorkspace(w->m_iID), (int)w->m_bHasFullscreenWindow, (uintptr_t)PLASTW, PLASTW ? PLASTW->m_szTitle.c_str() : ""); } } @@ -278,8 +277,8 @@ std::string layersRequest(HyprCtl::eHyprCtlOutputFormat format) { for (auto& mon : g_pCompositor->m_vMonitors) { result += getFormat( - R"#("%s": { - "levels": { + R"#("{}": {{ + "levels": {{ )#", escapeJSONStrings(mon->szName).c_str()); @@ -287,20 +286,20 @@ std::string layersRequest(HyprCtl::eHyprCtlOutputFormat format) { for (auto& level : mon->m_aLayerSurfaceLayers) { result += getFormat( R"#( - "%i": [ + "{}": [ )#", layerLevel); for (auto& layer : level) { result += getFormat( - R"#( { - "address": "0x%lx", - "x": %i, - "y": %i, - "w": %i, - "h": %i, - "namespace": "%s" - },)#", - layer.get(), layer->geometry.x, layer->geometry.y, layer->geometry.width, layer->geometry.height, escapeJSONStrings(layer->szNamespace).c_str()); + R"#( {{ + "address": "0x{:x}", + "x": {}, + "y": {}, + "w": {}, + "h": {}, + "namespace": "{}" + }},)#", + (uintptr_t)layer.get(), layer->geometry.x, layer->geometry.y, layer->geometry.width, layer->geometry.height, escapeJSONStrings(layer->szNamespace).c_str()); } trimTrailingComma(result); @@ -324,14 +323,14 @@ std::string layersRequest(HyprCtl::eHyprCtlOutputFormat format) { } else { for (auto& mon : g_pCompositor->m_vMonitors) { - result += getFormat("Monitor %s:\n", mon->szName.c_str()); + result += getFormat("Monitor {}:\n", mon->szName.c_str()); int layerLevel = 0; static const std::array levelNames = {"background", "bottom", "top", "overlay"}; for (auto& level : mon->m_aLayerSurfaceLayers) { - result += getFormat("\tLayer level %i (%s):\n", layerLevel, levelNames[layerLevel].c_str()); + result += getFormat("\tLayer level {} ({}):\n", layerLevel, levelNames[layerLevel].c_str()); for (auto& layer : level) { - result += getFormat("\t\tLayer %lx: xywh: %i %i %i %i, namespace: %s\n", layer.get(), layer->geometry.x, layer->geometry.y, layer->geometry.width, + result += getFormat("\t\tLayer {:x}: xywh: {} {} {} {}, namespace: {}\n", (uintptr_t)layer.get(), layer->geometry.x, layer->geometry.y, layer->geometry.width, layer->geometry.height, layer->szNamespace.c_str()); } @@ -353,12 +352,12 @@ std::string devicesRequest(HyprCtl::eHyprCtlOutputFormat format) { for (auto& m : g_pInputManager->m_lMice) { result += getFormat( - R"#( { - "address": "0x%lx", - "name": "%s", - "defaultSpeed": %f - },)#", - &m, escapeJSONStrings(m.name).c_str(), + R"#( {{ + "address": "0x{:x}", + "name": "{}", + "defaultSpeed": {:.5f} + }},)#", + (uintptr_t)&m, escapeJSONStrings(m.name).c_str(), wlr_input_device_is_libinput(m.mouse) ? libinput_device_config_accel_get_default_speed((libinput_device*)wlr_libinput_get_device_handle(m.mouse)) : 0.f); } @@ -369,18 +368,18 @@ std::string devicesRequest(HyprCtl::eHyprCtlOutputFormat format) { for (auto& k : g_pInputManager->m_lKeyboards) { const auto KM = g_pInputManager->getActiveLayoutForKeyboard(&k); result += getFormat( - R"#( { - "address": "0x%lx", - "name": "%s", - "rules": "%s", - "model": "%s", - "layout": "%s", - "variant": "%s", - "options": "%s", - "active_keymap": "%s", - "main": %s - },)#", - &k, escapeJSONStrings(k.name).c_str(), escapeJSONStrings(k.currentRules.rules).c_str(), escapeJSONStrings(k.currentRules.model).c_str(), + R"#( {{ + "address": "0x{:x}", + "name": "{}", + "rules": "{}", + "model": "{}", + "layout": "{}", + "variant": "{}", + "options": "{}", + "active_keymap": "{}", + "main": {} + }},)#", + (uintptr_t)&k, escapeJSONStrings(k.name).c_str(), escapeJSONStrings(k.currentRules.rules).c_str(), escapeJSONStrings(k.currentRules.model).c_str(), escapeJSONStrings(k.currentRules.layout).c_str(), escapeJSONStrings(k.currentRules.variant).c_str(), escapeJSONStrings(k.currentRules.options).c_str(), escapeJSONStrings(KM).c_str(), (k.active ? "true" : "false")); } @@ -392,34 +391,34 @@ std::string devicesRequest(HyprCtl::eHyprCtlOutputFormat format) { for (auto& d : g_pInputManager->m_lTabletPads) { result += getFormat( - R"#( { - "address": "0x%lx", + R"#( {{ + "address": "0x{:x}", "type": "tabletPad", - "belongsTo": { - "address": "0x%lx", - "name": "%s" - } - },)#", - &d, d.pTabletParent, escapeJSONStrings(d.pTabletParent ? d.pTabletParent->name : "").c_str()); + "belongsTo": {{ + "address": "0x{:x}", + "name": "{}" + }} + }},)#", + (uintptr_t)&d, (uintptr_t)d.pTabletParent, escapeJSONStrings(d.pTabletParent ? d.pTabletParent->name : "").c_str()); } for (auto& d : g_pInputManager->m_lTablets) { result += getFormat( - R"#( { - "address": "0x%lx", - "name": "%s" - },)#", - &d, escapeJSONStrings(d.name).c_str()); + R"#( {{ + "address": "0x{:x}", + "name": "{}" + }},)#", + (uintptr_t)&d, escapeJSONStrings(d.name).c_str()); } for (auto& d : g_pInputManager->m_lTabletTools) { result += getFormat( - R"#( { - "address": "0x%lx", + R"#( {{ + "address": "0x{:x}", "type": "tabletTool", - "belongsTo": "0x%lx" - },)#", - &d, d.wlrTabletTool ? d.wlrTabletTool->data : 0); + "belongsTo": "0x{:x}" + }},)#", + (uintptr_t)&d, d.wlrTabletTool ? d.wlrTabletTool->data : 0); } trimTrailingComma(result); @@ -429,11 +428,11 @@ std::string devicesRequest(HyprCtl::eHyprCtlOutputFormat format) { for (auto& d : g_pInputManager->m_lTouchDevices) { result += getFormat( - R"#( { - "address": "0x%lx", - "name": "%s" - },)#", - &d, d.name.c_str()); + R"#( {{ + "address": "0x{:x}", + "name": "{}" + }},)#", + (uintptr_t)&d, d.name.c_str()); } trimTrailingComma(result); @@ -443,11 +442,11 @@ std::string devicesRequest(HyprCtl::eHyprCtlOutputFormat format) { for (auto& d : g_pInputManager->m_lSwitches) { result += getFormat( - R"#( { - "address": "0x%lx", - "name": "%s" - },)#", - &d, d.pWlrDevice ? d.pWlrDevice->name : ""); + R"#( {{ + "address": "0x{:x}", + "name": "{}" + }},)#", + (uintptr_t)&d, d.pWlrDevice ? d.pWlrDevice->name : ""); } trimTrailingComma(result); @@ -460,7 +459,7 @@ std::string devicesRequest(HyprCtl::eHyprCtlOutputFormat format) { for (auto& m : g_pInputManager->m_lMice) { result += getFormat( - "\tMouse at %lx:\n\t\t%s\n\t\t\tdefault speed: %f\n", &m, m.name.c_str(), + "\tMouse at {:x}:\n\t\t{}\n\t\t\tdefault speed: {:.5f}\n", (uintptr_t)&m, m.name.c_str(), (wlr_input_device_is_libinput(m.mouse) ? libinput_device_config_accel_get_default_speed((libinput_device*)wlr_libinput_get_device_handle(m.mouse)) : 0.f)); } @@ -468,35 +467,35 @@ std::string devicesRequest(HyprCtl::eHyprCtlOutputFormat format) { for (auto& k : g_pInputManager->m_lKeyboards) { const auto KM = g_pInputManager->getActiveLayoutForKeyboard(&k); - result += getFormat("\tKeyboard at %lx:\n\t\t%s\n\t\t\trules: r \"%s\", m \"%s\", l \"%s\", v \"%s\", o \"%s\"\n\t\t\tactive keymap: %s\n\t\t\tmain: %s\n", &k, - k.name.c_str(), k.currentRules.rules.c_str(), k.currentRules.model.c_str(), k.currentRules.layout.c_str(), k.currentRules.variant.c_str(), - k.currentRules.options.c_str(), KM.c_str(), (k.active ? "yes" : "no")); + result += getFormat("\tKeyboard at {:x}:\n\t\t{}\n\t\t\trules: r \"{}\", m \"{}\", l \"{}\", v \"{}\", o \"{}\"\n\t\t\tactive keymap: {}\n\t\t\tmain: {}\n", + (uintptr_t)&k, k.name.c_str(), k.currentRules.rules.c_str(), k.currentRules.model.c_str(), k.currentRules.layout.c_str(), + k.currentRules.variant.c_str(), k.currentRules.options.c_str(), KM.c_str(), (k.active ? "yes" : "no")); } result += "\n\nTablets:\n"; for (auto& d : g_pInputManager->m_lTabletPads) { - result += getFormat("\tTablet Pad at %lx (belongs to %lx -> %s)\n", &d, d.pTabletParent, d.pTabletParent ? d.pTabletParent->name.c_str() : ""); + result += getFormat("\tTablet Pad at {:x} (belongs to {:x} -> {})\n", (uintptr_t)&d, (uintptr_t)d.pTabletParent, d.pTabletParent ? d.pTabletParent->name.c_str() : ""); } for (auto& d : g_pInputManager->m_lTablets) { - result += getFormat("\tTablet at %lx:\n\t\t%s\n", &d, d.name.c_str()); + result += getFormat("\tTablet at {:x}:\n\t\t{}\n", (uintptr_t)&d, d.name.c_str()); } for (auto& d : g_pInputManager->m_lTabletTools) { - result += getFormat("\tTablet Tool at %lx (belongs to %lx)\n", &d, d.wlrTabletTool ? d.wlrTabletTool->data : 0); + result += getFormat("\tTablet Tool at {:x} (belongs to {:x})\n", (uintptr_t)&d, d.wlrTabletTool ? d.wlrTabletTool->data : 0); } result += "\n\nTouch:\n"; for (auto& d : g_pInputManager->m_lTouchDevices) { - result += getFormat("\tTouch Device at %lx:\n\t\t%s\n", &d, d.name.c_str()); + result += getFormat("\tTouch Device at {:x}:\n\t\t{}\n", (uintptr_t)&d, d.name.c_str()); } result += "\n\nSwitches:\n"; for (auto& d : g_pInputManager->m_lSwitches) { - result += getFormat("\tSwitch Device at %lx:\n\t\t%s\n", &d, d.pWlrDevice ? d.pWlrDevice->name : ""); + result += getFormat("\tSwitch Device at {:x}:\n\t\t{}\n", (uintptr_t)&d, d.pWlrDevice ? d.pWlrDevice->name : ""); } } @@ -509,14 +508,14 @@ std::string animationsRequest(HyprCtl::eHyprCtlOutputFormat format) { ret += "animations:\n"; for (auto& ac : g_pConfigManager->getAnimationConfig()) { - ret += getFormat("\n\tname: %s\n\t\toverriden: %i\n\t\tbezier: %s\n\t\tenabled: %i\n\t\tspeed: %.2f\n\t\tstyle: %s\n", ac.first.c_str(), (int)ac.second.overridden, + ret += getFormat("\n\tname: {}\n\t\toverriden: {}\n\t\tbezier: {}\n\t\tenabled: {}\n\t\tspeed: {:.2f}\n\t\tstyle: {}\n", ac.first.c_str(), (int)ac.second.overridden, ac.second.internalBezier.c_str(), ac.second.internalEnabled, ac.second.internalSpeed, ac.second.internalStyle.c_str()); } ret += "beziers:\n"; for (auto& bz : g_pAnimationManager->getAllBeziers()) { - ret += getFormat("\n\tname: %s\n", bz.first.c_str()); + ret += getFormat("\n\tname: {}\n", bz.first.c_str()); } } else { // json @@ -524,14 +523,14 @@ std::string animationsRequest(HyprCtl::eHyprCtlOutputFormat format) { ret += "[["; for (auto& ac : g_pConfigManager->getAnimationConfig()) { ret += getFormat(R"#( -{ - "name": "%s", - "overridden": %s, - "bezier": "%s", - "enabled": %s, - "speed": %.2f, - "style": "%s" -},)#", +{{ + "name": "{}", + "overridden": {}, + "bezier": "{}", + "enabled": {}, + "speed": {:.2f}, + "style": "{}" +}},)#", ac.first.c_str(), ac.second.overridden ? "true" : "false", ac.second.internalBezier.c_str(), ac.second.internalEnabled ? "true" : "false", ac.second.internalSpeed, ac.second.internalStyle.c_str()); } @@ -542,9 +541,9 @@ std::string animationsRequest(HyprCtl::eHyprCtlOutputFormat format) { for (auto& bz : g_pAnimationManager->getAllBeziers()) { ret += getFormat(R"#( -{ - "name": "%s" -},)#", +{{ + "name": "{}" +}},)#", bz.first.c_str()); } @@ -561,15 +560,15 @@ std::string globalShortcutsRequest(HyprCtl::eHyprCtlOutputFormat format) { const auto SHORTCUTS = g_pProtocolManager->m_pGlobalShortcutsProtocolManager->getAllShortcuts(); if (format == HyprCtl::eHyprCtlOutputFormat::FORMAT_NORMAL) { for (auto& sh : SHORTCUTS) - ret += getFormat("%s:%s -> %s\n", sh.appid.c_str(), sh.id.c_str(), sh.description.c_str()); + ret += getFormat("{}:{} -> {}\n", sh.appid.c_str(), sh.id.c_str(), sh.description.c_str()); } else { ret += "["; for (auto& sh : SHORTCUTS) { ret += getFormat(R"#( -{ - "name": "%s", - "description": "%s" -},)#", +{{ + "name": "{}", + "description": "{}" +}},)#", escapeJSONStrings(sh.appid + ":" + sh.id).c_str(), escapeJSONStrings(sh.description).c_str()); } trimTrailingComma(ret); @@ -595,7 +594,7 @@ std::string bindsRequest(HyprCtl::eHyprCtlOutputFormat format) { if (kb.nonConsuming) ret += "n"; - ret += getFormat("\n\tmodmask: %u\n\tsubmap: %s\n\tkey: %s\n\tkeycode: %d\n\tdispatcher: %s\n\targ: %s\n\n", kb.modmask, kb.submap.c_str(), kb.key.c_str(), kb.keycode, + ret += getFormat("\n\tmodmask: {}\n\tsubmap: {}\n\tkey: {}\n\tkeycode: {}\n\tdispatcher: {}\n\targ: {}\n\n", kb.modmask, kb.submap.c_str(), kb.key.c_str(), kb.keycode, kb.handler.c_str(), kb.arg.c_str()); } } else { @@ -604,19 +603,19 @@ std::string bindsRequest(HyprCtl::eHyprCtlOutputFormat format) { for (auto& kb : g_pKeybindManager->m_lKeybinds) { ret += getFormat( R"#( -{ - "locked": %s, - "mouse": %s, - "release": %s, - "repeat": %s, - "non_consuming": %s, - "modmask": %u, - "submap": "%s", - "key": "%s", - "keycode": %i, - "dispatcher": "%s", - "arg": "%s" -},)#", +{{ + "locked": {}, + "mouse": {}, + "release": {}, + "repeat": {}, + "non_consuming": {}, + "modmask": {}, + "submap": "{}", + "key": "{}", + "keycode": {}, + "dispatcher": "{}", + "arg": "{}" +}},)#", kb.locked ? "true" : "false", kb.mouse ? "true" : "false", kb.release ? "true" : "false", kb.repeat ? "true" : "false", kb.nonConsuming ? "true" : "false", kb.modmask, escapeJSONStrings(kb.submap).c_str(), escapeJSONStrings(kb.key).c_str(), kb.keycode, escapeJSONStrings(kb.handler).c_str(), escapeJSONStrings(kb.arg).c_str()); @@ -653,12 +652,12 @@ std::string versionRequest(HyprCtl::eHyprCtlOutputFormat format) { return result; } else { std::string result = getFormat( - R"#({ - "branch": "%s", - "commit": "%s", - "dirty": %s, - "commit_message": "%s", - "tag": "%s", + R"#({{ + "branch": "{}", + "commit": "{}", + "dirty": {}, + "commit_message": "{}", + "tag": "{}", "flags": [)#", GIT_BRANCH, GIT_COMMIT_HASH, (strcmp(GIT_DIRTY, "dirty") == 0 ? "true" : "false"), escapeJSONStrings(commitMsg).c_str(), GIT_TAG); @@ -701,7 +700,7 @@ std::string dispatchRequest(std::string in) { DISPATCHER->second(DISPATCHARG); - Debug::log(LOG, "Hyprctl: dispatcher %s : %s", DISPATCHSTR.c_str(), DISPATCHARG.c_str()); + Debug::log(LOG, "Hyprctl: dispatcher {} : {}", DISPATCHSTR.c_str(), DISPATCHARG.c_str()); return "ok"; } @@ -746,7 +745,7 @@ std::string dispatchKeyword(std::string in) { } } - Debug::log(LOG, "Hyprctl: keyword %s : %s", COMMAND.c_str(), VALUE.c_str()); + Debug::log(LOG, "Hyprctl: keyword {} : {}", COMMAND.c_str(), VALUE.c_str()); if (retval == "") return "ok"; @@ -783,13 +782,13 @@ std::string cursorPosRequest(HyprCtl::eHyprCtlOutputFormat format) { const auto CURSORPOS = g_pInputManager->getMouseCoordsInternal().floor(); if (format == HyprCtl::FORMAT_NORMAL) { - return getFormat("%i, %i", (int)CURSORPOS.x, (int)CURSORPOS.y); + return getFormat("{}, {}", (int)CURSORPOS.x, (int)CURSORPOS.y); } else { return getFormat(R"#( -{ - "x": %i, - "y": %i -} +{{ + "x": {}, + "y": {} +}} )#", (int)CURSORPOS.x, (int)CURSORPOS.y); } @@ -1043,20 +1042,20 @@ std::string dispatchGetOption(std::string request, HyprCtl::eHyprCtlOutputFormat return "no such option"; if (format == HyprCtl::eHyprCtlOutputFormat::FORMAT_NORMAL) - return getFormat("option %s\n\tint: %lld\n\tfloat: %f\n\tstr: \"%s\"\n\tdata: %lx", curitem.c_str(), PCFGOPT->intValue, PCFGOPT->floatValue, PCFGOPT->strValue.c_str(), - PCFGOPT->data.get()); + return getFormat("option {}\n\tint: {}\n\tfloat: {:.5f}\n\tstr: \"{}\"\n\tdata: {:x}", curitem, PCFGOPT->intValue, PCFGOPT->floatValue, PCFGOPT->strValue, + (uintptr_t)PCFGOPT->data.get()); else { return getFormat( R"#( -{ - "option": "%s", - "int": %lld, - "float": %f, - "str": "%s", - "data": "0x%lx" -} +{{ + "option": "{}", + "int": {} + "float": {:.5f}, + "str": "{}", + "data": "0x{:x}" +}} )#", - curitem.c_str(), PCFGOPT->intValue, PCFGOPT->floatValue, PCFGOPT->strValue.c_str(), PCFGOPT->data.get()); + curitem, PCFGOPT->intValue, PCFGOPT->floatValue, PCFGOPT->strValue, (uintptr_t)PCFGOPT->data.get()); } } @@ -1172,8 +1171,8 @@ std::string dispatchPlugin(std::string request) { std::string list = ""; for (auto& p : PLUGINS) { - list += getFormat("\nPlugin %s by %s:\n\tHandle: %lx\n\tVersion: %s\n\tDescription: %s\n", p->name.c_str(), p->author.c_str(), p->m_pHandle, p->version.c_str(), - p->description.c_str()); + list += getFormat("\nPlugin {} by {}:\n\tHandle: {:x}\n\tVersion: {}\n\tDescription: {}\n", p->name.c_str(), p->author.c_str(), (uintptr_t)p->m_pHandle, + p->version.c_str(), p->description.c_str()); } return list; @@ -1338,7 +1337,7 @@ int hyprCtlFDTick(int fd, uint32_t mask, void* data) { try { reply = getReply(request); } catch (std::exception& e) { - Debug::log(ERR, "Error in request: %s", e.what()); + Debug::log(ERR, "Error in request: {}", e.what()); reply = "Err: " + std::string(e.what()); } @@ -1376,7 +1375,7 @@ void HyprCtl::startHyprCtlSocket() { // 10 max queued. listen(iSocketFD, 10); - Debug::log(LOG, "Hypr socket started at %s", socketPath.c_str()); + Debug::log(LOG, "Hypr socket started at {}", socketPath.c_str()); wl_event_loop_add_fd(g_pCompositor->m_sWLEventLoop, iSocketFD, WL_EVENT_READABLE, hyprCtlFDTick, nullptr); } diff --git a/src/debug/HyprDebugOverlay.cpp b/src/debug/HyprDebugOverlay.cpp index bd10f680..4eb14cef 100644 --- a/src/debug/HyprDebugOverlay.cpp +++ b/src/debug/HyprDebugOverlay.cpp @@ -132,7 +132,7 @@ int CHyprMonitorDebugOverlay::draw(int offset) { yOffset += 17; cairo_move_to(g_pDebugOverlay->m_pCairo, 0, yOffset); - text = std::string(getFormat("%i FPS", (int)FPS)); + text = getFormat("{} FPS", (int)FPS); cairo_show_text(g_pDebugOverlay->m_pCairo, text.c_str()); cairo_text_extents(g_pDebugOverlay->m_pCairo, text.c_str(), &cairoExtents); if (cairoExtents.width > maxX) @@ -143,7 +143,7 @@ int CHyprMonitorDebugOverlay::draw(int offset) { yOffset += 11; cairo_move_to(g_pDebugOverlay->m_pCairo, 0, yOffset); - text = std::string(getFormat("Avg Frametime: %.2fms (var %.2fms)", avgFrametime, varFrametime)); + text = getFormat("Avg Frametime: {:.2f}ms (var {:.2f}ms)", avgFrametime, varFrametime); cairo_show_text(g_pDebugOverlay->m_pCairo, text.c_str()); cairo_text_extents(g_pDebugOverlay->m_pCairo, text.c_str(), &cairoExtents); if (cairoExtents.width > maxX) @@ -151,7 +151,7 @@ int CHyprMonitorDebugOverlay::draw(int offset) { yOffset += 11; cairo_move_to(g_pDebugOverlay->m_pCairo, 0, yOffset); - text = std::string(getFormat("Avg Rendertime: %.2fms (var %.2fms)", avgRenderTime, varRenderTime)); + text = getFormat("Avg Rendertime: {:.2f}ms (var {:.2f}ms)", avgRenderTime, varRenderTime); cairo_show_text(g_pDebugOverlay->m_pCairo, text.c_str()); cairo_text_extents(g_pDebugOverlay->m_pCairo, text.c_str(), &cairoExtents); if (cairoExtents.width > maxX) @@ -159,7 +159,7 @@ int CHyprMonitorDebugOverlay::draw(int offset) { yOffset += 11; cairo_move_to(g_pDebugOverlay->m_pCairo, 0, yOffset); - text = std::string(getFormat("Avg Rendertime (No Overlay): %.2fms (var %.2fms)", avgRenderTimeNoOverlay, varRenderTimeNoOverlay)); + text = getFormat("Avg Rendertime (No Overlay): {:.2f}ms (var {:.2f}ms)", avgRenderTimeNoOverlay, varRenderTimeNoOverlay); cairo_show_text(g_pDebugOverlay->m_pCairo, text.c_str()); cairo_text_extents(g_pDebugOverlay->m_pCairo, text.c_str(), &cairoExtents); if (cairoExtents.width > maxX) @@ -167,7 +167,7 @@ int CHyprMonitorDebugOverlay::draw(int offset) { yOffset += 11; cairo_move_to(g_pDebugOverlay->m_pCairo, 0, yOffset); - text = std::string(getFormat("Avg Anim Tick: %.2fms (var %.2fms) (%.2f TPS)", avgAnimMgrTick, varAnimMgrTick, 1.0 / (avgAnimMgrTick / 1000.0))); + text = getFormat("Avg Anim Tick: {:.2f}ms (var {:.2f}ms) ({:.2f} TPS)", avgAnimMgrTick, varAnimMgrTick, 1.0 / (avgAnimMgrTick / 1000.0)); cairo_show_text(g_pDebugOverlay->m_pCairo, text.c_str()); cairo_text_extents(g_pDebugOverlay->m_pCairo, text.c_str(), &cairoExtents); if (cairoExtents.width > maxX) diff --git a/src/debug/Log.cpp b/src/debug/Log.cpp index 4c3a8b2a..8850a0af 100644 --- a/src/debug/Log.cpp +++ b/src/debug/Log.cpp @@ -27,61 +27,3 @@ void Debug::wlrLog(wlr_log_importance level, const char* fmt, va_list args) { if (!disableStdout) std::cout << output << "\n"; } - -void Debug::log(LogLevel level, const char* fmt, ...) { - - if (disableLogs && *disableLogs) - return; - - if (level == TRACE && !trace) - return; - - // log to a file - std::ofstream ofs; - ofs.open(logFile, std::ios::out | std::ios::app); - - switch (level) { - case LOG: ofs << "[LOG] "; break; - case WARN: ofs << "[WARN] "; break; - case ERR: ofs << "[ERR] "; break; - case CRIT: ofs << "[CRITICAL] "; break; - case INFO: ofs << "[INFO] "; break; - case TRACE: ofs << "[TRACE] "; break; - default: break; - } - - // print date and time to the ofs - if (disableTime && !*disableTime) { - auto timet = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()); - const auto MILLIS = std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count() % 1000; - - ofs << std::put_time(std::localtime(&timet), "[%H:%M:%S:"); - - if (MILLIS > 99) - ofs << MILLIS; - else if (MILLIS > 9) - ofs << "0" << MILLIS; - else - ofs << "00" << MILLIS; - - ofs << "] "; - } - - char* outputStr = nullptr; - - va_list args; - va_start(args, fmt); - vasprintf(&outputStr, fmt, args); - va_end(args); - - std::string output = std::string(outputStr); - free(outputStr); - - ofs << output << "\n"; - - ofs.close(); - - // log it to the stdout too. - if (!disableStdout) - std::cout << output << "\n"; -} diff --git a/src/debug/Log.hpp b/src/debug/Log.hpp index b2d76187..a65bccb1 100644 --- a/src/debug/Log.hpp +++ b/src/debug/Log.hpp @@ -1,10 +1,16 @@ #pragma once #include #include +#include +#include +#include +#include +#include "../helpers/MiscFunctions.hpp" #define LOGMESSAGESIZE 1024 -enum LogLevel { +enum LogLevel +{ NONE = -1, LOG = 0, WARN, @@ -15,13 +21,71 @@ enum LogLevel { }; namespace Debug { - void init(const std::string& IS); - void log(LogLevel level, const char* fmt, ...); - void wlrLog(wlr_log_importance level, const char* fmt, va_list args); - inline std::string logFile; inline int64_t* disableLogs = nullptr; inline int64_t* disableTime = nullptr; inline bool disableStdout = false; inline bool trace = false; + + void init(const std::string& IS); + template + void log(LogLevel level, const std::string& fmt, Args&&... args) { + if (disableLogs && *disableLogs) + return; + + if (level == TRACE && !trace) + return; + + std::string logMsg = ""; + + switch (level) { + case LOG: logMsg += "[LOG] "; break; + case WARN: logMsg += "[WARN] "; break; + case ERR: logMsg += "[ERR] "; break; + case CRIT: logMsg += "[CRITICAL] "; break; + case INFO: logMsg += "[INFO] "; break; + case TRACE: logMsg += "[TRACE] "; break; + default: break; + } + + // log to a file + std::ofstream ofs; + ofs.open(logFile, std::ios::out | std::ios::app); + + // print date and time to the ofs + if (disableTime && !*disableTime) { +#ifndef _LIBCPP_VERSION + logMsg += std::format("[{:%T}] ", std::chrono::hh_mm_ss{std::chrono::system_clock::now() - std::chrono::floor(std::chrono::system_clock::now())}); +#else + auto c = std::chrono::hh_mm_ss{std::chrono::system_clock::now() - std::chrono::floor(std::chrono::system_clock::now())}; + logMsg += std::format("{:%H}:{:%M}:{:%S}", c.hours(), c.minutes(), c.subseconds()); + +#endif + } + + try { + logMsg += std::vformat(fmt, std::make_format_args(args...)); + } catch (std::exception& e) { + std::string exceptionMsg = e.what(); + Debug::log(ERR, "caught exception in Debug::log: {}", exceptionMsg); + + const auto CALLSTACK = getBacktrace(); + + Debug::log(LOG, "stacktrace:"); + + for (size_t i = 0; i < CALLSTACK.size(); ++i) { + Debug::log(NONE, "\t #{} | {}", i, CALLSTACK[i].desc); + } + } + + ofs << logMsg << "\n"; + + ofs.close(); + + // log it to the stdout too. + if (!disableStdout) + std::cout << logMsg << "\n"; + } + + void wlrLog(wlr_log_importance level, const char* fmt, va_list args); }; \ No newline at end of file diff --git a/src/debug/TracyDefines.hpp b/src/debug/TracyDefines.hpp index b96a71dd..767b1a20 100644 --- a/src/debug/TracyDefines.hpp +++ b/src/debug/TracyDefines.hpp @@ -16,7 +16,7 @@ inline PFNGLGETQUERYOBJECTUI64VEXTPROC glGetQueryObjectui64v; inline void loadGLProc(void* pProc, const char* name) { void* proc = (void*)eglGetProcAddress(name); if (proc == NULL) { - Debug::log(CRIT, "[Tracy GPU Profiling] eglGetProcAddress(%s) failed", name); + Debug::log(CRIT, "[Tracy GPU Profiling] eglGetProcAddress({}) failed", name); abort(); } *(void**)pProc = proc; -- cgit v1.2.3