debug: move to hyprutils' logger (#12673)

This commit is contained in:
Vaxry 2025-12-18 17:23:24 +00:00 committed by GitHub
parent f88deb928a
commit 6175ecd4c4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
147 changed files with 1696 additions and 1709 deletions

View file

@ -2,7 +2,7 @@
#include <re2/re2.h>
#include "Compositor.hpp"
#include "debug/Log.hpp"
#include "debug/log/Logger.hpp"
#include "desktop/DesktopTypes.hpp"
#include "desktop/state/FocusState.hpp"
#include "helpers/Splashes.hpp"
@ -32,6 +32,7 @@
#include <helpers/SdDaemon.hpp> // for SdNotify
#endif
#include "helpers/fs/FsUtils.hpp"
#include "helpers/env/Env.hpp"
#include "protocols/FractionalScale.hpp"
#include "protocols/PointerConstraints.hpp"
#include "protocols/LayerShell.hpp"
@ -86,7 +87,7 @@ using enum NContentType::eContentType;
using namespace NColorManagement;
static int handleCritSignal(int signo, void* data) {
Debug::log(LOG, "Hyprland received signal {}", signo);
Log::logger->log(Log::DEBUG, "Hyprland received signal {}", signo);
if (signo == SIGTERM || signo == SIGINT || signo == SIGKILL)
g_pCompositor->stopCompositor();
@ -125,23 +126,6 @@ static void handleUserSignal(int sig) {
}
}
static eLogLevel aqLevelToHl(Aquamarine::eBackendLogLevel level) {
switch (level) {
case Aquamarine::eBackendLogLevel::AQ_LOG_TRACE: return TRACE;
case Aquamarine::eBackendLogLevel::AQ_LOG_DEBUG: return LOG;
case Aquamarine::eBackendLogLevel::AQ_LOG_ERROR: return ERR;
case Aquamarine::eBackendLogLevel::AQ_LOG_WARNING: return WARN;
case Aquamarine::eBackendLogLevel::AQ_LOG_CRITICAL: return CRIT;
default: break;
}
return NONE;
}
static void aqLog(Aquamarine::eBackendLogLevel level, std::string msg) {
Debug::log(aqLevelToHl(level), "[AQ] {}", msg);
}
bool CCompositor::setWatchdogFd(int fd) {
m_watchdogWriteFd = Hyprutils::OS::CFileDescriptor{fd};
return m_watchdogWriteFd.isValid() && !m_watchdogWriteFd.isClosed();
@ -149,9 +133,9 @@ bool CCompositor::setWatchdogFd(int fd) {
void CCompositor::bumpNofile() {
if (!getrlimit(RLIMIT_NOFILE, &m_originalNofile))
Debug::log(LOG, "Old rlimit: soft -> {}, hard -> {}", m_originalNofile.rlim_cur, m_originalNofile.rlim_max);
Log::logger->log(Log::DEBUG, "Old rlimit: soft -> {}, hard -> {}", m_originalNofile.rlim_cur, m_originalNofile.rlim_max);
else {
Debug::log(ERR, "Failed to get NOFILE rlimits");
Log::logger->log(Log::ERR, "Failed to get NOFILE rlimits");
m_originalNofile.rlim_max = 0;
return;
}
@ -161,13 +145,13 @@ void CCompositor::bumpNofile() {
newLimit.rlim_cur = newLimit.rlim_max;
if (setrlimit(RLIMIT_NOFILE, &newLimit) < 0) {
Debug::log(ERR, "Failed bumping NOFILE limits higher");
Log::logger->log(Log::ERR, "Failed bumping NOFILE limits higher");
m_originalNofile.rlim_max = 0;
return;
}
if (!getrlimit(RLIMIT_NOFILE, &newLimit))
Debug::log(LOG, "New rlimit: soft -> {}, hard -> {}", newLimit.rlim_cur, newLimit.rlim_max);
Log::logger->log(Log::DEBUG, "New rlimit: soft -> {}, hard -> {}", newLimit.rlim_cur, newLimit.rlim_max);
}
void CCompositor::restoreNofile() {
@ -175,7 +159,7 @@ void CCompositor::restoreNofile() {
return;
if (setrlimit(RLIMIT_NOFILE, &m_originalNofile) < 0)
Debug::log(ERR, "Failed restoring NOFILE limits");
Log::logger->log(Log::ERR, "Failed restoring NOFILE limits");
}
bool CCompositor::supportsDrmSyncobjTimeline() const {
@ -235,27 +219,27 @@ CCompositor::CCompositor(bool onlyConfig) : m_onlyConfigVerification(onlyConfig)
throw std::runtime_error("CCompositor() failed");
}
Debug::init(m_instancePath);
Log::logger->initIS(m_instancePath);
Debug::log(LOG, "Instance Signature: {}", m_instanceSignature);
Log::logger->log(Log::DEBUG, "Instance Signature: {}", m_instanceSignature);
Debug::log(LOG, "Runtime directory: {}", m_instancePath);
Log::logger->log(Log::DEBUG, "Runtime directory: {}", m_instancePath);
Debug::log(LOG, "Hyprland PID: {}", m_hyprlandPID);
Log::logger->log(Log::DEBUG, "Hyprland PID: {}", m_hyprlandPID);
Debug::log(LOG, "===== SYSTEM INFO: =====");
Log::logger->log(Log::DEBUG, "===== SYSTEM INFO: =====");
logSystemInfo();
Debug::log(LOG, "========================");
Log::logger->log(Log::DEBUG, "========================");
Debug::log(NONE, "\n\n"); // pad
Log::logger->log(Log::DEBUG, "\n\n"); // pad
Debug::log(INFO, "If you are crashing, or encounter any bugs, please consult https://wiki.hypr.land/Crashes-and-Bugs/\n\n");
Log::logger->log(Log::INFO, "If you are crashing, or encounter any bugs, please consult https://wiki.hypr.land/Crashes-and-Bugs/\n\n");
setRandomSplash();
Debug::log(LOG, "\nCurrent splash: {}\n\n", m_currentSplash);
Log::logger->log(Log::DEBUG, "\nCurrent splash: {}\n\n", m_currentSplash);
bumpNofile();
}
@ -315,7 +299,7 @@ void CCompositor::initServer(std::string socketName, int socketFd) {
// register crit signal handler
m_critSigSource = wl_event_loop_add_signal(m_wlEventLoop, SIGTERM, handleCritSignal, nullptr);
if (!envEnabled("HYPRLAND_NO_CRASHREPORTER")) {
if (!Env::envEnabled("HYPRLAND_NO_CRASHREPORTER")) {
signal(SIGSEGV, handleUnrecoverableSignal);
signal(SIGABRT, handleUnrecoverableSignal);
}
@ -323,14 +307,16 @@ void CCompositor::initServer(std::string socketName, int socketFd) {
initManagers(STAGE_PRIORITY);
if (envEnabled("HYPRLAND_TRACE"))
Debug::m_trace = true;
Log::logger->initCallbacks();
// set the buffer size to 1MB to avoid disconnects due to an app hanging for a short while
wl_display_set_default_max_buffer_size(m_wlDisplay, 1_MB);
Aquamarine::SBackendOptions options{};
options.logFunction = aqLog;
Aquamarine::SBackendOptions options{};
SP<Hyprutils::CLI::CLoggerConnection> conn = makeShared<Hyprutils::CLI::CLoggerConnection>(Log::logger->hu());
conn->setLogLevel(Log::DEBUG);
conn->setName("aquamarine");
options.logConnection = std::move(conn);
std::vector<Aquamarine::SBackendImplementationOptions> implementations;
Aquamarine::SBackendImplementationOptions option;
@ -347,9 +333,10 @@ void CCompositor::initServer(std::string socketName, int socketFd) {
m_aqBackend = CBackend::create(implementations, options);
if (!m_aqBackend) {
Debug::log(CRIT,
"m_pAqBackend was null! This usually means aquamarine could not find a GPU or encountered some issues. Make sure you're running either on a tty or on a Wayland "
"session, NOT an X11 one.");
Log::logger->log(
Log::CRIT,
"m_pAqBackend was null! This usually means aquamarine could not find a GPU or encountered some issues. Make sure you're running either on a tty or on a Wayland "
"session, NOT an X11 one.");
throwError("CBackend::create() failed!");
}
@ -358,19 +345,20 @@ void CCompositor::initServer(std::string socketName, int socketFd) {
initAllSignals();
if (!m_aqBackend->start()) {
Debug::log(CRIT,
"m_pAqBackend couldn't start! This usually means aquamarine could not find a GPU or encountered some issues. Make sure you're running either on a tty or on a "
"Wayland session, NOT an X11 one.");
Log::logger->log(
Log::CRIT,
"m_pAqBackend couldn't start! This usually means aquamarine could not find a GPU or encountered some issues. Make sure you're running either on a tty or on a "
"Wayland session, NOT an X11 one.");
throwError("CBackend::create() failed!");
}
m_initialized = true;
m_drm.fd = m_aqBackend->drmFD();
Debug::log(LOG, "Running on DRMFD: {}", m_drm.fd);
Log::logger->log(Log::DEBUG, "Running on DRMFD: {}", m_drm.fd);
m_drmRenderNode.fd = m_aqBackend->drmRenderNodeFD();
Debug::log(LOG, "Using RENDERNODEFD: {}", m_drmRenderNode.fd);
Log::logger->log(Log::DEBUG, "Using RENDERNODEFD: {}", m_drmRenderNode.fd);
#if defined(__linux__)
auto syncObjSupport = [](auto fd) {
@ -383,15 +371,15 @@ void CCompositor::initServer(std::string socketName, int socketFd) {
};
if ((m_drm.syncobjSupport = syncObjSupport(m_drm.fd)))
Debug::log(LOG, "DRM DisplayNode syncobj timeline support: {}", m_drm.syncobjSupport ? "yes" : "no");
Log::logger->log(Log::DEBUG, "DRM DisplayNode syncobj timeline support: {}", m_drm.syncobjSupport ? "yes" : "no");
if ((m_drmRenderNode.syncObjSupport = syncObjSupport(m_drmRenderNode.fd)))
Debug::log(LOG, "DRM RenderNode syncobj timeline support: {}", m_drmRenderNode.syncObjSupport ? "yes" : "no");
Log::logger->log(Log::DEBUG, "DRM RenderNode syncobj timeline support: {}", m_drmRenderNode.syncObjSupport ? "yes" : "no");
if (!m_drm.syncobjSupport && !m_drmRenderNode.syncObjSupport)
Debug::log(LOG, "DRM no syncobj support, disabling explicit sync");
Log::logger->log(Log::DEBUG, "DRM no syncobj support, disabling explicit sync");
#else
Debug::log(LOG, "DRM syncobj timeline support: no (not linux)");
Log::logger->log(Log::DEBUG, "DRM syncobj timeline support: no (not linux)");
#endif
if (!socketName.empty() && socketFd != -1) {
@ -399,9 +387,9 @@ void CCompositor::initServer(std::string socketName, int socketFd) {
const auto RETVAL = wl_display_add_socket_fd(m_wlDisplay, socketFd);
if (RETVAL >= 0) {
m_wlDisplaySocket = socketName;
Debug::log(LOG, "wl_display_add_socket_fd for {} succeeded with {}", socketName, RETVAL);
Log::logger->log(Log::DEBUG, "wl_display_add_socket_fd for {} succeeded with {}", socketName, RETVAL);
} else
Debug::log(WARN, "wl_display_add_socket_fd for {} returned {}: skipping", socketName, RETVAL);
Log::logger->log(Log::WARN, "wl_display_add_socket_fd for {} returned {}: skipping", socketName, RETVAL);
} else {
// get socket, avoid using 0
for (int candidate = 1; candidate <= 32; candidate++) {
@ -409,22 +397,22 @@ void CCompositor::initServer(std::string socketName, int socketFd) {
const auto RETVAL = wl_display_add_socket(m_wlDisplay, CANDIDATESTR.c_str());
if (RETVAL >= 0) {
m_wlDisplaySocket = CANDIDATESTR;
Debug::log(LOG, "wl_display_add_socket for {} succeeded with {}", CANDIDATESTR, RETVAL);
Log::logger->log(Log::DEBUG, "wl_display_add_socket for {} succeeded with {}", CANDIDATESTR, RETVAL);
break;
} else
Debug::log(WARN, "wl_display_add_socket for {} returned {}: skipping candidate {}", CANDIDATESTR, RETVAL, candidate);
Log::logger->log(Log::WARN, "wl_display_add_socket for {} returned {}: skipping candidate {}", CANDIDATESTR, RETVAL, candidate);
}
}
if (m_wlDisplaySocket.empty()) {
Debug::log(WARN, "All candidates failed, trying wl_display_add_socket_auto");
Log::logger->log(Log::WARN, "All candidates failed, trying wl_display_add_socket_auto");
const auto SOCKETSTR = wl_display_add_socket_auto(m_wlDisplay);
if (SOCKETSTR)
m_wlDisplaySocket = SOCKETSTR;
}
if (m_wlDisplaySocket.empty()) {
Debug::log(CRIT, "m_szWLDisplaySocket NULL!");
Log::logger->log(Log::CRIT, "m_szWLDisplaySocket NULL!");
throwError("m_szWLDisplaySocket was null! (wl_display_add_socket and wl_display_add_socket_auto failed)");
}
@ -446,7 +434,7 @@ void CCompositor::initServer(std::string socketName, int socketFd) {
void CCompositor::initAllSignals() {
m_aqBackend->events.newOutput.listenStatic([this](const SP<Aquamarine::IOutput>& output) {
Debug::log(LOG, "New aquamarine output with name {}", output->name);
Log::logger->log(Log::DEBUG, "New aquamarine output with name {}", output->name);
if (m_initialized)
onNewMonitor(output);
else
@ -454,42 +442,42 @@ void CCompositor::initAllSignals() {
});
m_aqBackend->events.newPointer.listenStatic([](const SP<Aquamarine::IPointer>& dev) {
Debug::log(LOG, "New aquamarine pointer with name {}", dev->getName());
Log::logger->log(Log::DEBUG, "New aquamarine pointer with name {}", dev->getName());
g_pInputManager->newMouse(dev);
g_pInputManager->updateCapabilities();
});
m_aqBackend->events.newKeyboard.listenStatic([](const SP<Aquamarine::IKeyboard>& dev) {
Debug::log(LOG, "New aquamarine keyboard with name {}", dev->getName());
Log::logger->log(Log::DEBUG, "New aquamarine keyboard with name {}", dev->getName());
g_pInputManager->newKeyboard(dev);
g_pInputManager->updateCapabilities();
});
m_aqBackend->events.newTouch.listenStatic([](const SP<Aquamarine::ITouch>& dev) {
Debug::log(LOG, "New aquamarine touch with name {}", dev->getName());
Log::logger->log(Log::DEBUG, "New aquamarine touch with name {}", dev->getName());
g_pInputManager->newTouchDevice(dev);
g_pInputManager->updateCapabilities();
});
m_aqBackend->events.newSwitch.listenStatic([](const SP<Aquamarine::ISwitch>& dev) {
Debug::log(LOG, "New aquamarine switch with name {}", dev->getName());
Log::logger->log(Log::DEBUG, "New aquamarine switch with name {}", dev->getName());
g_pInputManager->newSwitch(dev);
});
m_aqBackend->events.newTablet.listenStatic([](const SP<Aquamarine::ITablet>& dev) {
Debug::log(LOG, "New aquamarine tablet with name {}", dev->getName());
Log::logger->log(Log::DEBUG, "New aquamarine tablet with name {}", dev->getName());
g_pInputManager->newTablet(dev);
});
m_aqBackend->events.newTabletPad.listenStatic([](const SP<Aquamarine::ITabletPad>& dev) {
Debug::log(LOG, "New aquamarine tablet pad with name {}", dev->getName());
Log::logger->log(Log::DEBUG, "New aquamarine tablet pad with name {}", dev->getName());
g_pInputManager->newTabletPad(dev);
});
if (m_aqBackend->hasSession()) {
m_aqBackend->session->events.changeActive.listenStatic([this] {
if (m_aqBackend->session->active) {
Debug::log(LOG, "Session got activated!");
Log::logger->log(Log::DEBUG, "Session got activated!");
m_sessionActive = true;
@ -501,7 +489,7 @@ void CCompositor::initAllSignals() {
g_pConfigManager->m_wantsMonitorReload = true;
g_pCursorManager->syncGsettings();
} else {
Debug::log(LOG, "Session got deactivated!");
Log::logger->log(Log::DEBUG, "Session got deactivated!");
m_sessionActive = false;
}
@ -525,7 +513,7 @@ void CCompositor::cleanEnvironment() {
if (m_desktopEnvSet)
unsetenv("XDG_CURRENT_DESKTOP");
if (m_aqBackend->hasSession() && !envEnabled("HYPRLAND_NO_SD_VARS")) {
if (m_aqBackend->hasSession() && !Env::envEnabled("HYPRLAND_NO_SD_VARS")) {
const auto CMD =
#ifdef USES_SYSTEMD
"systemctl --user unset-environment DISPLAY WAYLAND_DISPLAY HYPRLAND_INSTANCE_SIGNATURE XDG_CURRENT_DESKTOP QT_QPA_PLATFORMTHEME PATH XDG_DATA_DIRS && hash "
@ -537,7 +525,7 @@ void CCompositor::cleanEnvironment() {
}
void CCompositor::stopCompositor() {
Debug::log(LOG, "Hyprland is stopping!");
Log::logger->log(Log::DEBUG, "Hyprland is stopping!");
// this stops the wayland loop, wl_display_run
wl_display_terminate(m_wlDisplay);
@ -556,11 +544,10 @@ void CCompositor::cleanup() {
removeLockFile();
m_isShuttingDown = true;
Debug::m_shuttingDown = true;
m_isShuttingDown = true;
#ifdef USES_SYSTEMD
if (NSystemd::sdBooted() > 0 && !envEnabled("HYPRLAND_NO_SD_NOTIFY"))
if (NSystemd::sdBooted() > 0 && !Env::envEnabled("HYPRLAND_NO_SD_NOTIFY"))
NSystemd::sdNotify(0, "STOPPING=1");
#endif
@ -622,106 +609,104 @@ void CCompositor::cleanup() {
// this frees all wayland resources, including sockets
wl_display_destroy(m_wlDisplay);
Debug::close();
}
void CCompositor::initManagers(eManagersInitStage stage) {
switch (stage) {
case STAGE_PRIORITY: {
Debug::log(LOG, "Creating the EventLoopManager!");
Log::logger->log(Log::DEBUG, "Creating the EventLoopManager!");
g_pEventLoopManager = makeUnique<CEventLoopManager>(m_wlDisplay, m_wlEventLoop);
Debug::log(LOG, "Creating the HookSystem!");
Log::logger->log(Log::DEBUG, "Creating the HookSystem!");
g_pHookSystem = makeUnique<CHookSystemManager>();
Debug::log(LOG, "Creating the KeybindManager!");
Log::logger->log(Log::DEBUG, "Creating the KeybindManager!");
g_pKeybindManager = makeUnique<CKeybindManager>();
Debug::log(LOG, "Creating the AnimationManager!");
Log::logger->log(Log::DEBUG, "Creating the AnimationManager!");
g_pAnimationManager = makeUnique<CHyprAnimationManager>();
Debug::log(LOG, "Creating the DynamicPermissionManager!");
Log::logger->log(Log::DEBUG, "Creating the DynamicPermissionManager!");
g_pDynamicPermissionManager = makeUnique<CDynamicPermissionManager>();
Debug::log(LOG, "Creating the ConfigManager!");
Log::logger->log(Log::DEBUG, "Creating the ConfigManager!");
g_pConfigManager = makeUnique<CConfigManager>();
Debug::log(LOG, "Creating the CHyprError!");
Log::logger->log(Log::DEBUG, "Creating the CHyprError!");
g_pHyprError = makeUnique<CHyprError>();
Debug::log(LOG, "Creating the LayoutManager!");
Log::logger->log(Log::DEBUG, "Creating the LayoutManager!");
g_pLayoutManager = makeUnique<CLayoutManager>();
Debug::log(LOG, "Creating the TokenManager!");
Log::logger->log(Log::DEBUG, "Creating the TokenManager!");
g_pTokenManager = makeUnique<CTokenManager>();
g_pConfigManager->init();
Debug::log(LOG, "Creating the PointerManager!");
Log::logger->log(Log::DEBUG, "Creating the PointerManager!");
g_pPointerManager = makeUnique<CPointerManager>();
Debug::log(LOG, "Creating the EventManager!");
Log::logger->log(Log::DEBUG, "Creating the EventManager!");
g_pEventManager = makeUnique<CEventManager>();
Debug::log(LOG, "Creating the AsyncResourceGatherer!");
Log::logger->log(Log::DEBUG, "Creating the AsyncResourceGatherer!");
g_pAsyncResourceGatherer = makeUnique<Hyprgraphics::CAsyncResourceGatherer>();
} break;
case STAGE_BASICINIT: {
Debug::log(LOG, "Creating the CHyprOpenGLImpl!");
Log::logger->log(Log::DEBUG, "Creating the CHyprOpenGLImpl!");
g_pHyprOpenGL = makeUnique<CHyprOpenGLImpl>();
Debug::log(LOG, "Creating the ProtocolManager!");
Log::logger->log(Log::DEBUG, "Creating the ProtocolManager!");
g_pProtocolManager = makeUnique<CProtocolManager>();
Debug::log(LOG, "Creating the SeatManager!");
Log::logger->log(Log::DEBUG, "Creating the SeatManager!");
g_pSeatManager = makeUnique<CSeatManager>();
} break;
case STAGE_LATE: {
Debug::log(LOG, "Creating CHyprCtl");
Log::logger->log(Log::DEBUG, "Creating CHyprCtl");
g_pHyprCtl = makeUnique<CHyprCtl>();
Debug::log(LOG, "Creating the InputManager!");
Log::logger->log(Log::DEBUG, "Creating the InputManager!");
g_pInputManager = makeUnique<CInputManager>();
Debug::log(LOG, "Creating the HyprRenderer!");
Log::logger->log(Log::DEBUG, "Creating the HyprRenderer!");
g_pHyprRenderer = makeUnique<CHyprRenderer>();
Debug::log(LOG, "Creating the XWaylandManager!");
Log::logger->log(Log::DEBUG, "Creating the XWaylandManager!");
g_pXWaylandManager = makeUnique<CHyprXWaylandManager>();
Debug::log(LOG, "Creating the SessionLockManager!");
Log::logger->log(Log::DEBUG, "Creating the SessionLockManager!");
g_pSessionLockManager = makeUnique<CSessionLockManager>();
Debug::log(LOG, "Creating the HyprDebugOverlay!");
Log::logger->log(Log::DEBUG, "Creating the HyprDebugOverlay!");
g_pDebugOverlay = makeUnique<CHyprDebugOverlay>();
Debug::log(LOG, "Creating the HyprNotificationOverlay!");
Log::logger->log(Log::DEBUG, "Creating the HyprNotificationOverlay!");
g_pHyprNotificationOverlay = makeUnique<CHyprNotificationOverlay>();
Debug::log(LOG, "Creating the PluginSystem!");
Log::logger->log(Log::DEBUG, "Creating the PluginSystem!");
g_pPluginSystem = makeUnique<CPluginSystem>();
g_pConfigManager->handlePluginLoads();
Debug::log(LOG, "Creating the DecorationPositioner!");
Log::logger->log(Log::DEBUG, "Creating the DecorationPositioner!");
g_pDecorationPositioner = makeUnique<CDecorationPositioner>();
Debug::log(LOG, "Creating the CursorManager!");
Log::logger->log(Log::DEBUG, "Creating the CursorManager!");
g_pCursorManager = makeUnique<CCursorManager>();
Debug::log(LOG, "Creating the VersionKeeper!");
Log::logger->log(Log::DEBUG, "Creating the VersionKeeper!");
g_pVersionKeeperMgr = makeUnique<CVersionKeeperManager>();
Debug::log(LOG, "Creating the DonationNag!");
Log::logger->log(Log::DEBUG, "Creating the DonationNag!");
g_pDonationNagManager = makeUnique<CDonationNagManager>();
Debug::log(LOG, "Creating the WelcomeManager!");
Log::logger->log(Log::DEBUG, "Creating the WelcomeManager!");
g_pWelcomeManager = makeUnique<CWelcomeManager>();
Debug::log(LOG, "Creating the ANRManager!");
Log::logger->log(Log::DEBUG, "Creating the ANRManager!");
g_pANRManager = makeUnique<CANRManager>();
Debug::log(LOG, "Starting XWayland");
Log::logger->log(Log::DEBUG, "Starting XWayland");
g_pXWayland = makeUnique<CXWayland>(g_pCompositor->m_wantsXwayland);
} break;
default: UNREACHABLE();
@ -756,7 +741,7 @@ void CCompositor::prepareFallbackOutput() {
}
if (!headless) {
Debug::log(WARN, "No headless in prepareFallbackOutput?!");
Log::logger->log(Log::WARN, "No headless in prepareFallbackOutput?!");
return;
}
@ -773,7 +758,7 @@ void CCompositor::startCompositor() {
/* Session-less Hyprland usually means a nest, don't update the env in that case */
m_aqBackend->hasSession() &&
/* Activation environment management is not disabled */
!envEnabled("HYPRLAND_NO_SD_VARS")) {
!Env::envEnabled("HYPRLAND_NO_SD_VARS")) {
const auto CMD =
#ifdef USES_SYSTEMD
"systemctl --user import-environment DISPLAY WAYLAND_DISPLAY HYPRLAND_INSTANCE_SIGNATURE XDG_CURRENT_DESKTOP QT_QPA_PLATFORMTHEME PATH XDG_DATA_DIRS && hash "
@ -783,7 +768,7 @@ void CCompositor::startCompositor() {
CKeybindManager::spawn(CMD);
}
Debug::log(LOG, "Running on WAYLAND_DISPLAY: {}", m_wlDisplaySocket);
Log::logger->log(Log::DEBUG, "Running on WAYLAND_DISPLAY: {}", m_wlDisplaySocket);
prepareFallbackOutput();
@ -792,10 +777,10 @@ void CCompositor::startCompositor() {
#ifdef USES_SYSTEMD
if (NSystemd::sdBooted() > 0) {
// tell systemd that we are ready so it can start other bond, following, related units
if (!envEnabled("HYPRLAND_NO_SD_NOTIFY"))
if (!Env::envEnabled("HYPRLAND_NO_SD_NOTIFY"))
NSystemd::sdNotify(0, "READY=1");
} else
Debug::log(LOG, "systemd integration is baked in but system itself is not booted à la systemd!");
Log::logger->log(Log::DEBUG, "systemd integration is baked in but system itself is not booted à la systemd!");
#endif
createLockFile();
@ -805,7 +790,7 @@ void CCompositor::startCompositor() {
write(m_watchdogWriteFd.get(), "vax", 3);
// This blocks until we are done.
Debug::log(LOG, "Hyprland is ready, running the event loop!");
Log::logger->log(Log::DEBUG, "Hyprland is ready, running the event loop!");
g_pEventLoopManager->enterLoop();
}
@ -842,7 +827,7 @@ PHLMONITOR CCompositor::getMonitorFromCursor() {
PHLMONITOR CCompositor::getMonitorFromVector(const Vector2D& point) {
if (m_monitors.empty()) {
Debug::log(WARN, "getMonitorFromVector called with empty monitor list");
Log::logger->log(Log::WARN, "getMonitorFromVector called with empty monitor list");
return nullptr;
}
@ -868,7 +853,7 @@ PHLMONITOR CCompositor::getMonitorFromVector(const Vector2D& point) {
}
if (!pBestMon) { // ?????
Debug::log(WARN, "getMonitorFromVector no close mon???");
Log::logger->log(Log::WARN, "getMonitorFromVector no close mon???");
return m_monitors.front();
}
@ -1310,7 +1295,7 @@ void CCompositor::cleanupFadingOut(const MONITORID& monid) {
w.reset();
Debug::log(LOG, "Cleanup: destroyed a window");
Log::logger->log(Log::DEBUG, "Cleanup: destroyed a window");
return;
}
}
@ -1347,7 +1332,7 @@ void CCompositor::cleanupFadingOut(const MONITORID& monid) {
ls.reset();
Debug::log(LOG, "Cleanup: destroyed a layersurface");
Log::logger->log(Log::DEBUG, "Cleanup: destroyed a layersurface");
return;
}
@ -1621,7 +1606,7 @@ PHLWORKSPACE CCompositor::getWorkspaceByString(const std::string& str) {
try {
return getWorkspaceByID(getWorkspaceIDNameFromString(str).id);
} catch (std::exception& e) { Debug::log(ERR, "Error in getWorkspaceByString, invalid id"); }
} catch (std::exception& e) { Log::logger->log(Log::ERR, "Error in getWorkspaceByString, invalid id"); }
return nullptr;
}
@ -1871,7 +1856,7 @@ PHLMONITOR CCompositor::getMonitorFromString(const std::string& name) {
const auto OFFSET = name[0] == '-' ? name : name.substr(1);
if (!isNumber(OFFSET)) {
Debug::log(ERR, "Error in getMonitorFromString: Not a number in relative.");
Log::logger->log(Log::ERR, "Error in getMonitorFromString: Not a number in relative.");
return nullptr;
}
@ -1895,7 +1880,7 @@ PHLMONITOR CCompositor::getMonitorFromString(const std::string& name) {
}
if (currentPlace != std::clamp(currentPlace, 0, sc<int>(m_monitors.size()) - 1)) {
Debug::log(WARN, "Error in getMonitorFromString: Vaxry's code sucks.");
Log::logger->log(Log::WARN, "Error in getMonitorFromString: Vaxry's code sucks.");
currentPlace = std::clamp(currentPlace, 0, sc<int>(m_monitors.size()) - 1);
}
@ -1907,14 +1892,14 @@ PHLMONITOR CCompositor::getMonitorFromString(const std::string& name) {
monID = std::stoi(name);
} catch (std::exception& e) {
// shouldn't happen but jic
Debug::log(ERR, "Error in getMonitorFromString: invalid num");
Log::logger->log(Log::ERR, "Error in getMonitorFromString: invalid num");
return nullptr;
}
if (monID > -1 && monID < sc<MONITORID>(m_monitors.size())) {
return getMonitorFromID(monID);
} else {
Debug::log(ERR, "Error in getMonitorFromString: invalid arg 1");
Log::logger->log(Log::ERR, "Error in getMonitorFromString: invalid arg 1");
return nullptr;
}
} else {
@ -1940,7 +1925,7 @@ void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, PHLMONITOR pMo
if (pWorkspace->m_monitor == pMonitor)
return;
Debug::log(LOG, "moveWorkspaceToMonitor: Moving {} to monitor {}", pWorkspace->m_id, pMonitor->m_id);
Log::logger->log(Log::DEBUG, "moveWorkspaceToMonitor: Moving {} to monitor {}", pWorkspace->m_id, pMonitor->m_id);
const auto POLDMON = pWorkspace->m_monitor.lock();
@ -1969,13 +1954,13 @@ void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, PHLMONITOR pMo
}())
nextWorkspaceOnMonitorID++;
Debug::log(LOG, "moveWorkspaceToMonitor: Plugging gap with new {}", nextWorkspaceOnMonitorID);
Log::logger->log(Log::DEBUG, "moveWorkspaceToMonitor: Plugging gap with new {}", nextWorkspaceOnMonitorID);
if (POLDMON)
newWorkspace = g_pCompositor->createNewWorkspace(nextWorkspaceOnMonitorID, POLDMON->m_id);
}
Debug::log(LOG, "moveWorkspaceToMonitor: Plugging gap with existing {}", nextWorkspaceOnMonitorID);
Log::logger->log(Log::DEBUG, "moveWorkspaceToMonitor: Plugging gap with existing {}", nextWorkspaceOnMonitorID);
if (POLDMON)
POLDMON->changeWorkspace(nextWorkspaceOnMonitorID, false, true, true);
}
@ -2015,7 +2000,7 @@ void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, PHLMONITOR pMo
}
if (SWITCHINGISACTIVE && POLDMON == Desktop::focusState()->monitor()) { // if it was active, preserve its' status. If it wasn't, don't.
Debug::log(LOG, "moveWorkspaceToMonitor: SWITCHINGISACTIVE, active {} -> {}", pMonitor->activeWorkspaceID(), pWorkspace->m_id);
Log::logger->log(Log::DEBUG, "moveWorkspaceToMonitor: SWITCHINGISACTIVE, active {} -> {}", pMonitor->activeWorkspaceID(), pWorkspace->m_id);
if (valid(pMonitor->m_activeWorkspace)) {
pMonitor->m_activeWorkspace->m_visible = false;
@ -2419,7 +2404,7 @@ Vector2D CCompositor::parseWindowVectorArgsRelative(const std::string& args, con
}
if (!isNumber(x) || !isNumber(y)) {
Debug::log(ERR, "parseWindowVectorArgsRelative: args not numbers");
Log::logger->log(Log::ERR, "parseWindowVectorArgsRelative: args not numbers");
return relativeTo;
}
@ -2449,7 +2434,7 @@ PHLWORKSPACE CCompositor::createNewWorkspace(const WORKSPACEID& id, const MONITO
const auto PMONITOR = getMonitorFromID(monID);
if (!PMONITOR) {
Debug::log(ERR, "BUG THIS: No pMonitor for new workspace in createNewWorkspace");
Log::logger->log(Log::ERR, "BUG THIS: No pMonitor for new workspace in createNewWorkspace");
return nullptr;
}
@ -2682,7 +2667,7 @@ void CCompositor::checkMonitorOverlaps() {
for (const auto& m : m_monitors) {
if (!monitorRegion.copy().intersect(m->logicalBox()).empty()) {
Debug::log(ERR, "Monitor {}: detected overlap with layout", m->m_name);
Log::logger->log(Log::ERR, "Monitor {}: detected overlap with layout", m->m_name);
g_pHyprNotificationOverlay->addNotification(I18n::i18nEngine()->localize(I18n::TXT_KEY_NOTIF_INVALID_MONITOR_LAYOUT, {{"name", m->m_name}}), CHyprColor{}, 15000,
ICON_WARNING);
@ -2700,14 +2685,14 @@ void CCompositor::arrangeMonitors() {
std::vector<PHLMONITOR> arranged;
arranged.reserve(toArrange.size());
Debug::log(LOG, "arrangeMonitors: {} to arrange", toArrange.size());
Log::logger->log(Log::DEBUG, "arrangeMonitors: {} to arrange", toArrange.size());
for (auto it = toArrange.begin(); it != toArrange.end();) {
auto m = *it;
if (m->m_activeMonitorRule.offset != Vector2D{-INT32_MAX, -INT32_MAX}) {
// explicit.
Debug::log(LOG, "arrangeMonitors: {} explicit {:j}", m->m_name, m->m_activeMonitorRule.offset);
Log::logger->log(Log::DEBUG, "arrangeMonitors: {} explicit {:j}", m->m_name, m->m_activeMonitorRule.offset);
m->moveTo(m->m_activeMonitorRule.offset);
arranged.push_back(m);
@ -2782,7 +2767,7 @@ void CCompositor::arrangeMonitors() {
}
default: UNREACHABLE();
}
Debug::log(LOG, "arrangeMonitors: {} auto {:j}", m->m_name, m->m_position);
Log::logger->log(Log::DEBUG, "arrangeMonitors: {} auto {:j}", m->m_name, m->m_position);
m->moveTo(newPosition);
arranged.emplace_back(m);
}
@ -2791,7 +2776,7 @@ void CCompositor::arrangeMonitors() {
// and set xwayland positions aka auto for all
maxXOffsetRight = 0;
for (auto const& m : m_monitors) {
Debug::log(LOG, "arrangeMonitors: {} xwayland [{}, {}]", m->m_name, maxXOffsetRight, 0);
Log::logger->log(Log::DEBUG, "arrangeMonitors: {} xwayland [{}, {}]", m->m_name, maxXOffsetRight, 0);
m->m_xwaylandPosition = {maxXOffsetRight, 0};
maxXOffsetRight += (*PXWLFORCESCALEZERO ? m->m_transformedSize.x : m->m_size.x);
@ -2815,7 +2800,7 @@ void CCompositor::enterUnsafeState() {
if (m_unsafeState)
return;
Debug::log(LOG, "Entering unsafe state");
Log::logger->log(Log::DEBUG, "Entering unsafe state");
if (!m_unsafeOutput->m_enabled)
m_unsafeOutput->onConnect(false);
@ -2829,7 +2814,7 @@ void CCompositor::leaveUnsafeState() {
if (!m_unsafeState)
return;
Debug::log(LOG, "Leaving unsafe state");
Log::logger->log(Log::DEBUG, "Leaving unsafe state");
m_unsafeState = false;
@ -2857,7 +2842,7 @@ void CCompositor::setPreferredScaleForSurface(SP<CWLSurfaceResource> pSurface, d
const auto PSURFACE = Desktop::View::CWLSurface::fromResource(pSurface);
if (!PSURFACE) {
Debug::log(WARN, "Orphaned CWLSurfaceResource {:x} in setPreferredScaleForSurface", rc<uintptr_t>(pSurface.get()));
Log::logger->log(Log::WARN, "Orphaned CWLSurfaceResource {:x} in setPreferredScaleForSurface", rc<uintptr_t>(pSurface.get()));
return;
}
@ -2870,7 +2855,7 @@ void CCompositor::setPreferredTransformForSurface(SP<CWLSurfaceResource> pSurfac
const auto PSURFACE = Desktop::View::CWLSurface::fromResource(pSurface);
if (!PSURFACE) {
Debug::log(WARN, "Orphaned CWLSurfaceResource {:x} in setPreferredTransformForSurface", rc<uintptr_t>(pSurface.get()));
Log::logger->log(Log::WARN, "Orphaned CWLSurfaceResource {:x} in setPreferredTransformForSurface", rc<uintptr_t>(pSurface.get()));
return;
}
@ -2926,7 +2911,7 @@ void CCompositor::onNewMonitor(SP<Aquamarine::IOutput> output) {
output->name = "FALLBACK"; // we are allowed to do this :)
}
Debug::log(LOG, "New output with name {}", output->name);
Log::logger->log(Log::DEBUG, "New output with name {}", output->name);
PNEWMONITOR->m_name = output->name;
PNEWMONITOR->m_self = PNEWMONITOR;
@ -2965,24 +2950,24 @@ void CCompositor::onNewMonitor(SP<Aquamarine::IOutput> output) {
PNEWMONITOR->m_frameScheduler->onFrame();
if (PROTO::colorManagement && shouldChangePreferredImageDescription()) {
Debug::log(ERR, "FIXME: color management protocol is enabled, need a preferred image description id");
Log::logger->log(Log::ERR, "FIXME: color management protocol is enabled, need a preferred image description id");
PROTO::colorManagement->onImagePreferredChanged(0);
}
}
SImageDescription CCompositor::getPreferredImageDescription() {
if (!PROTO::colorManagement) {
Debug::log(ERR, "FIXME: color management protocol is not enabled, returning empty image description");
Log::logger->log(Log::ERR, "FIXME: color management protocol is not enabled, returning empty image description");
return SImageDescription{};
}
Debug::log(WARN, "FIXME: color management protocol is enabled, determine correct preferred image description");
Log::logger->log(Log::WARN, "FIXME: color management protocol is enabled, determine correct preferred image description");
// should determine some common settings to avoid unnecessary transformations while keeping maximum displayable precision
return m_monitors.size() == 1 ? m_monitors[0]->m_imageDescription : SImageDescription{.primaries = NColorPrimaries::BT709};
}
SImageDescription CCompositor::getHDRImageDescription() {
if (!PROTO::colorManagement) {
Debug::log(ERR, "FIXME: color management protocol is not enabled, returning empty image description");
Log::logger->log(Log::ERR, "FIXME: color management protocol is not enabled, returning empty image description");
return SImageDescription{};
}
@ -3002,7 +2987,7 @@ SImageDescription CCompositor::getHDRImageDescription() {
}
bool CCompositor::shouldChangePreferredImageDescription() {
Debug::log(WARN, "FIXME: color management protocol is enabled and outputs changed, check preferred image description changes");
Log::logger->log(Log::WARN, "FIXME: color management protocol is enabled and outputs changed, check preferred image description changes");
return false;
}
@ -3040,7 +3025,7 @@ void CCompositor::ensurePersistentWorkspacesPresent(const std::vector<SWorkspace
}
if (id == WORKSPACE_INVALID) {
Debug::log(ERR, "ensurePersistentWorkspacesPresent: couldn't resolve id for workspace {}", rule.workspaceString);
Log::logger->log(Log::ERR, "ensurePersistentWorkspacesPresent: couldn't resolve id for workspace {}", rule.workspaceString);
continue;
}
PWORKSPACE = getWorkspaceByID(id);
@ -3052,7 +3037,7 @@ void CCompositor::ensurePersistentWorkspacesPresent(const std::vector<SWorkspace
}
if (!PMONITOR) {
Debug::log(ERR, "ensurePersistentWorkspacesPresent: couldn't resolve monitor for {}, skipping", rule.monitor);
Log::logger->log(Log::ERR, "ensurePersistentWorkspacesPresent: couldn't resolve monitor for {}, skipping", rule.monitor);
continue;
}
@ -3064,12 +3049,12 @@ void CCompositor::ensurePersistentWorkspacesPresent(const std::vector<SWorkspace
if (PWORKSPACE) {
if (PWORKSPACE->m_monitor == PMONITOR) {
Debug::log(LOG, "ensurePersistentWorkspacesPresent: workspace persistent {} already on {}", rule.workspaceString, PMONITOR->m_name);
Log::logger->log(Log::DEBUG, "ensurePersistentWorkspacesPresent: workspace persistent {} already on {}", rule.workspaceString, PMONITOR->m_name);
continue;
}
Debug::log(LOG, "ensurePersistentWorkspacesPresent: workspace persistent {} not on {}, moving", rule.workspaceString, PMONITOR->m_name);
Log::logger->log(Log::DEBUG, "ensurePersistentWorkspacesPresent: workspace persistent {} not on {}, moving", rule.workspaceString, PMONITOR->m_name);
moveWorkspaceToMonitor(PWORKSPACE, PMONITOR);
continue;
}