aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Collins <dpcollins@google.com>2023-12-14 14:14:13 -0500
committerWebRTC LUCI CQ <webrtc-scoped@luci-project-accounts.iam.gserviceaccount.com>2023-12-14 21:08:58 +0000
commitd093d0db7f64c76b71997447ccb432216cf73582 (patch)
treed880dfdaf8b26b6da6d20f0a26afc58150ad3469
parent3ba809d6a6bc20931adde485bb04586a6556db11 (diff)
downloadwebrtc-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.cc8
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_);
}