diff --git a/pc/channel.h b/pc/channel.h index 73769b0cb9..9e4281167d 100644 --- a/pc/channel.h +++ b/pc/channel.h @@ -207,6 +207,12 @@ class BaseChannel // an RtpTransport in a more explicit way. bool HandlesPayloadType(int payload_type) const; + // Used by the RTCStatsCollector tests to set the transport name without + // creating RtpTransports. + void set_transport_name_for_testing(const std::string& transport_name) { + transport_name_ = transport_name; + } + protected: virtual MediaChannel* media_channel() const { return media_channel_.get(); } diff --git a/pc/rtcstatscollector.cc b/pc/rtcstatscollector.cc index 915aabf061..24444f3fef 100644 --- a/pc/rtcstatscollector.cc +++ b/pc/rtcstatscollector.cc @@ -76,16 +76,6 @@ std::string RTCTransportStatsIDFromTransportChannel( rtc::ToString<>(channel_component); } -std::string RTCTransportStatsIDFromBaseChannel( - const std::map& proxy_to_transport, - const cricket::BaseChannel& base_channel) { - auto proxy_it = proxy_to_transport.find(base_channel.content_name()); - if (proxy_it == proxy_to_transport.cend()) - return ""; - return RTCTransportStatsIDFromTransportChannel( - proxy_it->second, cricket::ICE_CANDIDATE_COMPONENT_RTP); -} - std::string RTCInboundRTPStreamStatsIDFromSSRC(bool audio, uint32_t ssrc) { return audio ? "RTCInboundRTPAudioStream_" + rtc::ToString<>(ssrc) : "RTCInboundRTPVideoStream_" + rtc::ToString<>(ssrc); @@ -753,8 +743,8 @@ void RTCStatsCollector::ProducePartialResultsOnNetworkThread( ProduceIceCandidateAndPairStats_n(timestamp_us, *session_stats, track_media_info_map_->video_media_info(), call_stats_, report.get()); - ProduceRTPStreamStats_n( - timestamp_us, *session_stats, *track_media_info_map_, report.get()); + ProduceRTPStreamStats_n(timestamp_us, *session_stats, *channel_name_pairs_, + *track_media_info_map_, report.get()); ProduceTransportStats_n( timestamp_us, *session_stats, transport_cert_stats, report.get()); } @@ -993,16 +983,20 @@ void RTCStatsCollector::ProducePeerConnectionStats_s( } void RTCStatsCollector::ProduceRTPStreamStats_n( - int64_t timestamp_us, const SessionStats& session_stats, + int64_t timestamp_us, + const SessionStats& session_stats, + const ChannelNamePairs& channel_name_pairs, const TrackMediaInfoMap& track_media_info_map, RTCStatsReport* report) const { RTC_DCHECK(network_thread_->IsCurrent()); // Audio if (track_media_info_map.voice_media_info()) { - std::string transport_id = RTCTransportStatsIDFromBaseChannel( - session_stats.proxy_to_transport, *pc_->voice_channel()); - RTC_DCHECK(!transport_id.empty()); + RTC_DCHECK(channel_name_pairs.voice); + const std::string& transport_name = + (*channel_name_pairs.voice).transport_name; + std::string transport_id = RTCTransportStatsIDFromTransportChannel( + transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP); // Inbound for (const cricket::VoiceReceiverInfo& voice_receiver_info : track_media_info_map.voice_media_info()->receivers) { @@ -1062,9 +1056,11 @@ void RTCStatsCollector::ProduceRTPStreamStats_n( } // Video if (track_media_info_map.video_media_info()) { - std::string transport_id = RTCTransportStatsIDFromBaseChannel( - session_stats.proxy_to_transport, *pc_->video_channel()); - RTC_DCHECK(!transport_id.empty()); + RTC_DCHECK(channel_name_pairs.video); + const std::string& transport_name = + (*channel_name_pairs.video).transport_name; + std::string transport_id = RTCTransportStatsIDFromTransportChannel( + transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP); // Inbound for (const cricket::VideoReceiverInfo& video_receiver_info : track_media_info_map.video_media_info()->receivers) { diff --git a/pc/rtcstatscollector.h b/pc/rtcstatscollector.h index 6effe73384..d73a76443f 100644 --- a/pc/rtcstatscollector.h +++ b/pc/rtcstatscollector.h @@ -118,10 +118,11 @@ class RTCStatsCollector : public virtual rtc::RefCountInterface, void ProducePeerConnectionStats_s( int64_t timestamp_us, RTCStatsReport* report) const; // Produces |RTCInboundRTPStreamStats| and |RTCOutboundRTPStreamStats|. - void ProduceRTPStreamStats_n( - int64_t timestamp_us, const SessionStats& session_stats, - const TrackMediaInfoMap& track_media_info_map, - RTCStatsReport* report) const; + void ProduceRTPStreamStats_n(int64_t timestamp_us, + const SessionStats& session_stats, + const ChannelNamePairs& channel_name_pairs, + const TrackMediaInfoMap& track_media_info_map, + RTCStatsReport* report) const; // Produces |RTCTransportStats|. void ProduceTransportStats_n( int64_t timestamp_us, const SessionStats& session_stats, @@ -158,6 +159,7 @@ class RTCStatsCollector : public virtual rtc::RefCountInterface, std::unique_ptr channel_name_pairs_; std::unique_ptr track_media_info_map_; std::map track_to_id_; + Call::Stats call_stats_; // A timestamp, in microseconds, that is based on a timer that is diff --git a/pc/rtcstatscollector_unittest.cc b/pc/rtcstatscollector_unittest.cc index 8047ddec7e..c50111c8c8 100644 --- a/pc/rtcstatscollector_unittest.cc +++ b/pc/rtcstatscollector_unittest.cc @@ -1807,6 +1807,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Audio) { test_->signaling_thread(), test_->media_engine(), rtc::WrapUnique(voice_media_channel), "VoiceContentName", kDefaultRtcpMuxRequired, kDefaultSrtpRequired); + voice_channel.set_transport_name_for_testing("TransportName"); test_->SetupRemoteTrackAndReceiver( cricket::MEDIA_TYPE_AUDIO, "RemoteAudioTrackID", 1); @@ -1886,6 +1887,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Video) { test_->worker_thread(), test_->network_thread(), test_->signaling_thread(), rtc::WrapUnique(video_media_channel), "VideoContentName", kDefaultRtcpMuxRequired, kDefaultSrtpRequired); + video_channel.set_transport_name_for_testing("TransportName"); test_->SetupRemoteTrackAndReceiver( cricket::MEDIA_TYPE_VIDEO, "RemoteVideoTrackID", 1); @@ -1988,6 +1990,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCOutboundRTPStreamStats_Audio) { test_->signaling_thread(), test_->media_engine(), rtc::WrapUnique(voice_media_channel), "VoiceContentName", kDefaultRtcpMuxRequired, kDefaultSrtpRequired); + voice_channel.set_transport_name_for_testing("TransportName"); test_->SetupLocalTrackAndSender( cricket::MEDIA_TYPE_AUDIO, "LocalAudioTrackID", 1); @@ -2065,6 +2068,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCOutboundRTPStreamStats_Video) { test_->worker_thread(), test_->network_thread(), test_->signaling_thread(), rtc::WrapUnique(video_media_channel), "VideoContentName", kDefaultRtcpMuxRequired, kDefaultSrtpRequired); + video_channel.set_transport_name_for_testing("TransportName"); test_->SetupLocalTrackAndSender( cricket::MEDIA_TYPE_VIDEO, "LocalVideoTrackID", 1);