diff options
author | Daniel Collins <dpcollins@google.com> | 2023-12-14 14:14:13 -0500 |
---|---|---|
committer | WebRTC LUCI CQ <webrtc-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2023-12-14 21:08:58 +0000 |
commit | d093d0db7f64c76b71997447ccb432216cf73582 (patch) | |
tree | d880dfdaf8b26b6da6d20f0a26afc58150ad3469 | |
parent | 3ba809d6a6bc20931adde485bb04586a6556db11 (diff) | |
download | webrtc-d093d0db7f64c76b71997447ccb432216cf73582.tar.gz |
Change CallbackDeferrer to pre-reserve the deferred vector.
The push_back pattern results in frequent vector growth which has performance overhead. This is .5% of our server's CPU
Bug: webrtc:15723
Change-Id: Ic151c81a4b49a7d48a354b75f62694bc6f9a1ee4
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/331440
Reviewed-by: Victor Boivie <boivie@webrtc.org>
Commit-Queue: Daniel Collins <dpcollins@google.com>
Cr-Commit-Position: refs/heads/main@{#41388}
-rw-r--r-- | net/dcsctp/socket/callback_deferrer.cc | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/net/dcsctp/socket/callback_deferrer.cc b/net/dcsctp/socket/callback_deferrer.cc index e1079f7c96..549a592b8d 100644 --- a/net/dcsctp/socket/callback_deferrer.cc +++ b/net/dcsctp/socket/callback_deferrer.cc @@ -23,10 +23,14 @@ void CallbackDeferrer::TriggerDeferred() { // callback, and that might result in adding new callbacks to this instance, // and the vector can't be modified while iterated on. RTC_DCHECK(prepared_); + prepared_ = false; + if (deferred_.empty()) { + return; + } std::vector<std::pair<Callback, CallbackData>> deferred; + // Reserve a small buffer to prevent too much reallocation on growth. + deferred.reserve(8); deferred.swap(deferred_); - prepared_ = false; - for (auto& [cb, data] : deferred) { cb(std::move(data), underlying_); } |