Chromium Code Reviews| 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 |