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

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

Issue 1478253002: Add histogram stats for send delay for a sent video stream. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: rebase Created 4 years, 7 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/call/rtc_event_log_unittest.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 22 matching lines...) Expand all
33 #include "webrtc/modules/pacing/paced_sender.h" 33 #include "webrtc/modules/pacing/paced_sender.h"
34 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h" 34 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h"
35 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" 35 #include "webrtc/modules/rtp_rtcp/source/byte_io.h"
36 #include "webrtc/modules/utility/include/process_thread.h" 36 #include "webrtc/modules/utility/include/process_thread.h"
37 #include "webrtc/system_wrappers/include/cpu_info.h" 37 #include "webrtc/system_wrappers/include/cpu_info.h"
38 #include "webrtc/system_wrappers/include/critical_section_wrapper.h" 38 #include "webrtc/system_wrappers/include/critical_section_wrapper.h"
39 #include "webrtc/system_wrappers/include/metrics.h" 39 #include "webrtc/system_wrappers/include/metrics.h"
40 #include "webrtc/system_wrappers/include/rw_lock_wrapper.h" 40 #include "webrtc/system_wrappers/include/rw_lock_wrapper.h"
41 #include "webrtc/system_wrappers/include/trace.h" 41 #include "webrtc/system_wrappers/include/trace.h"
42 #include "webrtc/video/call_stats.h" 42 #include "webrtc/video/call_stats.h"
43 #include "webrtc/video/send_delay_stats.h"
43 #include "webrtc/video/video_receive_stream.h" 44 #include "webrtc/video/video_receive_stream.h"
44 #include "webrtc/video/video_send_stream.h" 45 #include "webrtc/video/video_send_stream.h"
45 #include "webrtc/video/vie_remb.h" 46 #include "webrtc/video/vie_remb.h"
46 #include "webrtc/voice_engine/include/voe_codec.h" 47 #include "webrtc/voice_engine/include/voe_codec.h"
47 48
48 namespace webrtc { 49 namespace webrtc {
49 50
50 const int Call::Config::kDefaultStartBitrateBps = 300000; 51 const int Call::Config::kDefaultStartBitrateBps = 300000;
51 52
52 namespace internal { 53 namespace internal {
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 // OnNetworkChanged from multiple threads. 171 // OnNetworkChanged from multiple threads.
171 rtc::CriticalSection bitrate_crit_; 172 rtc::CriticalSection bitrate_crit_;
172 int64_t estimated_send_bitrate_sum_kbits_ GUARDED_BY(&bitrate_crit_); 173 int64_t estimated_send_bitrate_sum_kbits_ GUARDED_BY(&bitrate_crit_);
173 int64_t pacer_bitrate_sum_kbits_ GUARDED_BY(&bitrate_crit_); 174 int64_t pacer_bitrate_sum_kbits_ GUARDED_BY(&bitrate_crit_);
174 int64_t num_bitrate_updates_ GUARDED_BY(&bitrate_crit_); 175 int64_t num_bitrate_updates_ GUARDED_BY(&bitrate_crit_);
175 176
176 std::map<std::string, rtc::NetworkRoute> network_routes_; 177 std::map<std::string, rtc::NetworkRoute> network_routes_;
177 178
178 VieRemb remb_; 179 VieRemb remb_;
179 const std::unique_ptr<CongestionController> congestion_controller_; 180 const std::unique_ptr<CongestionController> congestion_controller_;
181 const std::unique_ptr<SendDelayStats> video_send_delay_stats_;
180 182
181 RTC_DISALLOW_COPY_AND_ASSIGN(Call); 183 RTC_DISALLOW_COPY_AND_ASSIGN(Call);
182 }; 184 };
183 } // namespace internal 185 } // namespace internal
184 186
185 Call* Call::Create(const Call::Config& config) { 187 Call* Call::Create(const Call::Config& config) {
186 return new internal::Call(config); 188 return new internal::Call(config);
187 } 189 }
188 190
189 namespace internal { 191 namespace internal {
(...skipping 13 matching lines...) Expand all
203 received_video_bytes_(0), 205 received_video_bytes_(0),
204 received_audio_bytes_(0), 206 received_audio_bytes_(0),
205 received_rtcp_bytes_(0), 207 received_rtcp_bytes_(0),
206 first_rtp_packet_received_ms_(-1), 208 first_rtp_packet_received_ms_(-1),
207 last_rtp_packet_received_ms_(-1), 209 last_rtp_packet_received_ms_(-1),
208 first_packet_sent_ms_(-1), 210 first_packet_sent_ms_(-1),
209 estimated_send_bitrate_sum_kbits_(0), 211 estimated_send_bitrate_sum_kbits_(0),
210 pacer_bitrate_sum_kbits_(0), 212 pacer_bitrate_sum_kbits_(0),
211 num_bitrate_updates_(0), 213 num_bitrate_updates_(0),
212 remb_(clock_), 214 remb_(clock_),
213 congestion_controller_(new CongestionController(clock_, this, &remb_)) { 215 congestion_controller_(new CongestionController(clock_, this, &remb_)),
216 video_send_delay_stats_(new SendDelayStats(clock_)) {
214 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); 217 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
215 RTC_DCHECK_GE(config.bitrate_config.min_bitrate_bps, 0); 218 RTC_DCHECK_GE(config.bitrate_config.min_bitrate_bps, 0);
216 RTC_DCHECK_GE(config.bitrate_config.start_bitrate_bps, 219 RTC_DCHECK_GE(config.bitrate_config.start_bitrate_bps,
217 config.bitrate_config.min_bitrate_bps); 220 config.bitrate_config.min_bitrate_bps);
218 if (config.bitrate_config.max_bitrate_bps != -1) { 221 if (config.bitrate_config.max_bitrate_bps != -1) {
219 RTC_DCHECK_GE(config.bitrate_config.max_bitrate_bps, 222 RTC_DCHECK_GE(config.bitrate_config.max_bitrate_bps,
220 config.bitrate_config.start_bitrate_bps); 223 config.bitrate_config.start_bitrate_bps);
221 } 224 }
222 if (config.audio_state.get()) { 225 if (config.audio_state.get()) {
223 ScopedVoEInterface<VoECodec> voe_codec(voice_engine()); 226 ScopedVoEInterface<VoECodec> voe_codec(voice_engine());
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 UpdateAggregateNetworkState(); 399 UpdateAggregateNetworkState();
397 delete audio_receive_stream; 400 delete audio_receive_stream;
398 } 401 }
399 402
400 webrtc::VideoSendStream* Call::CreateVideoSendStream( 403 webrtc::VideoSendStream* Call::CreateVideoSendStream(
401 const webrtc::VideoSendStream::Config& config, 404 const webrtc::VideoSendStream::Config& config,
402 const VideoEncoderConfig& encoder_config) { 405 const VideoEncoderConfig& encoder_config) {
403 TRACE_EVENT0("webrtc", "Call::CreateVideoSendStream"); 406 TRACE_EVENT0("webrtc", "Call::CreateVideoSendStream");
404 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); 407 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
405 408
409 video_send_delay_stats_->AddSsrcs(config);
406 // TODO(mflodman): Base the start bitrate on a current bandwidth estimate, if 410 // TODO(mflodman): Base the start bitrate on a current bandwidth estimate, if
407 // the call has already started. 411 // the call has already started.
408 VideoSendStream* send_stream = new VideoSendStream( 412 VideoSendStream* send_stream = new VideoSendStream(
409 num_cpu_cores_, module_process_thread_.get(), call_stats_.get(), 413 num_cpu_cores_, module_process_thread_.get(), call_stats_.get(),
410 congestion_controller_.get(), bitrate_allocator_.get(), &remb_, config, 414 congestion_controller_.get(), bitrate_allocator_.get(),
411 encoder_config, suspended_video_send_ssrcs_); 415 video_send_delay_stats_.get(), &remb_, config, encoder_config,
416 suspended_video_send_ssrcs_);
412 { 417 {
413 WriteLockScoped write_lock(*send_crit_); 418 WriteLockScoped write_lock(*send_crit_);
414 for (uint32_t ssrc : config.rtp.ssrcs) { 419 for (uint32_t ssrc : config.rtp.ssrcs) {
415 RTC_DCHECK(video_send_ssrcs_.find(ssrc) == video_send_ssrcs_.end()); 420 RTC_DCHECK(video_send_ssrcs_.find(ssrc) == video_send_ssrcs_.end());
416 video_send_ssrcs_[ssrc] = send_stream; 421 video_send_ssrcs_[ssrc] = send_stream;
417 } 422 }
418 video_send_streams_.insert(send_stream); 423 video_send_streams_.insert(send_stream);
419 } 424 }
420 send_stream->SignalNetworkState(video_network_state_); 425 send_stream->SignalNetworkState(video_network_state_);
421 UpdateAggregateNetworkState(); 426 UpdateAggregateNetworkState();
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
654 659
655 LOG(LS_INFO) << "UpdateAggregateNetworkState: aggregate_state=" 660 LOG(LS_INFO) << "UpdateAggregateNetworkState: aggregate_state="
656 << (aggregate_state == kNetworkUp ? "up" : "down"); 661 << (aggregate_state == kNetworkUp ? "up" : "down");
657 662
658 congestion_controller_->SignalNetworkState(aggregate_state); 663 congestion_controller_->SignalNetworkState(aggregate_state);
659 } 664 }
660 665
661 void Call::OnSentPacket(const rtc::SentPacket& sent_packet) { 666 void Call::OnSentPacket(const rtc::SentPacket& sent_packet) {
662 if (first_packet_sent_ms_ == -1) 667 if (first_packet_sent_ms_ == -1)
663 first_packet_sent_ms_ = clock_->TimeInMilliseconds(); 668 first_packet_sent_ms_ = clock_->TimeInMilliseconds();
669 video_send_delay_stats_->OnSentPacket(sent_packet.packet_id,
670 clock_->TimeInMilliseconds());
664 congestion_controller_->OnSentPacket(sent_packet); 671 congestion_controller_->OnSentPacket(sent_packet);
665 } 672 }
666 673
667 void Call::OnNetworkChanged(uint32_t target_bitrate_bps, uint8_t fraction_loss, 674 void Call::OnNetworkChanged(uint32_t target_bitrate_bps, uint8_t fraction_loss,
668 int64_t rtt_ms) { 675 int64_t rtt_ms) {
669 uint32_t allocated_bitrate_bps = bitrate_allocator_->OnNetworkChanged( 676 uint32_t allocated_bitrate_bps = bitrate_allocator_->OnNetworkChanged(
670 target_bitrate_bps, fraction_loss, rtt_ms); 677 target_bitrate_bps, fraction_loss, rtt_ms);
671 678
672 int pad_up_to_bitrate_bps = 0; 679 int pad_up_to_bitrate_bps = 0;
673 { 680 {
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
842 // thread. Then this check can be enabled. 849 // thread. Then this check can be enabled.
843 // RTC_DCHECK(!configuration_thread_checker_.CalledOnValidThread()); 850 // RTC_DCHECK(!configuration_thread_checker_.CalledOnValidThread());
844 if (RtpHeaderParser::IsRtcp(packet, length)) 851 if (RtpHeaderParser::IsRtcp(packet, length))
845 return DeliverRtcp(media_type, packet, length); 852 return DeliverRtcp(media_type, packet, length);
846 853
847 return DeliverRtp(media_type, packet, length, packet_time); 854 return DeliverRtp(media_type, packet, length, packet_time);
848 } 855 }
849 856
850 } // namespace internal 857 } // namespace internal
851 } // namespace webrtc 858 } // namespace webrtc
OLDNEW
« no previous file with comments | « no previous file | webrtc/call/rtc_event_log_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698