diff options
| author | Aleksei Borzenkov <[email protected]> | 2024-03-05 10:50:35 +0300 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-03-05 10:50:35 +0300 |
| commit | bd29bb29362170537b1bdca13d812114c870d94a (patch) | |
| tree | 00d253c6f48dbb48886db3e6f7d8e2f26af7b496 | |
| parent | ac6a6144a7b896998e61a2a4e59faf144c09f6e2 (diff) | |
Avoid copying event observers before each call (#2431)
| -rw-r--r-- | ydb/library/actors/testlib/test_runtime.cpp | 48 |
1 files changed, 25 insertions, 23 deletions
diff --git a/ydb/library/actors/testlib/test_runtime.cpp b/ydb/library/actors/testlib/test_runtime.cpp index 1d4794ee0fb..c64a332c2b3 100644 --- a/ydb/library/actors/testlib/test_runtime.cpp +++ b/ydb/library/actors/testlib/test_runtime.cpp @@ -1206,13 +1206,14 @@ namespace NActors { for (auto& ev : events) { TInverseGuard<TMutex> inverseGuard(Mutex); - for (auto observer : ObserverFuncs) { + for (auto& observer : ObserverFuncs) { observer(ev); if (!ev) break; } - if(ev && ObserverFunc(ev) != EEventAction::DROP && ev) + if (ev && ObserverFunc(ev) != EEventAction::DROP) { eventsToPush.push_back(ev); + } } mbox.second->PushFront(eventsToPush); } @@ -1237,37 +1238,38 @@ namespace NActors { } hasProgress = true; - EEventAction action = EEventAction::PROCESS; + EEventAction action; { TInverseGuard<TMutex> inverseGuard(Mutex); - for (auto observer : ObserverFuncs) { + for (auto& observer : ObserverFuncs) { observer(ev); - if(!ev) break; + if (!ev) break; } - if (ev) + if (ev) { action = ObserverFunc(ev); + } else { + action = EEventAction::DROP; + } } - if (ev) { - switch (action) { - case EEventAction::PROCESS: - UpdateFinalEventsStatsForEachContext(*ev); - SendInternal(ev.Release(), mbox.first.NodeId - FirstNodeId, false); - break; - case EEventAction::DROP: - // do nothing - break; - case EEventAction::RESCHEDULE: { - TInstant deadline = TInstant::MicroSeconds(CurrentTimestamp) + ReschedulingDelay; - mbox.second->Freeze(deadline); - mbox.second->PushFront(ev); - break; - } - default: - Y_ABORT("Unknown action"); + switch (action) { + case EEventAction::PROCESS: + UpdateFinalEventsStatsForEachContext(*ev); + SendInternal(ev.Release(), mbox.first.NodeId - FirstNodeId, false); + break; + case EEventAction::DROP: + // do nothing + break; + case EEventAction::RESCHEDULE: { + TInstant deadline = TInstant::MicroSeconds(CurrentTimestamp) + ReschedulingDelay; + mbox.second->Freeze(deadline); + mbox.second->PushFront(ev); + break; } + default: + Y_ABORT("Unknown action"); } } } |
