From bd18c9088dd194a5707fab2603067d352ca3db4a Mon Sep 17 00:00:00 2001 From: FreezeEngine Date: Fri, 23 Aug 2024 04:30:45 +0300 Subject: [PATCH] Event dispatching performance fix --- src/api/eventing/EventManager.h | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/api/eventing/EventManager.h b/src/api/eventing/EventManager.h index c2984b1f..5aaf73dd 100644 --- a/src/api/eventing/EventManager.h +++ b/src/api/eventing/EventManager.h @@ -7,11 +7,6 @@ class IEventManager { public: template bool dispatch(T& ev) requires std::derived_from { - std::sort(listeners.begin(), listeners.end(), [](std::pair const& left, - std::pair const& right) { - return left.second.priority > right.second.priority; - }); - for (auto& pair : listeners) { if (pair.first == T::hash) { if (pair.second.listener->shouldListen() || pair.second.callWhileInactive) { @@ -33,6 +28,10 @@ class IEventManager { void listen(Listener* ptr, EventListenerFunc listener, int priority = 0, bool callWhileInactive = false) requires std::derived_from { mutex.lock(); listeners.push_back({ T::hash, EventListener{ listener, ptr, callWhileInactive, priority } }); + std::sort(listeners.begin(), listeners.end(), [](std::pair const& left, + std::pair const& right) { + return left.second.priority > right.second.priority; + }); mutex.unlock(); }