Simplify ReceiveStatistics: merge GetActiveStatisticians into RtcpReportBlocks
BUG=webrtc:8016
Change-Id: Ie38a86b730298039915baaac12b7fd97a5440345
Reviewed-on: https://webrtc-review.googlesource.com/1842
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#19891}
diff --git a/modules/rtp_rtcp/source/receive_statistics_impl.cc b/modules/rtp_rtcp/source/receive_statistics_impl.cc
index f1db547..7f3d5bb 100644
--- a/modules/rtp_rtcp/source/receive_statistics_impl.cc
+++ b/modules/rtp_rtcp/source/receive_statistics_impl.cc
@@ -197,6 +197,28 @@
return true;
}
+bool StreamStatisticianImpl::GetActiveStatisticsAndReset(
+ RtcpStatistics* statistics) {
+ {
+ rtc::CritScope cs(&stream_lock_);
+ if (clock_->CurrentNtpInMilliseconds() - last_receive_time_ntp_.ToMs() >=
+ kStatisticsTimeoutMs) {
+ // Not active.
+ return false;
+ }
+ if (received_seq_first_ == 0 &&
+ receive_counters_.transmitted.payload_bytes == 0) {
+ // We have not received anything.
+ return false;
+ }
+
+ *statistics = CalculateRtcpStatistics();
+ }
+
+ rtcp_callback_->StatisticsUpdated(*statistics, ssrc_);
+ return true;
+}
+
RtcpStatistics StreamStatisticianImpl::CalculateRtcpStatistics() {
RtcpStatistics stats;
@@ -296,13 +318,6 @@
return incoming_bitrate_.Rate(clock_->TimeInMilliseconds()).value_or(0);
}
-void StreamStatisticianImpl::LastReceiveTimeNtp(uint32_t* secs,
- uint32_t* frac) const {
- rtc::CritScope cs(&stream_lock_);
- *secs = last_receive_time_ntp_.seconds();
- *frac = last_receive_time_ntp_.fractions();
-}
-
bool StreamStatisticianImpl::IsRetransmitOfOldPacket(
const RTPHeader& header, int64_t min_rtt) const {
rtc::CritScope cs(&stream_lock_);
@@ -380,7 +395,7 @@
StreamStatisticianImpl* impl;
{
rtc::CritScope cs(&receive_statistics_lock_);
- StatisticianImplMap::iterator it = statisticians_.find(header.ssrc);
+ auto it = statisticians_.find(header.ssrc);
if (it != statisticians_.end()) {
impl = it->second;
} else {
@@ -400,7 +415,7 @@
StreamStatisticianImpl* impl;
{
rtc::CritScope cs(&receive_statistics_lock_);
- StatisticianImplMap::iterator it = statisticians_.find(header.ssrc);
+ auto it = statisticians_.find(header.ssrc);
// Ignore FEC if it is the first packet.
if (it == statisticians_.end())
return;
@@ -409,26 +424,10 @@
impl->FecPacketReceived(header, packet_length);
}
-StatisticianMap ReceiveStatisticsImpl::GetActiveStatisticians() const {
- StatisticianMap active_statisticians;
- rtc::CritScope cs(&receive_statistics_lock_);
- for (StatisticianImplMap::const_iterator it = statisticians_.begin();
- it != statisticians_.end(); ++it) {
- uint32_t secs;
- uint32_t frac;
- it->second->LastReceiveTimeNtp(&secs, &frac);
- if (clock_->CurrentNtpInMilliseconds() -
- Clock::NtpToMs(secs, frac) < kStatisticsTimeoutMs) {
- active_statisticians[it->first] = it->second;
- }
- }
- return active_statisticians;
-}
-
StreamStatistician* ReceiveStatisticsImpl::GetStatistician(
uint32_t ssrc) const {
rtc::CritScope cs(&receive_statistics_lock_);
- StatisticianImplMap::const_iterator it = statisticians_.find(ssrc);
+ auto it = statisticians_.find(ssrc);
if (it == statisticians_.end())
return NULL;
return it->second;
@@ -437,9 +436,8 @@
void ReceiveStatisticsImpl::SetMaxReorderingThreshold(
int max_reordering_threshold) {
rtc::CritScope cs(&receive_statistics_lock_);
- for (StatisticianImplMap::iterator it = statisticians_.begin();
- it != statisticians_.end(); ++it) {
- it->second->SetMaxReorderingThreshold(max_reordering_threshold);
+ for (auto& statistician : statisticians_) {
+ statistician.second->SetMaxReorderingThreshold(max_reordering_threshold);
}
}
@@ -482,7 +480,11 @@
std::vector<rtcp::ReportBlock> ReceiveStatisticsImpl::RtcpReportBlocks(
size_t max_blocks) {
- StatisticianMap statisticians = GetActiveStatisticians();
+ std::map<uint32_t, StreamStatisticianImpl*> statisticians;
+ {
+ rtc::CritScope cs(&receive_statistics_lock_);
+ statisticians = statisticians_;
+ }
std::vector<rtcp::ReportBlock> result;
result.reserve(std::min(max_blocks, statisticians.size()));
for (auto& statistician : statisticians) {
@@ -494,7 +496,7 @@
// Do we have receive statistics to send?
RtcpStatistics stats;
- if (!statistician.second->GetStatistics(&stats, true))
+ if (!statistician.second->GetActiveStatisticsAndReset(&stats))
continue;
result.emplace_back();
rtcp::ReportBlock& block = result.back();