OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
425 ssrc == rtp_config_.flexfec.flexfec_ssrc; | 425 ssrc == rtp_config_.flexfec.flexfec_ssrc; |
426 bool is_rtx = | 426 bool is_rtx = |
427 std::find(rtp_config_.rtx.ssrcs.begin(), rtp_config_.rtx.ssrcs.end(), | 427 std::find(rtp_config_.rtx.ssrcs.begin(), rtp_config_.rtx.ssrcs.end(), |
428 ssrc) != rtp_config_.rtx.ssrcs.end(); | 428 ssrc) != rtp_config_.rtx.ssrcs.end(); |
429 if (!is_media && !is_flexfec && !is_rtx) | 429 if (!is_media && !is_flexfec && !is_rtx) |
430 return nullptr; | 430 return nullptr; |
431 | 431 |
432 // Insert new entry and return ptr. | 432 // Insert new entry and return ptr. |
433 VideoSendStream::StreamStats* entry = &stats_.substreams[ssrc]; | 433 VideoSendStream::StreamStats* entry = &stats_.substreams[ssrc]; |
434 entry->is_rtx = is_rtx; | 434 entry->is_rtx = is_rtx; |
| 435 entry->is_flexfec = is_flexfec; |
435 | 436 |
436 return entry; | 437 return entry; |
437 } | 438 } |
438 | 439 |
439 void SendStatisticsProxy::OnInactiveSsrc(uint32_t ssrc) { | 440 void SendStatisticsProxy::OnInactiveSsrc(uint32_t ssrc) { |
440 rtc::CritScope lock(&crit_); | 441 rtc::CritScope lock(&crit_); |
441 VideoSendStream::StreamStats* stats = GetStatsEntry(ssrc); | 442 VideoSendStream::StreamStats* stats = GetStatsEntry(ssrc); |
442 if (!stats) | 443 if (!stats) |
443 return; | 444 return; |
444 | 445 |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
610 void SendStatisticsProxy::CNameChanged(const char* cname, uint32_t ssrc) {} | 611 void SendStatisticsProxy::CNameChanged(const char* cname, uint32_t ssrc) {} |
611 | 612 |
612 void SendStatisticsProxy::DataCountersUpdated( | 613 void SendStatisticsProxy::DataCountersUpdated( |
613 const StreamDataCounters& counters, | 614 const StreamDataCounters& counters, |
614 uint32_t ssrc) { | 615 uint32_t ssrc) { |
615 rtc::CritScope lock(&crit_); | 616 rtc::CritScope lock(&crit_); |
616 VideoSendStream::StreamStats* stats = GetStatsEntry(ssrc); | 617 VideoSendStream::StreamStats* stats = GetStatsEntry(ssrc); |
617 RTC_DCHECK(stats) << "DataCountersUpdated reported for unknown ssrc: " | 618 RTC_DCHECK(stats) << "DataCountersUpdated reported for unknown ssrc: " |
618 << ssrc; | 619 << ssrc; |
619 | 620 |
| 621 if (stats->is_flexfec) { |
| 622 // The same counters are reported for both the media ssrc and flexfec ssrc. |
| 623 // Bitrate stats are summed for all SSRCs. Use fec stats from media update. |
| 624 return; |
| 625 } |
| 626 |
620 stats->rtp_stats = counters; | 627 stats->rtp_stats = counters; |
621 if (uma_container_->first_rtp_stats_time_ms_ == -1) | 628 if (uma_container_->first_rtp_stats_time_ms_ == -1) |
622 uma_container_->first_rtp_stats_time_ms_ = clock_->TimeInMilliseconds(); | 629 uma_container_->first_rtp_stats_time_ms_ = clock_->TimeInMilliseconds(); |
623 } | 630 } |
624 | 631 |
625 void SendStatisticsProxy::Notify(uint32_t total_bitrate_bps, | 632 void SendStatisticsProxy::Notify(uint32_t total_bitrate_bps, |
626 uint32_t retransmit_bitrate_bps, | 633 uint32_t retransmit_bitrate_bps, |
627 uint32_t ssrc) { | 634 uint32_t ssrc) { |
628 rtc::CritScope lock(&crit_); | 635 rtc::CritScope lock(&crit_); |
629 VideoSendStream::StreamStats* stats = GetStatsEntry(ssrc); | 636 VideoSendStream::StreamStats* stats = GetStatsEntry(ssrc); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
685 return Fraction(min_required_samples, 1000.0f); | 692 return Fraction(min_required_samples, 1000.0f); |
686 } | 693 } |
687 | 694 |
688 int SendStatisticsProxy::BoolSampleCounter::Fraction( | 695 int SendStatisticsProxy::BoolSampleCounter::Fraction( |
689 int min_required_samples, float multiplier) const { | 696 int min_required_samples, float multiplier) const { |
690 if (num_samples < min_required_samples || num_samples == 0) | 697 if (num_samples < min_required_samples || num_samples == 0) |
691 return -1; | 698 return -1; |
692 return static_cast<int>((sum * multiplier / num_samples) + 0.5f); | 699 return static_cast<int>((sum * multiplier / num_samples) + 0.5f); |
693 } | 700 } |
694 } // namespace webrtc | 701 } // namespace webrtc |
OLD | NEW |