diff --git a/src/Compositor.cpp b/src/Compositor.cpp index aebb0ac13..88a2530b3 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -69,6 +69,8 @@ #include #include #include +#include +#include using namespace Hyprutils::String; using namespace Aquamarine; @@ -162,10 +164,22 @@ void CCompositor::restoreNofile() { Debug::log(ERR, "Failed restoring NOFILE limits"); } +void CCompositor::setMallocThreshold() { +#ifdef M_TRIM_THRESHOLD + // The default is 128 pages, + // which is very large and can lead to a lot of memory used for no reason + // because trimming hasn't happened + static const int PAGESIZE = sysconf(_SC_PAGESIZE); + mallopt(M_TRIM_THRESHOLD, 6 * PAGESIZE); +#endif +} + CCompositor::CCompositor(bool onlyConfig) : m_bOnlyConfigVerification(onlyConfig), m_iHyprlandPID(getpid()) { if (onlyConfig) return; + setMallocThreshold(); + m_szHyprTempDataRoot = std::string{getenv("XDG_RUNTIME_DIR")} + "/hypr"; if (m_szHyprTempDataRoot.starts_with("/hypr")) { diff --git a/src/Compositor.hpp b/src/Compositor.hpp index a57095a3d..893ffadda 100644 --- a/src/Compositor.hpp +++ b/src/Compositor.hpp @@ -52,8 +52,6 @@ class CCompositor { void startCompositor(); void stopCompositor(); void cleanup(); - void createLockFile(); - void removeLockFile(); void bumpNofile(); void restoreNofile(); @@ -163,6 +161,9 @@ class CCompositor { void setRandomSplash(); void initManagers(eManagersInitStage stage); void prepareFallbackOutput(); + void createLockFile(); + void removeLockFile(); + void setMallocThreshold(); uint64_t m_iHyprlandPID = 0; wl_event_source* m_critSigSource = nullptr;