Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(553)

Side by Side Diff: webrtc/modules/rtp_rtcp/source/receive_statistics_impl.cc

Issue 2131913003: Revert of Refactor NACK bitrate allocation (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
11 #include "webrtc/modules/rtp_rtcp/source/receive_statistics_impl.h" 11 #include "webrtc/modules/rtp_rtcp/source/receive_statistics_impl.h"
12 12
13 #include <math.h> 13 #include <math.h>
14 14
15 #include <cstdlib> 15 #include <cstdlib>
16 16
17 #include "webrtc/modules/rtp_rtcp/source/rtp_rtcp_config.h" 17 #include "webrtc/modules/rtp_rtcp/source/bitrate.h"
18 #include "webrtc/modules/rtp_rtcp/source/time_util.h" 18 #include "webrtc/modules/rtp_rtcp/source/time_util.h"
19 19
20 namespace webrtc { 20 namespace webrtc {
21 21
22 const int64_t kStatisticsTimeoutMs = 8000; 22 const int64_t kStatisticsTimeoutMs = 8000;
23 const int64_t kStatisticsProcessIntervalMs = 1000; 23 const int64_t kStatisticsProcessIntervalMs = 1000;
24 24
25 StreamStatistician::~StreamStatistician() {} 25 StreamStatistician::~StreamStatistician() {}
26 26
27 StreamStatisticianImpl::StreamStatisticianImpl( 27 StreamStatisticianImpl::StreamStatisticianImpl(
28 Clock* clock, 28 Clock* clock,
29 RtcpStatisticsCallback* rtcp_callback, 29 RtcpStatisticsCallback* rtcp_callback,
30 StreamDataCountersCallback* rtp_callback) 30 StreamDataCountersCallback* rtp_callback)
31 : clock_(clock), 31 : clock_(clock),
32 incoming_bitrate_(kStatisticsProcessIntervalMs, 32 incoming_bitrate_(clock, NULL),
33 RateStatistics::kBpsScale),
34 ssrc_(0), 33 ssrc_(0),
35 max_reordering_threshold_(kDefaultMaxReorderingThreshold), 34 max_reordering_threshold_(kDefaultMaxReorderingThreshold),
36 jitter_q4_(0), 35 jitter_q4_(0),
37 cumulative_loss_(0), 36 cumulative_loss_(0),
38 jitter_q4_transmission_time_offset_(0), 37 jitter_q4_transmission_time_offset_(0),
39 last_receive_time_ms_(0), 38 last_receive_time_ms_(0),
40 last_received_timestamp_(0), 39 last_received_timestamp_(0),
41 last_received_transmission_time_offset_(0), 40 last_received_transmission_time_offset_(0),
42 received_seq_first_(0), 41 received_seq_first_(0),
43 received_seq_max_(0), 42 received_seq_max_(0),
(...skipping 11 matching lines...) Expand all
55 UpdateCounters(header, packet_length, retransmitted); 54 UpdateCounters(header, packet_length, retransmitted);
56 NotifyRtpCallback(); 55 NotifyRtpCallback();
57 } 56 }
58 57
59 void StreamStatisticianImpl::UpdateCounters(const RTPHeader& header, 58 void StreamStatisticianImpl::UpdateCounters(const RTPHeader& header,
60 size_t packet_length, 59 size_t packet_length,
61 bool retransmitted) { 60 bool retransmitted) {
62 rtc::CritScope cs(&stream_lock_); 61 rtc::CritScope cs(&stream_lock_);
63 bool in_order = InOrderPacketInternal(header.sequenceNumber); 62 bool in_order = InOrderPacketInternal(header.sequenceNumber);
64 ssrc_ = header.ssrc; 63 ssrc_ = header.ssrc;
65 incoming_bitrate_.Update(packet_length, clock_->TimeInMilliseconds()); 64 incoming_bitrate_.Update(packet_length);
66 receive_counters_.transmitted.AddPacket(packet_length, header); 65 receive_counters_.transmitted.AddPacket(packet_length, header);
67 if (!in_order && retransmitted) { 66 if (!in_order && retransmitted) {
68 receive_counters_.retransmitted.AddPacket(packet_length, header); 67 receive_counters_.retransmitted.AddPacket(packet_length, header);
69 } 68 }
70 69
71 if (receive_counters_.transmitted.packets == 1) { 70 if (receive_counters_.transmitted.packets == 1) {
72 received_seq_first_ = header.sequenceNumber; 71 received_seq_first_ = header.sequenceNumber;
73 receive_counters_.first_packet_time_ms = clock_->TimeInMilliseconds(); 72 receive_counters_.first_packet_time_ms = clock_->TimeInMilliseconds();
74 } 73 }
75 74
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 } 293 }
295 294
296 void StreamStatisticianImpl::GetReceiveStreamDataCounters( 295 void StreamStatisticianImpl::GetReceiveStreamDataCounters(
297 StreamDataCounters* data_counters) const { 296 StreamDataCounters* data_counters) const {
298 rtc::CritScope cs(&stream_lock_); 297 rtc::CritScope cs(&stream_lock_);
299 *data_counters = receive_counters_; 298 *data_counters = receive_counters_;
300 } 299 }
301 300
302 uint32_t StreamStatisticianImpl::BitrateReceived() const { 301 uint32_t StreamStatisticianImpl::BitrateReceived() const {
303 rtc::CritScope cs(&stream_lock_); 302 rtc::CritScope cs(&stream_lock_);
304 return incoming_bitrate_.Rate(clock_->TimeInMilliseconds()).value_or(0); 303 return incoming_bitrate_.BitrateNow();
304 }
305
306 void StreamStatisticianImpl::ProcessBitrate() {
307 rtc::CritScope cs(&stream_lock_);
308 incoming_bitrate_.Process();
305 } 309 }
306 310
307 void StreamStatisticianImpl::LastReceiveTimeNtp(uint32_t* secs, 311 void StreamStatisticianImpl::LastReceiveTimeNtp(uint32_t* secs,
308 uint32_t* frac) const { 312 uint32_t* frac) const {
309 rtc::CritScope cs(&stream_lock_); 313 rtc::CritScope cs(&stream_lock_);
310 *secs = last_receive_time_ntp_.seconds(); 314 *secs = last_receive_time_ntp_.seconds();
311 *frac = last_receive_time_ntp_.fractions(); 315 *frac = last_receive_time_ntp_.fractions();
312 } 316 }
313 317
314 bool StreamStatisticianImpl::IsRetransmitOfOldPacket( 318 bool StreamStatisticianImpl::IsRetransmitOfOldPacket(
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 max_reordering_threshold_); 369 max_reordering_threshold_);
366 } 370 }
367 } 371 }
368 372
369 ReceiveStatistics* ReceiveStatistics::Create(Clock* clock) { 373 ReceiveStatistics* ReceiveStatistics::Create(Clock* clock) {
370 return new ReceiveStatisticsImpl(clock); 374 return new ReceiveStatisticsImpl(clock);
371 } 375 }
372 376
373 ReceiveStatisticsImpl::ReceiveStatisticsImpl(Clock* clock) 377 ReceiveStatisticsImpl::ReceiveStatisticsImpl(Clock* clock)
374 : clock_(clock), 378 : clock_(clock),
379 last_rate_update_ms_(0),
375 rtcp_stats_callback_(NULL), 380 rtcp_stats_callback_(NULL),
376 rtp_stats_callback_(NULL) {} 381 rtp_stats_callback_(NULL) {}
377 382
378 ReceiveStatisticsImpl::~ReceiveStatisticsImpl() { 383 ReceiveStatisticsImpl::~ReceiveStatisticsImpl() {
379 while (!statisticians_.empty()) { 384 while (!statisticians_.empty()) {
380 delete statisticians_.begin()->second; 385 delete statisticians_.begin()->second;
381 statisticians_.erase(statisticians_.begin()); 386 statisticians_.erase(statisticians_.begin());
382 } 387 }
383 } 388 }
384 389
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 445
441 void ReceiveStatisticsImpl::SetMaxReorderingThreshold( 446 void ReceiveStatisticsImpl::SetMaxReorderingThreshold(
442 int max_reordering_threshold) { 447 int max_reordering_threshold) {
443 rtc::CritScope cs(&receive_statistics_lock_); 448 rtc::CritScope cs(&receive_statistics_lock_);
444 for (StatisticianImplMap::iterator it = statisticians_.begin(); 449 for (StatisticianImplMap::iterator it = statisticians_.begin();
445 it != statisticians_.end(); ++it) { 450 it != statisticians_.end(); ++it) {
446 it->second->SetMaxReorderingThreshold(max_reordering_threshold); 451 it->second->SetMaxReorderingThreshold(max_reordering_threshold);
447 } 452 }
448 } 453 }
449 454
455 void ReceiveStatisticsImpl::Process() {
456 rtc::CritScope cs(&receive_statistics_lock_);
457 for (StatisticianImplMap::iterator it = statisticians_.begin();
458 it != statisticians_.end(); ++it) {
459 it->second->ProcessBitrate();
460 }
461 last_rate_update_ms_ = clock_->TimeInMilliseconds();
462 }
463
464 int64_t ReceiveStatisticsImpl::TimeUntilNextProcess() {
465 rtc::CritScope cs(&receive_statistics_lock_);
466 int64_t time_since_last_update = clock_->TimeInMilliseconds() -
467 last_rate_update_ms_;
468 return std::max<int64_t>(
469 kStatisticsProcessIntervalMs - time_since_last_update, 0);
470 }
471
450 void ReceiveStatisticsImpl::RegisterRtcpStatisticsCallback( 472 void ReceiveStatisticsImpl::RegisterRtcpStatisticsCallback(
451 RtcpStatisticsCallback* callback) { 473 RtcpStatisticsCallback* callback) {
452 rtc::CritScope cs(&receive_statistics_lock_); 474 rtc::CritScope cs(&receive_statistics_lock_);
453 if (callback != NULL) 475 if (callback != NULL)
454 assert(rtcp_stats_callback_ == NULL); 476 assert(rtcp_stats_callback_ == NULL);
455 rtcp_stats_callback_ = callback; 477 rtcp_stats_callback_ = callback;
456 } 478 }
457 479
458 void ReceiveStatisticsImpl::StatisticsUpdated(const RtcpStatistics& statistics, 480 void ReceiveStatisticsImpl::StatisticsUpdated(const RtcpStatistics& statistics,
459 uint32_t ssrc) { 481 uint32_t ssrc) {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 } 518 }
497 519
498 StreamStatistician* NullReceiveStatistics::GetStatistician( 520 StreamStatistician* NullReceiveStatistics::GetStatistician(
499 uint32_t ssrc) const { 521 uint32_t ssrc) const {
500 return NULL; 522 return NULL;
501 } 523 }
502 524
503 void NullReceiveStatistics::SetMaxReorderingThreshold( 525 void NullReceiveStatistics::SetMaxReorderingThreshold(
504 int max_reordering_threshold) {} 526 int max_reordering_threshold) {}
505 527
528 int64_t NullReceiveStatistics::TimeUntilNextProcess() { return 0; }
529
530 void NullReceiveStatistics::Process() {}
531
506 void NullReceiveStatistics::RegisterRtcpStatisticsCallback( 532 void NullReceiveStatistics::RegisterRtcpStatisticsCallback(
507 RtcpStatisticsCallback* callback) {} 533 RtcpStatisticsCallback* callback) {}
508 534
509 void NullReceiveStatistics::RegisterRtpStatisticsCallback( 535 void NullReceiveStatistics::RegisterRtpStatisticsCallback(
510 StreamDataCountersCallback* callback) {} 536 StreamDataCountersCallback* callback) {}
511 537
512 } // namespace webrtc 538 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/receive_statistics_impl.h ('k') | webrtc/modules/rtp_rtcp/source/rtp_receiver_video.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698