From d093d0db7f64c76b71997447ccb432216cf73582 Mon Sep 17 00:00:00 2001 From: Daniel Collins Date: Thu, 14 Dec 2023 14:14:13 -0500 Subject: [PATCH] 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 Commit-Queue: Daniel Collins Cr-Commit-Position: refs/heads/main@{#41388} --- net/dcsctp/socket/callback_deferrer.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 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_); - std::vector> deferred; - deferred.swap(deferred_); prepared_ = false; - + if (deferred_.empty()) { + return; + } + std::vector> deferred; + // Reserve a small buffer to prevent too much reallocation on growth. + deferred.reserve(8); + deferred.swap(deferred_); for (auto& [cb, data] : deferred) { cb(std::move(data), underlying_); }