Use flat_map in RTCPReceiver

RTCPReceiver initially used a std::map, which made
RTCPReceiver::IncomingPacket's use of std::map represent ~0.45% CPU in
highly loaded media servers. Using std::unordered_map in change 216321
reduced it only slightly, to 0.39%.

This is the second attempt to reduce it even further. By using a
flat_map and taking advantage of the increased cache locality, the hope
is that it will be reduced. These maps generally have low cardinality
(indexed by SSRC), and are looked up often, but modified less often,
which make them a potential candidate for flat_map.

Bug: webrtc:12689
Change-Id: I6733ccf3484d1c54e661250fb6712971b80fa2a9
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/225203
Commit-Queue: Victor Boivie <boivie@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34432}
This commit is contained in:
Victor Boivie
2021-07-06 23:14:51 +02:00
committed by WebRTC LUCI CQ
parent 5900ba0ee8
commit f715618eee
3 changed files with 10 additions and 20 deletions

View File

@ -809,14 +809,9 @@ void RTCPReceiver::HandleBye(const CommonHeader& rtcp_block) {
// Clear our lists.
rtts_.erase(bye.sender_ssrc());
for (auto it = received_report_blocks_.begin();
it != received_report_blocks_.end();) {
if (it->second.report_block().sender_ssrc == bye.sender_ssrc()) {
received_report_blocks_.erase(it++);
} else {
++it;
}
}
EraseIf(received_report_blocks_, [&](const auto& elem) {
return elem.second.report_block().sender_ssrc == bye.sender_ssrc();
});
TmmbrInformation* tmmbr_info = GetTmmbrInformation(bye.sender_ssrc());
if (tmmbr_info)