misc: a few compiler level performance optimisations (#6559)

* window: use const references instead of copies

use const references instead of wasteful copies and make the = operator
check for self assignment and return early. also use const in all the
other operators.

* listener: pass std::function as const reference

instead of copies pass the std::functions as const references.

* config: dont unnecessarily convert to c_str

getHyprlangConfigValuePtr wants an std::string and we already have an
std::string, dont convert it to a c_str only for it to be converted back
to an std::string.

* buffer: pass attributes as const reference

pass attributes as const reference instead of copies.
This commit is contained in:
Tom Englund 2024-06-17 17:37:36 +02:00 committed by GitHub
parent a9c7a0830f
commit 28ce0e0f80
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 24 additions and 20 deletions

View file

@ -11,7 +11,7 @@ template <typename T>
class CConfigValue { class CConfigValue {
public: public:
CConfigValue(const std::string& val) { CConfigValue(const std::string& val) {
const auto PVHYPRLANG = g_pConfigManager->getHyprlangConfigValuePtr(val.c_str()); const auto PVHYPRLANG = g_pConfigManager->getHyprlangConfigValuePtr(val);
p_ = PVHYPRLANG->getDataStaticPtr(); p_ = PVHYPRLANG->getDataStaticPtr();

View file

@ -62,18 +62,22 @@ class IWindowTransformer;
template <typename T> template <typename T>
class CWindowOverridableVar { class CWindowOverridableVar {
public: public:
CWindowOverridableVar(T val) { CWindowOverridableVar(T const& val) {
value = val; value = val;
} }
~CWindowOverridableVar() = default; ~CWindowOverridableVar() = default;
CWindowOverridableVar<T>& operator=(CWindowOverridableVar<T> other) { CWindowOverridableVar<T>& operator=(CWindowOverridableVar<T> const& other) {
if (locked) // Self-assignment check
if (this == &other)
return *this; return *this;
locked = other.locked; // Check if the current object is locked
value = other.value; if (!locked) {
locked = other.locked;
value = other.value;
}
return *this; return *this;
} }
@ -85,36 +89,36 @@ class CWindowOverridableVar {
return other; return other;
} }
void forceSetIgnoreLocked(T val, bool lock = false) { void forceSetIgnoreLocked(T const& val, bool lock = false) {
value = val; value = val;
locked = lock; locked = lock;
} }
T operator*(T& other) { T operator*(T const& other) {
return value * other; return value * other;
} }
T operator+(T& other) { T operator+(T const& other) {
return value + other; return value + other;
} }
bool operator==(T& other) { bool operator==(T const& other) {
return other == value; return other == value;
} }
bool operator>=(T& other) { bool operator>=(T const& other) {
return value >= other; return value >= other;
} }
bool operator<=(T& other) { bool operator<=(T const& other) {
return value <= other; return value <= other;
} }
bool operator>(T& other) { bool operator>(T const& other) {
return value > other; return value > other;
} }
bool operator<(T& other) { bool operator<(T const& other) {
return value < other; return value < other;
} }

View file

@ -18,7 +18,7 @@ void handleWrapped(wl_listener* listener, void* data) {
g_pWatchdog->endWatching(); g_pWatchdog->endWatching();
} }
CHyprWLListener::CHyprWLListener(wl_signal* pSignal, std::function<void(void*, void*)> callback, void* pOwner) { CHyprWLListener::CHyprWLListener(wl_signal* pSignal, std::function<void(void*, void*)> const& callback, void* pOwner) {
initCallback(pSignal, callback, pOwner); initCallback(pSignal, callback, pOwner);
} }
@ -44,7 +44,7 @@ bool CHyprWLListener::isConnected() {
return !wl_list_empty(&m_swWrapper.m_sListener.link); return !wl_list_empty(&m_swWrapper.m_sListener.link);
} }
void CHyprWLListener::initCallback(wl_signal* pSignal, std::function<void(void*, void*)> callback, void* pOwner, std::string author) { void CHyprWLListener::initCallback(wl_signal* pSignal, std::function<void(void*, void*)> const& callback, void* pOwner, std::string author) {
if (isConnected()) { if (isConnected()) {
Debug::log(ERR, "Tried to connect a listener twice?!"); Debug::log(ERR, "Tried to connect a listener twice?!");
return; return;

View file

@ -6,7 +6,7 @@
class CHyprWLListener { class CHyprWLListener {
public: public:
CHyprWLListener(wl_signal*, std::function<void(void*, void*)>, void* owner); CHyprWLListener(wl_signal*, std::function<void(void*, void*)> const&, void* owner);
CHyprWLListener(); CHyprWLListener();
~CHyprWLListener(); ~CHyprWLListener();
@ -15,7 +15,7 @@ class CHyprWLListener {
CHyprWLListener& operator=(const CHyprWLListener&) = delete; CHyprWLListener& operator=(const CHyprWLListener&) = delete;
CHyprWLListener& operator=(CHyprWLListener&&) = delete; CHyprWLListener& operator=(CHyprWLListener&&) = delete;
void initCallback(wl_signal*, std::function<void(void*, void*)>, void* owner, std::string author = ""); void initCallback(wl_signal*, std::function<void(void*, void*)> const&, void* owner, std::string author = "");
void removeCallback(); void removeCallback();

View file

@ -3,7 +3,7 @@
#include "../../render/Renderer.hpp" #include "../../render/Renderer.hpp"
#include "../../helpers/Format.hpp" #include "../../helpers/Format.hpp"
CDMABuffer::CDMABuffer(uint32_t id, wl_client* client, SDMABUFAttrs attrs_) : attrs(attrs_) { CDMABuffer::CDMABuffer(uint32_t id, wl_client* client, SDMABUFAttrs const& attrs_) : attrs(attrs_) {
g_pHyprRenderer->makeEGLCurrent(); g_pHyprRenderer->makeEGLCurrent();
listeners.resourceDestroy = events.destroy.registerListener([this](std::any d) { listeners.resourceDestroy = events.destroy.registerListener([this](std::any d) {

View file

@ -4,7 +4,7 @@
class CDMABuffer : public IWLBuffer { class CDMABuffer : public IWLBuffer {
public: public:
CDMABuffer(uint32_t id, wl_client* client, SDMABUFAttrs attrs_); CDMABuffer(uint32_t id, wl_client* client, SDMABUFAttrs const& attrs_);
virtual ~CDMABuffer(); virtual ~CDMABuffer();
virtual eBufferCapability caps(); virtual eBufferCapability caps();