Index: webrtc/api/rtcstatscollector.cc |
diff --git a/webrtc/api/rtcstatscollector.cc b/webrtc/api/rtcstatscollector.cc |
index 5f60ea13cecadb7defc5169701e06a2d7308dc26..db5a4e6664806fbd869997480bdb2b2ef06fc95f 100644 |
--- a/webrtc/api/rtcstatscollector.cc |
+++ b/webrtc/api/rtcstatscollector.cc |
@@ -23,6 +23,8 @@ |
namespace webrtc { |
+namespace { |
+ |
const char* CandidateTypeToRTCIceCandidateType(const std::string& type) { |
if (type == cricket::LOCAL_PORT_TYPE) |
return RTCIceCandidateType::kHost; |
@@ -36,6 +38,25 @@ const char* CandidateTypeToRTCIceCandidateType(const std::string& type) { |
return nullptr; |
} |
+const char* DataStateToRTCDataChannelState( |
+ DataChannelInterface::DataState state) { |
+ switch (state) { |
+ case DataChannelInterface::kConnecting: |
+ return RTCDataChannelState::kConnecting; |
+ case DataChannelInterface::kOpen: |
+ return RTCDataChannelState::kOpen; |
+ case DataChannelInterface::kClosing: |
+ return RTCDataChannelState::kClosing; |
+ case DataChannelInterface::kClosed: |
+ return RTCDataChannelState::kClosed; |
+ default: |
+ RTC_NOTREACHED(); |
+ return nullptr; |
+ } |
+} |
+ |
+} // namespace |
+ |
rtc::scoped_refptr<RTCStatsCollector> RTCStatsCollector::Create( |
PeerConnection* pc, int64_t cache_lifetime_us) { |
return rtc::scoped_refptr<RTCStatsCollector>( |
@@ -111,6 +132,7 @@ void RTCStatsCollector::ProducePartialResultsOnSignalingThread( |
ProduceIceCandidateAndPairStats_s(timestamp_us, session_stats, |
report.get()); |
} |
+ ProduceDataChannelStats_s(timestamp_us, report.get()); |
ProducePeerConnectionStats_s(timestamp_us, report.get()); |
AddPartialResults(report); |
@@ -218,6 +240,29 @@ void RTCStatsCollector::ProduceCertificateStatsFromSSLCertificateAndChain_s( |
} |
} |
+void RTCStatsCollector::ProduceDataChannelStats_s( |
+ int64_t timestamp_us, RTCStatsReport* report) const { |
+ RTC_DCHECK(signaling_thread_->IsCurrent()); |
+ const std::vector<rtc::scoped_refptr<DataChannel>>& data_channels = |
Taylor Brandstetter
2016/10/18 17:28:11
nit: Don't need this temporary variable, could jus
hbos
2016/10/18 19:13:37
Done.
|
+ pc_->sctp_data_channels(); |
+ for (const rtc::scoped_refptr<DataChannel>& data_channel : data_channels) { |
+ std::unique_ptr<RTCDataChannelStats> data_channel_stats( |
+ new RTCDataChannelStats( |
+ "RTCDataChannel_" + rtc::ToString<>(data_channel->id()), |
+ timestamp_us)); |
+ data_channel_stats->label = data_channel->label(); |
+ data_channel_stats->protocol = data_channel->protocol(); |
+ data_channel_stats->datachannelid = data_channel->id(); |
+ data_channel_stats->state = |
+ DataStateToRTCDataChannelState(data_channel->state()); |
+ data_channel_stats->messages_sent = data_channel->messages_sent(); |
+ data_channel_stats->bytes_sent = data_channel->bytes_sent(); |
+ data_channel_stats->messages_received = data_channel->messages_received(); |
+ data_channel_stats->bytes_received = data_channel->bytes_received(); |
+ report->AddStats(std::move(data_channel_stats)); |
+ } |
+} |
+ |
void RTCStatsCollector::ProduceIceCandidateAndPairStats_s( |
int64_t timestamp_us, const SessionStats& session_stats, |
RTCStatsReport* report) const { |
@@ -337,4 +382,14 @@ void RTCStatsCollector::ProducePeerConnectionStats_s( |
report->AddStats(std::move(stats)); |
} |
+const char* CandidateTypeToRTCIceCandidateTypeForTesting( |
+ const std::string& type) { |
+ return CandidateTypeToRTCIceCandidateType(type); |
+} |
+ |
+const char* DataStateToRTCDataChannelStateForTesting( |
+ DataChannelInterface::DataState state) { |
+ return DataStateToRTCDataChannelState(state); |
+} |
+ |
} // namespace webrtc |