EventRegistry/Func: Disable events when all bodies are disabled

This is just a small optimization on top of what is there.

Add state to Func for tracking if any enabled bodies exist which
allows us to propagate it up to the EventHandler::bool() operator.
In turn, when all bodies of an event's Func have been runtime disabled,
the event itself will not be invoked anymore.

Experiments have shown that this allows runtime toggling of new_event()
without performance impact when disabled. This could enable use-cases
where new_packet() handlers are enabled for a split second once in a
while to either dump or sample raw packet data at runtime.
This commit is contained in:
Arne Welzel 2022-12-08 12:55:47 +01:00
parent 92e4c11914
commit 21cc5f9132
6 changed files with 163 additions and 7 deletions

View file

@ -24,7 +24,8 @@ EventHandler::EventHandler(std::string arg_name)
EventHandler::operator bool() const
{
return enabled && ((local && local->HasBodies()) || generate_always || ! auto_publish.empty());
return enabled &&
((local && local->HasEnabledBodies()) || generate_always || ! auto_publish.empty());
}
const FuncTypePtr& EventHandler::GetType(bool check_export)