Chromium Code Reviews| Index: webrtc/api/rtcstatscollector.h |
| diff --git a/webrtc/api/rtcstatscollector.h b/webrtc/api/rtcstatscollector.h |
| index 2c160ee414025ccfb0e9e936a1b7c88c3e4d5e04..bca258ae8c3051725322592d413dcfe9b7d15c90 100644 |
| --- a/webrtc/api/rtcstatscollector.h |
| +++ b/webrtc/api/rtcstatscollector.h |
| @@ -13,14 +13,17 @@ |
| #include <map> |
| #include <memory> |
| +#include <set> |
| #include <vector> |
| +#include "webrtc/api/datachannel.h" |
| #include "webrtc/api/datachannelinterface.h" |
| #include "webrtc/api/stats/rtcstats_objects.h" |
| #include "webrtc/api/stats/rtcstatsreport.h" |
| #include "webrtc/base/asyncinvoker.h" |
| #include "webrtc/base/refcount.h" |
| #include "webrtc/base/scoped_ref_ptr.h" |
| +#include "webrtc/base/sigslot.h" |
| #include "webrtc/base/sslidentity.h" |
| #include "webrtc/base/timeutils.h" |
| @@ -49,7 +52,8 @@ class RTCStatsCollectorCallback : public virtual rtc::RefCountInterface { |
| // Stats are gathered on the signaling, worker and network threads |
| // asynchronously. The callback is invoked on the signaling thread. Resulting |
| // reports are cached for |cache_lifetime_| ms. |
| -class RTCStatsCollector : public virtual rtc::RefCountInterface { |
| +class RTCStatsCollector : public virtual rtc::RefCountInterface, |
| + public sigslot::has_slots<> { |
| public: |
| static rtc::scoped_refptr<RTCStatsCollector> Create( |
| PeerConnection* pc, |
| @@ -64,6 +68,10 @@ class RTCStatsCollector : public virtual rtc::RefCountInterface { |
| // calling |GetStatsReport| guarantees fresh stats. |
| void ClearCachedStatsReport(); |
| + // Exposed for testing only. |
| + void OnDataChannelOpenedForTesting(DataChannel* channel); |
| + void OnDataChannelClosedForTesting(DataChannel* channel); |
| + |
| protected: |
| RTCStatsCollector(PeerConnection* pc, int64_t cache_lifetime_us); |
| @@ -78,6 +86,9 @@ class RTCStatsCollector : public virtual rtc::RefCountInterface { |
| const rtc::scoped_refptr<RTCStatsReport>& partial_report); |
| private: |
| + // To allow |pc_| to wire up RTCStatsCollector::OnBlahBlah signal slots. |
| + friend class PeerConnection; |
| + |
| struct CertificateStatsPair { |
| std::unique_ptr<rtc::SSLCertificateStats> local; |
| std::unique_ptr<rtc::SSLCertificateStats> remote; |
| @@ -115,6 +126,10 @@ class RTCStatsCollector : public virtual rtc::RefCountInterface { |
| std::map<std::string, CertificateStatsPair> |
| PrepareTransportCertificateStats_s(const SessionStats& session_stats) const; |
| + // Slots for signals (sigslot). |
| + void OnDataChannelOpened(DataChannel* channel); |
| + void OnDataChannelClosed(DataChannel* channel); |
| + |
| PeerConnection* const pc_; |
| rtc::Thread* const signaling_thread_; |
| rtc::Thread* const worker_thread_; |
| @@ -133,6 +148,16 @@ class RTCStatsCollector : public virtual rtc::RefCountInterface { |
| int64_t cache_timestamp_us_; |
| int64_t cache_lifetime_us_; |
| rtc::scoped_refptr<const RTCStatsReport> cached_report_; |
| + |
| + // The opened count goes up when a channel is fully opened and the closed |
| + // count goes up if a previously opened channel has fully closed. The opened |
| + // count does not go down when a channel closes, meaning (opened - closed) is |
| + // the number of channels currently opened. A channel that is closed before |
| + // reaching the open state does not affect these counters. |
| + uint32_t data_channels_opened_; |
| + uint32_t data_channels_closed_; |
|
hta-webrtc
2016/11/03 13:49:58
This is actually the beginning of a new path in st
hbos
2016/11/03 15:02:02
Created struct InternalRecord and added a comment.
|
| + // Channels that have been opened, they remain in the set until fully closed. |
| + std::set<DataChannel*> opened_data_channels_; |
|
hta-webrtc
2016/11/03 13:49:58
Do we actually need this? I'd suggest not retainin
hbos
2016/11/03 15:02:02
Changed to std::set<uintptr_t>
|
| }; |
| const char* CandidateTypeToRTCIceCandidateTypeForTesting( |