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

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

Issue 1748403002: Move RtcEventLog object from inside VoiceEngine to Call. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Processed review comments and rebased. Created 4 years, 9 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
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 void SetBitrateConfig( 87 void SetBitrateConfig(
88 const webrtc::Call::Config::BitrateConfig& bitrate_config) override; 88 const webrtc::Call::Config::BitrateConfig& bitrate_config) override;
89 void SignalNetworkState(NetworkState state) override; 89 void SignalNetworkState(NetworkState state) override;
90 90
91 void OnSentPacket(const rtc::SentPacket& sent_packet) override; 91 void OnSentPacket(const rtc::SentPacket& sent_packet) override;
92 92
93 // Implements BitrateObserver. 93 // Implements BitrateObserver.
94 void OnNetworkChanged(uint32_t bitrate_bps, uint8_t fraction_loss, 94 void OnNetworkChanged(uint32_t bitrate_bps, uint8_t fraction_loss,
95 int64_t rtt_ms) override; 95 int64_t rtt_ms) override;
96 96
97 bool StartEventLog(rtc::PlatformFile log_file,
98 int64_t max_size_bytes) override {
99 return event_log_->StartLogging(log_file, max_size_bytes);
100 }
101
102 void StopEventLog() override { event_log_->StopLogging(); }
103
97 private: 104 private:
98 DeliveryStatus DeliverRtcp(MediaType media_type, const uint8_t* packet, 105 DeliveryStatus DeliverRtcp(MediaType media_type, const uint8_t* packet,
99 size_t length); 106 size_t length);
100 DeliveryStatus DeliverRtp(MediaType media_type, 107 DeliveryStatus DeliverRtp(MediaType media_type,
101 const uint8_t* packet, 108 const uint8_t* packet,
102 size_t length, 109 size_t length,
103 const PacketTime& packet_time); 110 const PacketTime& packet_time);
104 111
105 void ConfigureSync(const std::string& sync_group) 112 void ConfigureSync(const std::string& sync_group)
106 EXCLUSIVE_LOCKS_REQUIRED(receive_crit_); 113 EXCLUSIVE_LOCKS_REQUIRED(receive_crit_);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 GUARDED_BY(receive_crit_); 148 GUARDED_BY(receive_crit_);
142 149
143 std::unique_ptr<RWLockWrapper> send_crit_; 150 std::unique_ptr<RWLockWrapper> send_crit_;
144 // Audio and Video send streams are owned by the client that creates them. 151 // Audio and Video send streams are owned by the client that creates them.
145 std::map<uint32_t, AudioSendStream*> audio_send_ssrcs_ GUARDED_BY(send_crit_); 152 std::map<uint32_t, AudioSendStream*> audio_send_ssrcs_ GUARDED_BY(send_crit_);
146 std::map<uint32_t, VideoSendStream*> video_send_ssrcs_ GUARDED_BY(send_crit_); 153 std::map<uint32_t, VideoSendStream*> video_send_ssrcs_ GUARDED_BY(send_crit_);
147 std::set<VideoSendStream*> video_send_streams_ GUARDED_BY(send_crit_); 154 std::set<VideoSendStream*> video_send_streams_ GUARDED_BY(send_crit_);
148 155
149 VideoSendStream::RtpStateMap suspended_video_send_ssrcs_; 156 VideoSendStream::RtpStateMap suspended_video_send_ssrcs_;
150 157
151 RtcEventLog* event_log_ = nullptr; 158 rtc::scoped_ptr<webrtc::RtcEventLog> event_log_;
the sun 2016/03/23 10:26:45 use unique_ptr
ivoc 2016/03/23 14:27:26 Done.
152 159
153 // The following members are only accessed (exclusively) from one thread and 160 // The following members are only accessed (exclusively) from one thread and
154 // from the destructor, and therefore doesn't need any explicit 161 // from the destructor, and therefore doesn't need any explicit
155 // synchronization. 162 // synchronization.
156 int64_t received_video_bytes_; 163 int64_t received_video_bytes_;
157 int64_t received_audio_bytes_; 164 int64_t received_audio_bytes_;
158 int64_t received_rtcp_bytes_; 165 int64_t received_rtcp_bytes_;
159 int64_t first_rtp_packet_received_ms_; 166 int64_t first_rtp_packet_received_ms_;
160 int64_t last_rtp_packet_received_ms_; 167 int64_t last_rtp_packet_received_ms_;
161 int64_t first_packet_sent_ms_; 168 int64_t first_packet_sent_ms_;
(...skipping 23 matching lines...) Expand all
185 num_cpu_cores_(CpuInfo::DetectNumberOfCores()), 192 num_cpu_cores_(CpuInfo::DetectNumberOfCores()),
186 module_process_thread_( 193 module_process_thread_(
187 rtc::ScopedToUnique(ProcessThread::Create("ModuleProcessThread"))), 194 rtc::ScopedToUnique(ProcessThread::Create("ModuleProcessThread"))),
188 pacer_thread_(rtc::ScopedToUnique(ProcessThread::Create("PacerThread"))), 195 pacer_thread_(rtc::ScopedToUnique(ProcessThread::Create("PacerThread"))),
189 call_stats_(new CallStats(clock_)), 196 call_stats_(new CallStats(clock_)),
190 bitrate_allocator_(new BitrateAllocator()), 197 bitrate_allocator_(new BitrateAllocator()),
191 config_(config), 198 config_(config),
192 network_enabled_(true), 199 network_enabled_(true),
193 receive_crit_(RWLockWrapper::CreateRWLock()), 200 receive_crit_(RWLockWrapper::CreateRWLock()),
194 send_crit_(RWLockWrapper::CreateRWLock()), 201 send_crit_(RWLockWrapper::CreateRWLock()),
202 event_log_(RtcEventLog::Create()),
195 received_video_bytes_(0), 203 received_video_bytes_(0),
196 received_audio_bytes_(0), 204 received_audio_bytes_(0),
197 received_rtcp_bytes_(0), 205 received_rtcp_bytes_(0),
198 first_rtp_packet_received_ms_(-1), 206 first_rtp_packet_received_ms_(-1),
199 last_rtp_packet_received_ms_(-1), 207 last_rtp_packet_received_ms_(-1),
200 first_packet_sent_ms_(-1), 208 first_packet_sent_ms_(-1),
201 estimated_send_bitrate_sum_kbits_(0), 209 estimated_send_bitrate_sum_kbits_(0),
202 pacer_bitrate_sum_kbits_(0), 210 pacer_bitrate_sum_kbits_(0),
203 num_bitrate_updates_(0), 211 num_bitrate_updates_(0),
204 remb_(clock_), 212 remb_(clock_),
205 congestion_controller_(new CongestionController(clock_, this, &remb_)) { 213 congestion_controller_(
214 new CongestionController(clock_, this, &remb_, event_log_.get())) {
206 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); 215 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
207 RTC_DCHECK_GE(config.bitrate_config.min_bitrate_bps, 0); 216 RTC_DCHECK_GE(config.bitrate_config.min_bitrate_bps, 0);
208 RTC_DCHECK_GE(config.bitrate_config.start_bitrate_bps, 217 RTC_DCHECK_GE(config.bitrate_config.start_bitrate_bps,
209 config.bitrate_config.min_bitrate_bps); 218 config.bitrate_config.min_bitrate_bps);
210 if (config.bitrate_config.max_bitrate_bps != -1) { 219 if (config.bitrate_config.max_bitrate_bps != -1) {
211 RTC_DCHECK_GE(config.bitrate_config.max_bitrate_bps, 220 RTC_DCHECK_GE(config.bitrate_config.max_bitrate_bps,
212 config.bitrate_config.start_bitrate_bps); 221 config.bitrate_config.start_bitrate_bps);
213 } 222 }
214 if (config.audio_state.get()) {
215 ScopedVoEInterface<VoECodec> voe_codec(voice_engine());
216 event_log_ = voe_codec->GetEventLog();
217 }
218 223
219 Trace::CreateTrace(); 224 Trace::CreateTrace();
220 call_stats_->RegisterStatsObserver(congestion_controller_.get()); 225 call_stats_->RegisterStatsObserver(congestion_controller_.get());
221 226
222 congestion_controller_->SetBweBitrates( 227 congestion_controller_->SetBweBitrates(
223 config_.bitrate_config.min_bitrate_bps, 228 config_.bitrate_config.min_bitrate_bps,
224 config_.bitrate_config.start_bitrate_bps, 229 config_.bitrate_config.start_bitrate_bps,
225 config_.bitrate_config.max_bitrate_bps); 230 config_.bitrate_config.max_bitrate_bps);
226 congestion_controller_->GetBitrateController()->SetEventLog(event_log_);
227 231
228 module_process_thread_->Start(); 232 module_process_thread_->Start();
229 module_process_thread_->RegisterModule(call_stats_.get()); 233 module_process_thread_->RegisterModule(call_stats_.get());
230 module_process_thread_->RegisterModule(congestion_controller_.get()); 234 module_process_thread_->RegisterModule(congestion_controller_.get());
231 pacer_thread_->RegisterModule(congestion_controller_->pacer()); 235 pacer_thread_->RegisterModule(congestion_controller_->pacer());
232 pacer_thread_->RegisterModule( 236 pacer_thread_->RegisterModule(
233 congestion_controller_->GetRemoteBitrateEstimator(true)); 237 congestion_controller_->GetRemoteBitrateEstimator(true));
234 pacer_thread_->Start(); 238 pacer_thread_->Start();
235 } 239 }
236 240
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 audio_send_stream->config().rtp.ssrc); 347 audio_send_stream->config().rtp.ssrc);
344 RTC_DCHECK(num_deleted == 1); 348 RTC_DCHECK(num_deleted == 1);
345 } 349 }
346 delete audio_send_stream; 350 delete audio_send_stream;
347 } 351 }
348 352
349 webrtc::AudioReceiveStream* Call::CreateAudioReceiveStream( 353 webrtc::AudioReceiveStream* Call::CreateAudioReceiveStream(
350 const webrtc::AudioReceiveStream::Config& config) { 354 const webrtc::AudioReceiveStream::Config& config) {
351 TRACE_EVENT0("webrtc", "Call::CreateAudioReceiveStream"); 355 TRACE_EVENT0("webrtc", "Call::CreateAudioReceiveStream");
352 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); 356 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
353 AudioReceiveStream* receive_stream = new AudioReceiveStream( 357 AudioReceiveStream* receive_stream =
354 congestion_controller_.get(), config, config_.audio_state); 358 new AudioReceiveStream(congestion_controller_.get(), config,
359 config_.audio_state, event_log_.get());
355 { 360 {
356 WriteLockScoped write_lock(*receive_crit_); 361 WriteLockScoped write_lock(*receive_crit_);
357 RTC_DCHECK(audio_receive_ssrcs_.find(config.rtp.remote_ssrc) == 362 RTC_DCHECK(audio_receive_ssrcs_.find(config.rtp.remote_ssrc) ==
358 audio_receive_ssrcs_.end()); 363 audio_receive_ssrcs_.end());
359 audio_receive_ssrcs_[config.rtp.remote_ssrc] = receive_stream; 364 audio_receive_ssrcs_[config.rtp.remote_ssrc] = receive_stream;
360 ConfigureSync(config.sync_group); 365 ConfigureSync(config.sync_group);
361 } 366 }
362 return receive_stream; 367 return receive_stream;
363 } 368 }
364 369
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 if (!network_enabled_) 406 if (!network_enabled_)
402 send_stream->SignalNetworkState(kNetworkDown); 407 send_stream->SignalNetworkState(kNetworkDown);
403 408
404 WriteLockScoped write_lock(*send_crit_); 409 WriteLockScoped write_lock(*send_crit_);
405 for (uint32_t ssrc : config.rtp.ssrcs) { 410 for (uint32_t ssrc : config.rtp.ssrcs) {
406 RTC_DCHECK(video_send_ssrcs_.find(ssrc) == video_send_ssrcs_.end()); 411 RTC_DCHECK(video_send_ssrcs_.find(ssrc) == video_send_ssrcs_.end());
407 video_send_ssrcs_[ssrc] = send_stream; 412 video_send_ssrcs_[ssrc] = send_stream;
408 } 413 }
409 video_send_streams_.insert(send_stream); 414 video_send_streams_.insert(send_stream);
410 415
411 if (event_log_) 416 event_log_->LogVideoSendStreamConfig(config);
412 event_log_->LogVideoSendStreamConfig(config);
413 417
414 return send_stream; 418 return send_stream;
415 } 419 }
416 420
417 void Call::DestroyVideoSendStream(webrtc::VideoSendStream* send_stream) { 421 void Call::DestroyVideoSendStream(webrtc::VideoSendStream* send_stream) {
418 TRACE_EVENT0("webrtc", "Call::DestroyVideoSendStream"); 422 TRACE_EVENT0("webrtc", "Call::DestroyVideoSendStream");
419 RTC_DCHECK(send_stream != nullptr); 423 RTC_DCHECK(send_stream != nullptr);
420 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); 424 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
421 425
422 send_stream->Stop(); 426 send_stream->Stop();
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
465 config.rtp.rtx.begin(); 469 config.rtp.rtx.begin();
466 if (it != config.rtp.rtx.end()) 470 if (it != config.rtp.rtx.end())
467 video_receive_ssrcs_[it->second.ssrc] = receive_stream; 471 video_receive_ssrcs_[it->second.ssrc] = receive_stream;
468 video_receive_streams_.insert(receive_stream); 472 video_receive_streams_.insert(receive_stream);
469 473
470 ConfigureSync(config.sync_group); 474 ConfigureSync(config.sync_group);
471 475
472 if (!network_enabled_) 476 if (!network_enabled_)
473 receive_stream->SignalNetworkState(kNetworkDown); 477 receive_stream->SignalNetworkState(kNetworkDown);
474 478
475 if (event_log_) 479 event_log_->LogVideoReceiveStreamConfig(config);
476 event_log_->LogVideoReceiveStreamConfig(config);
477 480
478 return receive_stream; 481 return receive_stream;
479 } 482 }
480 483
481 void Call::DestroyVideoReceiveStream( 484 void Call::DestroyVideoReceiveStream(
482 webrtc::VideoReceiveStream* receive_stream) { 485 webrtc::VideoReceiveStream* receive_stream) {
483 TRACE_EVENT0("webrtc", "Call::DestroyVideoReceiveStream"); 486 TRACE_EVENT0("webrtc", "Call::DestroyVideoReceiveStream");
484 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); 487 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
485 RTC_DCHECK(receive_stream != nullptr); 488 RTC_DCHECK(receive_stream != nullptr);
486 VideoReceiveStream* receive_stream_impl = nullptr; 489 VideoReceiveStream* receive_stream_impl = nullptr;
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
666 // Do NOT broadcast! Also make sure it's a valid packet. 669 // Do NOT broadcast! Also make sure it's a valid packet.
667 // Return DELIVERY_UNKNOWN_SSRC if it can be determined that 670 // Return DELIVERY_UNKNOWN_SSRC if it can be determined that
668 // there's no receiver of the packet. 671 // there's no receiver of the packet.
669 received_rtcp_bytes_ += length; 672 received_rtcp_bytes_ += length;
670 bool rtcp_delivered = false; 673 bool rtcp_delivered = false;
671 if (media_type == MediaType::ANY || media_type == MediaType::VIDEO) { 674 if (media_type == MediaType::ANY || media_type == MediaType::VIDEO) {
672 ReadLockScoped read_lock(*receive_crit_); 675 ReadLockScoped read_lock(*receive_crit_);
673 for (VideoReceiveStream* stream : video_receive_streams_) { 676 for (VideoReceiveStream* stream : video_receive_streams_) {
674 if (stream->DeliverRtcp(packet, length)) { 677 if (stream->DeliverRtcp(packet, length)) {
675 rtcp_delivered = true; 678 rtcp_delivered = true;
676 if (event_log_) 679 event_log_->LogRtcpPacket(kIncomingPacket, media_type, packet, length);
677 event_log_->LogRtcpPacket(kIncomingPacket, media_type, packet,
678 length);
679 } 680 }
680 } 681 }
681 } 682 }
682 if (media_type == MediaType::ANY || media_type == MediaType::VIDEO) { 683 if (media_type == MediaType::ANY || media_type == MediaType::VIDEO) {
683 ReadLockScoped read_lock(*send_crit_); 684 ReadLockScoped read_lock(*send_crit_);
684 for (VideoSendStream* stream : video_send_streams_) { 685 for (VideoSendStream* stream : video_send_streams_) {
685 if (stream->DeliverRtcp(packet, length)) { 686 if (stream->DeliverRtcp(packet, length)) {
686 rtcp_delivered = true; 687 rtcp_delivered = true;
687 if (event_log_) 688 event_log_->LogRtcpPacket(kIncomingPacket, media_type, packet, length);
688 event_log_->LogRtcpPacket(kIncomingPacket, media_type, packet,
689 length);
690 } 689 }
691 } 690 }
692 } 691 }
693 return rtcp_delivered ? DELIVERY_OK : DELIVERY_PACKET_ERROR; 692 return rtcp_delivered ? DELIVERY_OK : DELIVERY_PACKET_ERROR;
694 } 693 }
695 694
696 PacketReceiver::DeliveryStatus Call::DeliverRtp(MediaType media_type, 695 PacketReceiver::DeliveryStatus Call::DeliverRtp(MediaType media_type,
697 const uint8_t* packet, 696 const uint8_t* packet,
698 size_t length, 697 size_t length,
699 const PacketTime& packet_time) { 698 const PacketTime& packet_time) {
700 TRACE_EVENT0("webrtc", "Call::DeliverRtp"); 699 TRACE_EVENT0("webrtc", "Call::DeliverRtp");
701 // Minimum RTP header size. 700 // Minimum RTP header size.
702 if (length < 12) 701 if (length < 12)
703 return DELIVERY_PACKET_ERROR; 702 return DELIVERY_PACKET_ERROR;
704 703
705 last_rtp_packet_received_ms_ = clock_->TimeInMilliseconds(); 704 last_rtp_packet_received_ms_ = clock_->TimeInMilliseconds();
706 if (first_rtp_packet_received_ms_ == -1) 705 if (first_rtp_packet_received_ms_ == -1)
707 first_rtp_packet_received_ms_ = last_rtp_packet_received_ms_; 706 first_rtp_packet_received_ms_ = last_rtp_packet_received_ms_;
708 707
709 uint32_t ssrc = ByteReader<uint32_t>::ReadBigEndian(&packet[8]); 708 uint32_t ssrc = ByteReader<uint32_t>::ReadBigEndian(&packet[8]);
710 ReadLockScoped read_lock(*receive_crit_); 709 ReadLockScoped read_lock(*receive_crit_);
711 if (media_type == MediaType::ANY || media_type == MediaType::AUDIO) { 710 if (media_type == MediaType::ANY || media_type == MediaType::AUDIO) {
712 auto it = audio_receive_ssrcs_.find(ssrc); 711 auto it = audio_receive_ssrcs_.find(ssrc);
713 if (it != audio_receive_ssrcs_.end()) { 712 if (it != audio_receive_ssrcs_.end()) {
714 received_audio_bytes_ += length; 713 received_audio_bytes_ += length;
715 auto status = it->second->DeliverRtp(packet, length, packet_time) 714 auto status = it->second->DeliverRtp(packet, length, packet_time)
716 ? DELIVERY_OK 715 ? DELIVERY_OK
717 : DELIVERY_PACKET_ERROR; 716 : DELIVERY_PACKET_ERROR;
718 if (status == DELIVERY_OK && event_log_) 717 if (status == DELIVERY_OK)
719 event_log_->LogRtpHeader(kIncomingPacket, media_type, packet, length); 718 event_log_->LogRtpHeader(kIncomingPacket, media_type, packet, length);
720 return status; 719 return status;
721 } 720 }
722 } 721 }
723 if (media_type == MediaType::ANY || media_type == MediaType::VIDEO) { 722 if (media_type == MediaType::ANY || media_type == MediaType::VIDEO) {
724 auto it = video_receive_ssrcs_.find(ssrc); 723 auto it = video_receive_ssrcs_.find(ssrc);
725 if (it != video_receive_ssrcs_.end()) { 724 if (it != video_receive_ssrcs_.end()) {
726 received_video_bytes_ += length; 725 received_video_bytes_ += length;
727 auto status = it->second->DeliverRtp(packet, length, packet_time) 726 auto status = it->second->DeliverRtp(packet, length, packet_time)
728 ? DELIVERY_OK 727 ? DELIVERY_OK
729 : DELIVERY_PACKET_ERROR; 728 : DELIVERY_PACKET_ERROR;
730 if (status == DELIVERY_OK && event_log_) 729 if (status == DELIVERY_OK)
731 event_log_->LogRtpHeader(kIncomingPacket, media_type, packet, length); 730 event_log_->LogRtpHeader(kIncomingPacket, media_type, packet, length);
732 return status; 731 return status;
733 } 732 }
734 } 733 }
735 return DELIVERY_UNKNOWN_SSRC; 734 return DELIVERY_UNKNOWN_SSRC;
736 } 735 }
737 736
738 PacketReceiver::DeliveryStatus Call::DeliverPacket( 737 PacketReceiver::DeliveryStatus Call::DeliverPacket(
739 MediaType media_type, 738 MediaType media_type,
740 const uint8_t* packet, 739 const uint8_t* packet,
741 size_t length, 740 size_t length,
742 const PacketTime& packet_time) { 741 const PacketTime& packet_time) {
743 // TODO(solenberg): Tests call this function on a network thread, libjingle 742 // TODO(solenberg): Tests call this function on a network thread, libjingle
744 // calls on the worker thread. We should move towards always using a network 743 // calls on the worker thread. We should move towards always using a network
745 // thread. Then this check can be enabled. 744 // thread. Then this check can be enabled.
746 // RTC_DCHECK(!configuration_thread_checker_.CalledOnValidThread()); 745 // RTC_DCHECK(!configuration_thread_checker_.CalledOnValidThread());
747 if (RtpHeaderParser::IsRtcp(packet, length)) 746 if (RtpHeaderParser::IsRtcp(packet, length))
748 return DeliverRtcp(media_type, packet, length); 747 return DeliverRtcp(media_type, packet, length);
749 748
750 return DeliverRtp(media_type, packet, length, packet_time); 749 return DeliverRtp(media_type, packet, length, packet_time);
751 } 750 }
752 751
753 } // namespace internal 752 } // namespace internal
754 } // namespace webrtc 753 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698