diff options
| author | vaxerski <vaxry@vaxry.net> | 2025-01-19 15:39:19 +0100 |
|---|---|---|
| committer | vaxerski <vaxry@vaxry.net> | 2025-01-19 16:11:12 +0100 |
| commit | 8dd2cd41fb4c5a5eb6886cc190419b36084cabfa (patch) | |
| tree | 713dfeb4f2bf75c2a04ed93166b5f9109dac9a84 /src/managers | |
| parent | 0a0e56d99c3b5f900ec561b3fe9a3c8a64fe1217 (diff) | |
core: move to inotify for monitoring the config files
instead of manually polling every second which is not efficient, use inotify.
an added bonus is that inotify is much much faster
Diffstat (limited to 'src/managers')
| -rw-r--r-- | src/managers/ThreadManager.cpp | 26 | ||||
| -rw-r--r-- | src/managers/ThreadManager.hpp | 16 | ||||
| -rw-r--r-- | src/managers/eventLoop/EventLoopManager.cpp | 11 | ||||
| -rw-r--r-- | src/managers/eventLoop/EventLoopManager.hpp | 2 |
4 files changed, 13 insertions, 42 deletions
diff --git a/src/managers/ThreadManager.cpp b/src/managers/ThreadManager.cpp deleted file mode 100644 index bd124c99..00000000 --- a/src/managers/ThreadManager.cpp +++ /dev/null @@ -1,26 +0,0 @@ -#include "ThreadManager.hpp" -#include "../debug/HyprCtl.hpp" -#include "../Compositor.hpp" -#include "../config/ConfigValue.hpp" - -static int handleTimer(void* data) { - const auto PTM = (CThreadManager*)data; - - static auto PDISABLECFGRELOAD = CConfigValue<Hyprlang::INT>("misc:disable_autoreload"); - - if (*PDISABLECFGRELOAD != 1) - g_pConfigManager->tick(); - - wl_event_source_timer_update(PTM->m_esConfigTimer, 1000); - - return 0; -} - -CThreadManager::CThreadManager() : m_esConfigTimer(wl_event_loop_add_timer(g_pCompositor->m_sWLEventLoop, handleTimer, this)) { - wl_event_source_timer_update(m_esConfigTimer, 1000); -} - -CThreadManager::~CThreadManager() { - if (m_esConfigTimer) - wl_event_source_remove(m_esConfigTimer); -} diff --git a/src/managers/ThreadManager.hpp b/src/managers/ThreadManager.hpp deleted file mode 100644 index 13e2fcd8..00000000 --- a/src/managers/ThreadManager.hpp +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include "../defines.hpp" -struct wl_event_source; - -class CThreadManager { - public: - CThreadManager(); - ~CThreadManager(); - - wl_event_source* m_esConfigTimer = nullptr; - - private: -}; - -inline std::unique_ptr<CThreadManager> g_pThreadManager;
\ No newline at end of file diff --git a/src/managers/eventLoop/EventLoopManager.cpp b/src/managers/eventLoop/EventLoopManager.cpp index db8b49b6..f98efc92 100644 --- a/src/managers/eventLoop/EventLoopManager.cpp +++ b/src/managers/eventLoop/EventLoopManager.cpp @@ -1,6 +1,7 @@ #include "EventLoopManager.hpp" #include "../../debug/Log.hpp" #include "../../Compositor.hpp" +#include "../../config/ConfigWatcher.hpp" #include <algorithm> #include <limits> @@ -27,6 +28,8 @@ CEventLoopManager::~CEventLoopManager() { wl_event_source_remove(m_sWayland.eventSource); if (m_sIdle.eventSource) wl_event_source_remove(m_sIdle.eventSource); + if (m_configWatcherInotifySource) + wl_event_source_remove(m_configWatcherInotifySource); if (m_sTimers.timerfd >= 0) close(m_sTimers.timerfd); } @@ -42,9 +45,17 @@ static int aquamarineFDWrite(int fd, uint32_t mask, void* data) { return 1; } +static int configWatcherWrite(int fd, uint32_t mask, void* data) { + g_pConfigWatcher->onInotifyEvent(); + return 0; +} + void CEventLoopManager::enterLoop() { m_sWayland.eventSource = wl_event_loop_add_fd(m_sWayland.loop, m_sTimers.timerfd, WL_EVENT_READABLE, timerWrite, nullptr); + if (const auto FD = g_pConfigWatcher->getInotifyFD(); FD >= 0) + m_configWatcherInotifySource = wl_event_loop_add_fd(m_sWayland.loop, FD, WL_EVENT_READABLE, configWatcherWrite, nullptr); + aqPollFDs = g_pCompositor->m_pAqBackend->getPollFDs(); for (auto const& fd : aqPollFDs) { m_sWayland.aqEventSources.emplace_back(wl_event_loop_add_fd(m_sWayland.loop, fd->fd, WL_EVENT_READABLE, aquamarineFDWrite, fd.get())); diff --git a/src/managers/eventLoop/EventLoopManager.hpp b/src/managers/eventLoop/EventLoopManager.hpp index 39d8bbeb..90402de2 100644 --- a/src/managers/eventLoop/EventLoopManager.hpp +++ b/src/managers/eventLoop/EventLoopManager.hpp @@ -51,6 +51,8 @@ class CEventLoopManager { SIdleData m_sIdle; std::vector<SP<Aquamarine::SPollFD>> aqPollFDs; + wl_event_source* m_configWatcherInotifySource = nullptr; + friend class CSyncTimeline; }; |
