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}
diff --git a/net/dcsctp/socket/callback_deferrer.cc b/net/dcsctp/socket/callback_deferrer.cc
index e1079f7..549a592 100644
--- a/net/dcsctp/socket/callback_deferrer.cc
+++ b/net/dcsctp/socket/callback_deferrer.cc
@@ -23,10 +23,14 @@
   // 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<std::pair<Callback, CallbackData>> deferred;
-  deferred.swap(deferred_);
   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_);
   for (auto& [cb, data] : deferred) {
     cb(std::move(data), underlying_);
   }