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

Unified Diff: webrtc/api/rtcstatscollector.cc

Issue 2420473002: RTCDataChannelStats added. (Closed)
Patch Set: ForTesting Created 4 years, 2 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698