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

Side by Side Diff: webrtc/call/call.cc

Issue 2307913002: Update AvgCounter to have the ability to include last period metric for subsequent intervals withou… (Closed)
Patch Set: address comments Created 4 years, 3 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
« no previous file with comments | « no previous file | webrtc/video/send_delay_stats.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 // synchronization. 179 // synchronization.
180 int64_t first_packet_sent_ms_; 180 int64_t first_packet_sent_ms_;
181 RateCounter received_bytes_per_second_counter_; 181 RateCounter received_bytes_per_second_counter_;
182 RateCounter received_audio_bytes_per_second_counter_; 182 RateCounter received_audio_bytes_per_second_counter_;
183 RateCounter received_video_bytes_per_second_counter_; 183 RateCounter received_video_bytes_per_second_counter_;
184 RateCounter received_rtcp_bytes_per_second_counter_; 184 RateCounter received_rtcp_bytes_per_second_counter_;
185 185
186 // TODO(holmer): Remove this lock once BitrateController no longer calls 186 // TODO(holmer): Remove this lock once BitrateController no longer calls
187 // OnNetworkChanged from multiple threads. 187 // OnNetworkChanged from multiple threads.
188 rtc::CriticalSection bitrate_crit_; 188 rtc::CriticalSection bitrate_crit_;
189 int64_t estimated_send_bitrate_sum_kbits_ GUARDED_BY(&bitrate_crit_);
190 int64_t pacer_bitrate_sum_kbits_ GUARDED_BY(&bitrate_crit_);
191 uint32_t min_allocated_send_bitrate_bps_ GUARDED_BY(&bitrate_crit_); 189 uint32_t min_allocated_send_bitrate_bps_ GUARDED_BY(&bitrate_crit_);
192 int64_t num_bitrate_updates_ GUARDED_BY(&bitrate_crit_);
193 uint32_t configured_max_padding_bitrate_bps_ GUARDED_BY(&bitrate_crit_); 190 uint32_t configured_max_padding_bitrate_bps_ GUARDED_BY(&bitrate_crit_);
191 AvgCounter estimated_send_bitrate_kbps_counter_ GUARDED_BY(&bitrate_crit_);
192 AvgCounter pacer_bitrate_kbps_counter_ GUARDED_BY(&bitrate_crit_);
194 193
195 std::map<std::string, rtc::NetworkRoute> network_routes_; 194 std::map<std::string, rtc::NetworkRoute> network_routes_;
196 195
197 VieRemb remb_; 196 VieRemb remb_;
198 const std::unique_ptr<CongestionController> congestion_controller_; 197 const std::unique_ptr<CongestionController> congestion_controller_;
199 const std::unique_ptr<SendDelayStats> video_send_delay_stats_; 198 const std::unique_ptr<SendDelayStats> video_send_delay_stats_;
200 const int64_t start_ms_; 199 const int64_t start_ms_;
201 // TODO(perkj): |worker_queue_| is supposed to replace 200 // TODO(perkj): |worker_queue_| is supposed to replace
202 // |module_process_thread_|. 201 // |module_process_thread_|.
203 // |worker_queue| is defined last to ensure all pending tasks are cancelled 202 // |worker_queue| is defined last to ensure all pending tasks are cancelled
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 audio_network_state_(kNetworkUp), 236 audio_network_state_(kNetworkUp),
238 video_network_state_(kNetworkUp), 237 video_network_state_(kNetworkUp),
239 receive_crit_(RWLockWrapper::CreateRWLock()), 238 receive_crit_(RWLockWrapper::CreateRWLock()),
240 send_crit_(RWLockWrapper::CreateRWLock()), 239 send_crit_(RWLockWrapper::CreateRWLock()),
241 event_log_(RtcEventLog::Create(webrtc::Clock::GetRealTimeClock())), 240 event_log_(RtcEventLog::Create(webrtc::Clock::GetRealTimeClock())),
242 first_packet_sent_ms_(-1), 241 first_packet_sent_ms_(-1),
243 received_bytes_per_second_counter_(clock_, nullptr, true), 242 received_bytes_per_second_counter_(clock_, nullptr, true),
244 received_audio_bytes_per_second_counter_(clock_, nullptr, true), 243 received_audio_bytes_per_second_counter_(clock_, nullptr, true),
245 received_video_bytes_per_second_counter_(clock_, nullptr, true), 244 received_video_bytes_per_second_counter_(clock_, nullptr, true),
246 received_rtcp_bytes_per_second_counter_(clock_, nullptr, true), 245 received_rtcp_bytes_per_second_counter_(clock_, nullptr, true),
247 estimated_send_bitrate_sum_kbits_(0),
248 pacer_bitrate_sum_kbits_(0),
249 min_allocated_send_bitrate_bps_(0), 246 min_allocated_send_bitrate_bps_(0),
250 num_bitrate_updates_(0),
251 configured_max_padding_bitrate_bps_(0), 247 configured_max_padding_bitrate_bps_(0),
248 estimated_send_bitrate_kbps_counter_(clock_, nullptr, true),
249 pacer_bitrate_kbps_counter_(clock_, nullptr, true),
252 remb_(clock_), 250 remb_(clock_),
253 congestion_controller_( 251 congestion_controller_(
254 new CongestionController(clock_, this, &remb_, event_log_.get())), 252 new CongestionController(clock_, this, &remb_, event_log_.get())),
255 video_send_delay_stats_(new SendDelayStats(clock_)), 253 video_send_delay_stats_(new SendDelayStats(clock_)),
256 start_ms_(clock_->TimeInMilliseconds()), 254 start_ms_(clock_->TimeInMilliseconds()),
257 worker_queue_("call_worker_queue") { 255 worker_queue_("call_worker_queue") {
258 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); 256 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
259 RTC_DCHECK_GE(config.bitrate_config.min_bitrate_bps, 0); 257 RTC_DCHECK_GE(config.bitrate_config.min_bitrate_bps, 0);
260 RTC_DCHECK_GE(config.bitrate_config.start_bitrate_bps, 258 RTC_DCHECK_GE(config.bitrate_config.start_bitrate_bps,
261 config.bitrate_config.min_bitrate_bps); 259 config.bitrate_config.min_bitrate_bps);
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 Trace::ReturnTrace(); 311 Trace::ReturnTrace();
314 } 312 }
315 313
316 void Call::UpdateHistograms() { 314 void Call::UpdateHistograms() {
317 RTC_LOGGED_HISTOGRAM_COUNTS_100000( 315 RTC_LOGGED_HISTOGRAM_COUNTS_100000(
318 "WebRTC.Call.LifetimeInSeconds", 316 "WebRTC.Call.LifetimeInSeconds",
319 (clock_->TimeInMilliseconds() - start_ms_) / 1000); 317 (clock_->TimeInMilliseconds() - start_ms_) / 1000);
320 } 318 }
321 319
322 void Call::UpdateSendHistograms() { 320 void Call::UpdateSendHistograms() {
323 if (num_bitrate_updates_ == 0 || first_packet_sent_ms_ == -1) 321 if (first_packet_sent_ms_ == -1)
324 return; 322 return;
325 int64_t elapsed_sec = 323 int64_t elapsed_sec =
326 (clock_->TimeInMilliseconds() - first_packet_sent_ms_) / 1000; 324 (clock_->TimeInMilliseconds() - first_packet_sent_ms_) / 1000;
327 if (elapsed_sec < metrics::kMinRunTimeInSeconds) 325 if (elapsed_sec < metrics::kMinRunTimeInSeconds)
328 return; 326 return;
329 int send_bitrate_kbps = 327 const int kMinRequiredPeriodicSamples = 5;
330 estimated_send_bitrate_sum_kbits_ / num_bitrate_updates_; 328 AggregatedStats send_bitrate_stats =
331 int pacer_bitrate_kbps = pacer_bitrate_sum_kbits_ / num_bitrate_updates_; 329 estimated_send_bitrate_kbps_counter_.ProcessAndGetStats();
332 if (send_bitrate_kbps > 0) { 330 if (send_bitrate_stats.num_samples > kMinRequiredPeriodicSamples) {
333 RTC_LOGGED_HISTOGRAM_COUNTS_100000("WebRTC.Call.EstimatedSendBitrateInKbps", 331 RTC_LOGGED_HISTOGRAM_COUNTS_100000("WebRTC.Call.EstimatedSendBitrateInKbps",
334 send_bitrate_kbps); 332 send_bitrate_stats.average);
335 } 333 }
336 if (pacer_bitrate_kbps > 0) { 334 AggregatedStats pacer_bitrate_stats =
335 pacer_bitrate_kbps_counter_.ProcessAndGetStats();
336 if (pacer_bitrate_stats.num_samples > kMinRequiredPeriodicSamples) {
337 RTC_LOGGED_HISTOGRAM_COUNTS_100000("WebRTC.Call.PacerBitrateInKbps", 337 RTC_LOGGED_HISTOGRAM_COUNTS_100000("WebRTC.Call.PacerBitrateInKbps",
338 pacer_bitrate_kbps); 338 pacer_bitrate_stats.average);
339 } 339 }
340 } 340 }
341 341
342 void Call::UpdateReceiveHistograms() { 342 void Call::UpdateReceiveHistograms() {
343 const int kMinRequiredPeriodicSamples = 5; 343 const int kMinRequiredPeriodicSamples = 5;
344 AggregatedStats video_bytes_per_sec = 344 AggregatedStats video_bytes_per_sec =
345 received_video_bytes_per_second_counter_.GetStats(); 345 received_video_bytes_per_second_counter_.GetStats();
346 if (video_bytes_per_sec.num_samples > kMinRequiredPeriodicSamples) { 346 if (video_bytes_per_sec.num_samples > kMinRequiredPeriodicSamples) {
347 RTC_LOGGED_HISTOGRAM_COUNTS_100000("WebRTC.Call.VideoBitrateReceivedInKbps", 347 RTC_LOGGED_HISTOGRAM_COUNTS_100000("WebRTC.Call.VideoBitrateReceivedInKbps",
348 video_bytes_per_sec.average * 8 / 1000); 348 video_bytes_per_sec.average * 8 / 1000);
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after
750 if (!worker_queue_.IsCurrent()) { 750 if (!worker_queue_.IsCurrent()) {
751 worker_queue_.PostTask([this, target_bitrate_bps, fraction_loss, rtt_ms] { 751 worker_queue_.PostTask([this, target_bitrate_bps, fraction_loss, rtt_ms] {
752 OnNetworkChanged(target_bitrate_bps, fraction_loss, rtt_ms); 752 OnNetworkChanged(target_bitrate_bps, fraction_loss, rtt_ms);
753 }); 753 });
754 return; 754 return;
755 } 755 }
756 RTC_DCHECK_RUN_ON(&worker_queue_); 756 RTC_DCHECK_RUN_ON(&worker_queue_);
757 bitrate_allocator_->OnNetworkChanged(target_bitrate_bps, fraction_loss, 757 bitrate_allocator_->OnNetworkChanged(target_bitrate_bps, fraction_loss,
758 rtt_ms); 758 rtt_ms);
759 759
760 // Ignore updates where the bitrate is zero because the aggregate network 760 // Ignore updates if bitrate is zero (the aggregate network state is down).
761 // state is down. 761 if (target_bitrate_bps == 0) {
762 if (target_bitrate_bps > 0) {
763 {
764 ReadLockScoped read_lock(*send_crit_);
765 // Do not update the stats if we are not sending video.
766 if (video_send_streams_.empty())
767 return;
768 }
769 rtc::CritScope lock(&bitrate_crit_); 762 rtc::CritScope lock(&bitrate_crit_);
perkj_webrtc 2016/09/10 07:12:54 is this lock still needed?
770 // We only update these stats if we have send streams, and assume that 763 estimated_send_bitrate_kbps_counter_.ProcessAndPause();
771 // OnNetworkChanged is called roughly with a fixed frequency. 764 pacer_bitrate_kbps_counter_.ProcessAndPause();
772 estimated_send_bitrate_sum_kbits_ += target_bitrate_bps / 1000; 765 return;
773 // Pacer bitrate might be higher than bitrate estimate if enforcing min
774 // bitrate.
775 uint32_t pacer_bitrate_bps =
776 std::max(target_bitrate_bps, min_allocated_send_bitrate_bps_);
777 pacer_bitrate_sum_kbits_ += pacer_bitrate_bps / 1000;
778 ++num_bitrate_updates_;
779 } 766 }
767
768 bool sending_video;
perkj_webrtc 2016/09/10 07:12:54 dito- lock needed?
769 {
770 ReadLockScoped read_lock(*send_crit_);
771 sending_video = !video_send_streams_.empty();
772 }
773
774 rtc::CritScope lock(&bitrate_crit_);
perkj_webrtc 2016/09/10 07:12:54 and this?
775 if (!sending_video) {
776 // Do not update the stats if we are not sending video.
777 estimated_send_bitrate_kbps_counter_.ProcessAndPause();
778 pacer_bitrate_kbps_counter_.ProcessAndPause();
779 return;
780 }
781 estimated_send_bitrate_kbps_counter_.Add(target_bitrate_bps / 1000);
782 // Pacer bitrate may be higher than bitrate estimate if enforcing min bitrate.
783 uint32_t pacer_bitrate_bps =
784 std::max(target_bitrate_bps, min_allocated_send_bitrate_bps_);
785 pacer_bitrate_kbps_counter_.Add(pacer_bitrate_bps / 1000);
780 } 786 }
781 787
782 void Call::OnAllocationLimitsChanged(uint32_t min_send_bitrate_bps, 788 void Call::OnAllocationLimitsChanged(uint32_t min_send_bitrate_bps,
783 uint32_t max_padding_bitrate_bps) { 789 uint32_t max_padding_bitrate_bps) {
784 congestion_controller_->SetAllocatedSendBitrateLimits( 790 congestion_controller_->SetAllocatedSendBitrateLimits(
785 min_send_bitrate_bps, max_padding_bitrate_bps); 791 min_send_bitrate_bps, max_padding_bitrate_bps);
786 rtc::CritScope lock(&bitrate_crit_); 792 rtc::CritScope lock(&bitrate_crit_);
787 min_allocated_send_bitrate_bps_ = min_send_bitrate_bps; 793 min_allocated_send_bitrate_bps_ = min_send_bitrate_bps;
788 configured_max_padding_bitrate_bps_ = max_padding_bitrate_bps; 794 configured_max_padding_bitrate_bps_ = max_padding_bitrate_bps;
789 } 795 }
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
934 // thread. Then this check can be enabled. 940 // thread. Then this check can be enabled.
935 // RTC_DCHECK(!configuration_thread_checker_.CalledOnValidThread()); 941 // RTC_DCHECK(!configuration_thread_checker_.CalledOnValidThread());
936 if (RtpHeaderParser::IsRtcp(packet, length)) 942 if (RtpHeaderParser::IsRtcp(packet, length))
937 return DeliverRtcp(media_type, packet, length); 943 return DeliverRtcp(media_type, packet, length);
938 944
939 return DeliverRtp(media_type, packet, length, packet_time); 945 return DeliverRtp(media_type, packet, length, packet_time);
940 } 946 }
941 947
942 } // namespace internal 948 } // namespace internal
943 } // namespace webrtc 949 } // namespace webrtc
OLDNEW
« no previous file with comments | « no previous file | webrtc/video/send_delay_stats.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698