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

Side by Side Diff: webrtc/api/rtcstatscollector.cc

Issue 2452043002: RTCInboundRTPStreamStats added. (Closed)
Patch Set: Rebase with master after CL this depends on landed Created 4 years, 1 month 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 | « webrtc/api/rtcstatscollector.h ('k') | webrtc/api/rtcstatscollector_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 2016 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2016 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 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 std::string RTCTransportStatsIDFromBaseChannel( 46 std::string RTCTransportStatsIDFromBaseChannel(
47 const ProxyTransportMap& proxy_to_transport, 47 const ProxyTransportMap& proxy_to_transport,
48 const cricket::BaseChannel& base_channel) { 48 const cricket::BaseChannel& base_channel) {
49 auto proxy_it = proxy_to_transport.find(base_channel.content_name()); 49 auto proxy_it = proxy_to_transport.find(base_channel.content_name());
50 if (proxy_it == proxy_to_transport.cend()) 50 if (proxy_it == proxy_to_transport.cend())
51 return ""; 51 return "";
52 return RTCTransportStatsIDFromTransportChannel( 52 return RTCTransportStatsIDFromTransportChannel(
53 proxy_it->second, cricket::ICE_CANDIDATE_COMPONENT_RTP); 53 proxy_it->second, cricket::ICE_CANDIDATE_COMPONENT_RTP);
54 } 54 }
55 55
56 std::string RTCInboundRTPStreamStatsIDFromSSRC(bool audio, uint32_t ssrc) {
57 return audio ? "RTCInboundRTPAudioStream_" + rtc::ToString<>(ssrc)
58 : "RTCInboundRTPVideoStream_" + rtc::ToString<>(ssrc);
59 }
60
56 std::string RTCOutboundRTPStreamStatsIDFromSSRC(bool audio, uint32_t ssrc) { 61 std::string RTCOutboundRTPStreamStatsIDFromSSRC(bool audio, uint32_t ssrc) {
57 return audio ? "RTCOutboundRTPAudioStream_" + rtc::ToString<>(ssrc) 62 return audio ? "RTCOutboundRTPAudioStream_" + rtc::ToString<>(ssrc)
58 : "RTCOutboundRTPVideoStream_" + rtc::ToString<>(ssrc); 63 : "RTCOutboundRTPVideoStream_" + rtc::ToString<>(ssrc);
59 } 64 }
60 65
61 const char* CandidateTypeToRTCIceCandidateType(const std::string& type) { 66 const char* CandidateTypeToRTCIceCandidateType(const std::string& type) {
62 if (type == cricket::LOCAL_PORT_TYPE) 67 if (type == cricket::LOCAL_PORT_TYPE)
63 return RTCIceCandidateType::kHost; 68 return RTCIceCandidateType::kHost;
64 if (type == cricket::STUN_PORT_TYPE) 69 if (type == cricket::STUN_PORT_TYPE)
65 return RTCIceCandidateType::kSrflx; 70 return RTCIceCandidateType::kSrflx;
(...skipping 15 matching lines...) Expand all
81 case DataChannelInterface::kClosing: 86 case DataChannelInterface::kClosing:
82 return RTCDataChannelState::kClosing; 87 return RTCDataChannelState::kClosing;
83 case DataChannelInterface::kClosed: 88 case DataChannelInterface::kClosed:
84 return RTCDataChannelState::kClosed; 89 return RTCDataChannelState::kClosed;
85 default: 90 default:
86 RTC_NOTREACHED(); 91 RTC_NOTREACHED();
87 return nullptr; 92 return nullptr;
88 } 93 }
89 } 94 }
90 95
96 void SetInboundRTPStreamStatsFromMediaReceiverInfo(
97 const cricket::MediaReceiverInfo& media_receiver_info,
98 RTCInboundRTPStreamStats* inbound_stats) {
99 RTC_DCHECK(inbound_stats);
100 inbound_stats->ssrc = rtc::ToString<>(media_receiver_info.ssrc());
101 // TODO(hbos): Support the remote case. crbug.com/657855
102 inbound_stats->is_remote = false;
103 // TODO(hbos): Set |codec_id| when we have |RTCCodecStats|. Maybe relevant:
104 // |media_receiver_info.codec_name|. crbug.com/657854, 657855, 659117
105 inbound_stats->packets_received =
106 static_cast<uint32_t>(media_receiver_info.packets_rcvd);
107 inbound_stats->bytes_received =
108 static_cast<uint64_t>(media_receiver_info.bytes_rcvd);
109 inbound_stats->fraction_lost =
110 static_cast<double>(media_receiver_info.fraction_lost);
111 }
112
113 void SetInboundRTPStreamStatsFromVoiceReceiverInfo(
114 const cricket::VoiceReceiverInfo& voice_receiver_info,
115 RTCInboundRTPStreamStats* inbound_stats) {
116 SetInboundRTPStreamStatsFromMediaReceiverInfo(
117 voice_receiver_info, inbound_stats);
118 inbound_stats->media_type = "audio";
119 inbound_stats->jitter =
120 static_cast<double>(voice_receiver_info.jitter_ms) /
121 rtc::kNumMillisecsPerSec;
122 }
123
124 void SetInboundRTPStreamStatsFromVideoReceiverInfo(
125 const cricket::VideoReceiverInfo& video_receiver_info,
126 RTCInboundRTPStreamStats* inbound_stats) {
127 SetInboundRTPStreamStatsFromMediaReceiverInfo(
128 video_receiver_info, inbound_stats);
129 inbound_stats->media_type = "video";
130 }
131
91 void SetOutboundRTPStreamStatsFromMediaSenderInfo( 132 void SetOutboundRTPStreamStatsFromMediaSenderInfo(
92 const cricket::MediaSenderInfo& media_sender_info, 133 const cricket::MediaSenderInfo& media_sender_info,
93 RTCOutboundRTPStreamStats* outbound_stats) { 134 RTCOutboundRTPStreamStats* outbound_stats) {
94 RTC_DCHECK(outbound_stats); 135 RTC_DCHECK(outbound_stats);
95 outbound_stats->ssrc = rtc::ToString<>(media_sender_info.ssrc()); 136 outbound_stats->ssrc = rtc::ToString<>(media_sender_info.ssrc());
96 // TODO(hbos): Support the remote case. crbug.com/657856 137 // TODO(hbos): Support the remote case. crbug.com/657856
97 outbound_stats->is_remote = false; 138 outbound_stats->is_remote = false;
98 // TODO(hbos): Set |codec_id| when we have |RTCCodecStats|. Maybe relevant: 139 // TODO(hbos): Set |codec_id| when we have |RTCCodecStats|. Maybe relevant:
99 // |media_sender_info.codec_name|. crbug.com/657854, 657856, 659117 140 // |media_sender_info.codec_name|. crbug.com/657854, 657856, 659117
100 outbound_stats->packets_sent = 141 outbound_stats->packets_sent =
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
453 int64_t timestamp_us, const SessionStats& session_stats, 494 int64_t timestamp_us, const SessionStats& session_stats,
454 RTCStatsReport* report) const { 495 RTCStatsReport* report) const {
455 RTC_DCHECK(signaling_thread_->IsCurrent()); 496 RTC_DCHECK(signaling_thread_->IsCurrent());
456 497
457 // Audio 498 // Audio
458 if (pc_->session()->voice_channel()) { 499 if (pc_->session()->voice_channel()) {
459 cricket::VoiceMediaInfo voice_media_info; 500 cricket::VoiceMediaInfo voice_media_info;
460 if (pc_->session()->voice_channel()->GetStats(&voice_media_info)) { 501 if (pc_->session()->voice_channel()->GetStats(&voice_media_info)) {
461 std::string transport_id = RTCTransportStatsIDFromBaseChannel( 502 std::string transport_id = RTCTransportStatsIDFromBaseChannel(
462 session_stats.proxy_to_transport, *pc_->session()->voice_channel()); 503 session_stats.proxy_to_transport, *pc_->session()->voice_channel());
504 RTC_DCHECK(!transport_id.empty());
505 // Inbound
506 for (const cricket::VoiceReceiverInfo& voice_receiver_info :
507 voice_media_info.receivers) {
508 // TODO(nisse): SSRC == 0 currently means none. Delete check when that
509 // is fixed.
510 if (voice_receiver_info.ssrc() == 0)
511 continue;
512 std::unique_ptr<RTCInboundRTPStreamStats> inbound_audio(
513 new RTCInboundRTPStreamStats(
514 RTCInboundRTPStreamStatsIDFromSSRC(
515 true, voice_receiver_info.ssrc()),
516 timestamp_us));
517 SetInboundRTPStreamStatsFromVoiceReceiverInfo(
518 voice_receiver_info, inbound_audio.get());
519 inbound_audio->transport_id = transport_id;
520 report->AddStats(std::move(inbound_audio));
521 }
522 // Outbound
463 for (const cricket::VoiceSenderInfo& voice_sender_info : 523 for (const cricket::VoiceSenderInfo& voice_sender_info :
464 voice_media_info.senders) { 524 voice_media_info.senders) {
465 // TODO(nisse): SSRC == 0 currently means none. Delete check when that 525 // TODO(nisse): SSRC == 0 currently means none. Delete check when that
466 // is fixed. 526 // is fixed.
467 if (voice_sender_info.ssrc() == 0) 527 if (voice_sender_info.ssrc() == 0)
468 continue; 528 continue;
469 std::unique_ptr<RTCOutboundRTPStreamStats> outbound_audio( 529 std::unique_ptr<RTCOutboundRTPStreamStats> outbound_audio(
470 new RTCOutboundRTPStreamStats( 530 new RTCOutboundRTPStreamStats(
471 RTCOutboundRTPStreamStatsIDFromSSRC( 531 RTCOutboundRTPStreamStatsIDFromSSRC(
472 true, voice_sender_info.ssrc()), 532 true, voice_sender_info.ssrc()),
473 timestamp_us)); 533 timestamp_us));
474 SetOutboundRTPStreamStatsFromVoiceSenderInfo( 534 SetOutboundRTPStreamStatsFromVoiceSenderInfo(
475 voice_sender_info, outbound_audio.get()); 535 voice_sender_info, outbound_audio.get());
476 if (!transport_id.empty()) 536 outbound_audio->transport_id = transport_id;
477 outbound_audio->transport_id = transport_id;
478 report->AddStats(std::move(outbound_audio)); 537 report->AddStats(std::move(outbound_audio));
479 } 538 }
480 } 539 }
481 } 540 }
482 // Video 541 // Video
483 if (pc_->session()->video_channel()) { 542 if (pc_->session()->video_channel()) {
484 cricket::VideoMediaInfo video_media_info; 543 cricket::VideoMediaInfo video_media_info;
485 if (pc_->session()->video_channel()->GetStats(&video_media_info)) { 544 if (pc_->session()->video_channel()->GetStats(&video_media_info)) {
486 std::string transport_id = RTCTransportStatsIDFromBaseChannel( 545 std::string transport_id = RTCTransportStatsIDFromBaseChannel(
487 session_stats.proxy_to_transport, *pc_->session()->video_channel()); 546 session_stats.proxy_to_transport, *pc_->session()->video_channel());
547 RTC_DCHECK(!transport_id.empty());
548 // Inbound
549 for (const cricket::VideoReceiverInfo& video_receiver_info :
550 video_media_info.receivers) {
551 // TODO(nisse): SSRC == 0 currently means none. Delete check when that
552 // is fixed.
553 if (video_receiver_info.ssrc() == 0)
554 continue;
555 std::unique_ptr<RTCInboundRTPStreamStats> inbound_video(
556 new RTCInboundRTPStreamStats(
557 RTCInboundRTPStreamStatsIDFromSSRC(
558 false, video_receiver_info.ssrc()),
559 timestamp_us));
560 SetInboundRTPStreamStatsFromVideoReceiverInfo(
561 video_receiver_info, inbound_video.get());
562 inbound_video->transport_id = transport_id;
563 report->AddStats(std::move(inbound_video));
564 }
565 // Outbound
488 for (const cricket::VideoSenderInfo& video_sender_info : 566 for (const cricket::VideoSenderInfo& video_sender_info :
489 video_media_info.senders) { 567 video_media_info.senders) {
490 // TODO(nisse): SSRC == 0 currently means none. Delete check when that 568 // TODO(nisse): SSRC == 0 currently means none. Delete check when that
491 // is fixed. 569 // is fixed.
492 if (video_sender_info.ssrc() == 0) 570 if (video_sender_info.ssrc() == 0)
493 continue; 571 continue;
494 std::unique_ptr<RTCOutboundRTPStreamStats> outbound_video( 572 std::unique_ptr<RTCOutboundRTPStreamStats> outbound_video(
495 new RTCOutboundRTPStreamStats( 573 new RTCOutboundRTPStreamStats(
496 RTCOutboundRTPStreamStatsIDFromSSRC( 574 RTCOutboundRTPStreamStatsIDFromSSRC(
497 false, video_sender_info.ssrc()), 575 false, video_sender_info.ssrc()),
498 timestamp_us)); 576 timestamp_us));
499 SetOutboundRTPStreamStatsFromVideoSenderInfo( 577 SetOutboundRTPStreamStatsFromVideoSenderInfo(
500 video_sender_info, outbound_video.get()); 578 video_sender_info, outbound_video.get());
501 if (!transport_id.empty()) 579 outbound_video->transport_id = transport_id;
502 outbound_video->transport_id = transport_id;
503 report->AddStats(std::move(outbound_video)); 580 report->AddStats(std::move(outbound_video));
504 } 581 }
505 } 582 }
506 } 583 }
507 } 584 }
508 585
509 void RTCStatsCollector::ProduceTransportStats_s( 586 void RTCStatsCollector::ProduceTransportStats_s(
510 int64_t timestamp_us, const SessionStats& session_stats, 587 int64_t timestamp_us, const SessionStats& session_stats,
511 const std::map<std::string, CertificateStatsPair>& transport_cert_stats, 588 const std::map<std::string, CertificateStatsPair>& transport_cert_stats,
512 RTCStatsReport* report) const { 589 RTCStatsReport* report) const {
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
602 const std::string& type) { 679 const std::string& type) {
603 return CandidateTypeToRTCIceCandidateType(type); 680 return CandidateTypeToRTCIceCandidateType(type);
604 } 681 }
605 682
606 const char* DataStateToRTCDataChannelStateForTesting( 683 const char* DataStateToRTCDataChannelStateForTesting(
607 DataChannelInterface::DataState state) { 684 DataChannelInterface::DataState state) {
608 return DataStateToRTCDataChannelState(state); 685 return DataStateToRTCDataChannelState(state);
609 } 686 }
610 687
611 } // namespace webrtc 688 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/api/rtcstatscollector.h ('k') | webrtc/api/rtcstatscollector_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698