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

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

Issue 2456463002: RTCOutboundRTPStreamStats added. (Closed)
Patch Set: Rebase and TODO for target_bitrate 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.cc ('k') | webrtc/api/stats/rtcstats.h » ('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 14 matching lines...) Expand all
25 #include "webrtc/base/fakeclock.h" 25 #include "webrtc/base/fakeclock.h"
26 #include "webrtc/base/fakesslidentity.h" 26 #include "webrtc/base/fakesslidentity.h"
27 #include "webrtc/base/gunit.h" 27 #include "webrtc/base/gunit.h"
28 #include "webrtc/base/logging.h" 28 #include "webrtc/base/logging.h"
29 #include "webrtc/base/socketaddress.h" 29 #include "webrtc/base/socketaddress.h"
30 #include "webrtc/base/thread_checker.h" 30 #include "webrtc/base/thread_checker.h"
31 #include "webrtc/base/timedelta.h" 31 #include "webrtc/base/timedelta.h"
32 #include "webrtc/base/timeutils.h" 32 #include "webrtc/base/timeutils.h"
33 #include "webrtc/logging/rtc_event_log/rtc_event_log.h" 33 #include "webrtc/logging/rtc_event_log/rtc_event_log.h"
34 #include "webrtc/media/base/fakemediaengine.h" 34 #include "webrtc/media/base/fakemediaengine.h"
35 #include "webrtc/media/base/test/mock_mediachannel.h"
35 #include "webrtc/p2p/base/p2pconstants.h" 36 #include "webrtc/p2p/base/p2pconstants.h"
36 #include "webrtc/p2p/base/port.h" 37 #include "webrtc/p2p/base/port.h"
37 38
38 using testing::_; 39 using testing::_;
39 using testing::Invoke; 40 using testing::Invoke;
40 using testing::Return; 41 using testing::Return;
42 using testing::ReturnNull;
41 using testing::ReturnRef; 43 using testing::ReturnRef;
44 using testing::SetArgPointee;
42 45
43 namespace webrtc { 46 namespace webrtc {
44 47
45 // These are used by gtest code, such as if |EXPECT_EQ| fails. 48 // These are used by gtest code, such as if |EXPECT_EQ| fails.
46 void PrintTo(const RTCCertificateStats& stats, ::std::ostream* os) { 49 void PrintTo(const RTCCertificateStats& stats, ::std::ostream* os) {
47 *os << stats.ToString(); 50 *os << stats.ToString();
48 } 51 }
49 52
50 void PrintTo(const RTCDataChannelStats& stats, ::std::ostream* os) { 53 void PrintTo(const RTCDataChannelStats& stats, ::std::ostream* os) {
51 *os << stats.ToString(); 54 *os << stats.ToString();
52 } 55 }
53 56
54 void PrintTo(const RTCIceCandidatePairStats& stats, ::std::ostream* os) { 57 void PrintTo(const RTCIceCandidatePairStats& stats, ::std::ostream* os) {
55 *os << stats.ToString(); 58 *os << stats.ToString();
56 } 59 }
57 60
58 void PrintTo(const RTCLocalIceCandidateStats& stats, ::std::ostream* os) { 61 void PrintTo(const RTCLocalIceCandidateStats& stats, ::std::ostream* os) {
59 *os << stats.ToString(); 62 *os << stats.ToString();
60 } 63 }
61 64
62 void PrintTo(const RTCRemoteIceCandidateStats& stats, ::std::ostream* os) { 65 void PrintTo(const RTCRemoteIceCandidateStats& stats, ::std::ostream* os) {
63 *os << stats.ToString(); 66 *os << stats.ToString();
64 } 67 }
65 68
66 void PrintTo(const RTCPeerConnectionStats& stats, ::std::ostream* os) { 69 void PrintTo(const RTCPeerConnectionStats& stats, ::std::ostream* os) {
67 *os << stats.ToString(); 70 *os << stats.ToString();
68 } 71 }
69 72
73 void PrintTo(const RTCOutboundRTPStreamStats& stats, ::std::ostream* os) {
74 *os << stats.ToString();
75 }
76
70 void PrintTo(const RTCTransportStats& stats, ::std::ostream* os) { 77 void PrintTo(const RTCTransportStats& stats, ::std::ostream* os) {
71 *os << stats.ToString(); 78 *os << stats.ToString();
72 } 79 }
73 80
74 namespace { 81 namespace {
75 82
76 const int64_t kGetStatsReportTimeoutMs = 1000; 83 const int64_t kGetStatsReportTimeoutMs = 1000;
77 84
78 struct CertificateInfo { 85 struct CertificateInfo {
79 rtc::scoped_refptr<rtc::RTCCertificate> certificate; 86 rtc::scoped_refptr<rtc::RTCCertificate> certificate;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 candidate->set_type(candidate_type); 144 candidate->set_type(candidate_type);
138 candidate->set_priority(priority); 145 candidate->set_priority(priority);
139 return candidate; 146 return candidate;
140 } 147 }
141 148
142 class RTCStatsCollectorTestHelper : public SetSessionDescriptionObserver { 149 class RTCStatsCollectorTestHelper : public SetSessionDescriptionObserver {
143 public: 150 public:
144 RTCStatsCollectorTestHelper() 151 RTCStatsCollectorTestHelper()
145 : worker_thread_(rtc::Thread::Current()), 152 : worker_thread_(rtc::Thread::Current()),
146 network_thread_(rtc::Thread::Current()), 153 network_thread_(rtc::Thread::Current()),
154 media_engine_(new cricket::FakeMediaEngine()),
147 channel_manager_( 155 channel_manager_(
148 new cricket::ChannelManager(new cricket::FakeMediaEngine(), 156 new cricket::ChannelManager(media_engine_,
149 worker_thread_, 157 worker_thread_,
150 network_thread_)), 158 network_thread_)),
151 media_controller_( 159 media_controller_(
152 MediaControllerInterface::Create(cricket::MediaConfig(), 160 MediaControllerInterface::Create(cricket::MediaConfig(),
153 worker_thread_, 161 worker_thread_,
154 channel_manager_.get(), 162 channel_manager_.get(),
155 &event_log_)), 163 &event_log_)),
156 session_(media_controller_.get()), 164 session_(media_controller_.get()),
157 pc_() { 165 pc_() {
158 // Default return values for mocks. 166 // Default return values for mocks.
159 EXPECT_CALL(pc_, session()).WillRepeatedly(Return(&session_)); 167 EXPECT_CALL(pc_, session()).WillRepeatedly(Return(&session_));
160 EXPECT_CALL(pc_, sctp_data_channels()).WillRepeatedly( 168 EXPECT_CALL(pc_, sctp_data_channels()).WillRepeatedly(
161 ReturnRef(data_channels_)); 169 ReturnRef(data_channels_));
170 EXPECT_CALL(session_, video_channel()).WillRepeatedly(ReturnNull());
171 EXPECT_CALL(session_, voice_channel()).WillRepeatedly(ReturnNull());
162 EXPECT_CALL(session_, GetTransportStats(_)).WillRepeatedly(Return(false)); 172 EXPECT_CALL(session_, GetTransportStats(_)).WillRepeatedly(Return(false));
163 EXPECT_CALL(session_, GetLocalCertificate(_, _)).WillRepeatedly( 173 EXPECT_CALL(session_, GetLocalCertificate(_, _)).WillRepeatedly(
164 Return(false)); 174 Return(false));
165 EXPECT_CALL(session_, GetRemoteSSLCertificate_ReturnsRawPointer(_)) 175 EXPECT_CALL(session_, GetRemoteSSLCertificate_ReturnsRawPointer(_))
166 .WillRepeatedly(Return(nullptr)); 176 .WillRepeatedly(Return(nullptr));
167 } 177 }
168 178
169 rtc::ScopedFakeClock& fake_clock() { return fake_clock_; } 179 rtc::ScopedFakeClock& fake_clock() { return fake_clock_; }
180 rtc::Thread* worker_thread() { return worker_thread_; }
181 rtc::Thread* network_thread() { return network_thread_; }
182 cricket::FakeMediaEngine* media_engine() { return media_engine_; }
170 MockWebRtcSession& session() { return session_; } 183 MockWebRtcSession& session() { return session_; }
171 MockPeerConnection& pc() { return pc_; } 184 MockPeerConnection& pc() { return pc_; }
172 std::vector<rtc::scoped_refptr<DataChannel>>& data_channels() { 185 std::vector<rtc::scoped_refptr<DataChannel>>& data_channels() {
173 return data_channels_; 186 return data_channels_;
174 } 187 }
175 188
176 // SetSessionDescriptionObserver overrides. 189 // SetSessionDescriptionObserver overrides.
177 void OnSuccess() override {} 190 void OnSuccess() override {}
178 void OnFailure(const std::string& error) override { 191 void OnFailure(const std::string& error) override {
179 RTC_NOTREACHED() << error; 192 RTC_NOTREACHED() << error;
180 } 193 }
181 194
182 private: 195 private:
183 rtc::ScopedFakeClock fake_clock_; 196 rtc::ScopedFakeClock fake_clock_;
184 webrtc::RtcEventLogNullImpl event_log_; 197 webrtc::RtcEventLogNullImpl event_log_;
185 rtc::Thread* const worker_thread_; 198 rtc::Thread* const worker_thread_;
186 rtc::Thread* const network_thread_; 199 rtc::Thread* const network_thread_;
200 cricket::FakeMediaEngine* media_engine_;
187 std::unique_ptr<cricket::ChannelManager> channel_manager_; 201 std::unique_ptr<cricket::ChannelManager> channel_manager_;
188 std::unique_ptr<webrtc::MediaControllerInterface> media_controller_; 202 std::unique_ptr<webrtc::MediaControllerInterface> media_controller_;
189 MockWebRtcSession session_; 203 MockWebRtcSession session_;
190 MockPeerConnection pc_; 204 MockPeerConnection pc_;
191 205
192 std::vector<rtc::scoped_refptr<DataChannel>> data_channels_; 206 std::vector<rtc::scoped_refptr<DataChannel>> data_channels_;
193 }; 207 };
194 208
195 class RTCTestStats : public RTCStats { 209 class RTCTestStats : public RTCStats {
196 public: 210 public:
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 278
265 void ProducePartialResultsOnSignalingThread(int64_t timestamp_us) override { 279 void ProducePartialResultsOnSignalingThread(int64_t timestamp_us) override {
266 EXPECT_TRUE(signaling_thread_->IsCurrent()); 280 EXPECT_TRUE(signaling_thread_->IsCurrent());
267 { 281 {
268 rtc::CritScope cs(&lock_); 282 rtc::CritScope cs(&lock_);
269 EXPECT_FALSE(delivered_report_); 283 EXPECT_FALSE(delivered_report_);
270 ++produced_on_signaling_thread_; 284 ++produced_on_signaling_thread_;
271 } 285 }
272 286
273 rtc::scoped_refptr<RTCStatsReport> signaling_report = 287 rtc::scoped_refptr<RTCStatsReport> signaling_report =
274 RTCStatsReport::Create(); 288 RTCStatsReport::Create(0);
275 signaling_report->AddStats(std::unique_ptr<const RTCStats>( 289 signaling_report->AddStats(std::unique_ptr<const RTCStats>(
276 new RTCTestStats("SignalingThreadStats", timestamp_us))); 290 new RTCTestStats("SignalingThreadStats", timestamp_us)));
277 AddPartialResults(signaling_report); 291 AddPartialResults(signaling_report);
278 } 292 }
279 void ProducePartialResultsOnWorkerThread(int64_t timestamp_us) override { 293 void ProducePartialResultsOnWorkerThread(int64_t timestamp_us) override {
280 EXPECT_TRUE(worker_thread_->IsCurrent()); 294 EXPECT_TRUE(worker_thread_->IsCurrent());
281 { 295 {
282 rtc::CritScope cs(&lock_); 296 rtc::CritScope cs(&lock_);
283 EXPECT_FALSE(delivered_report_); 297 EXPECT_FALSE(delivered_report_);
284 ++produced_on_worker_thread_; 298 ++produced_on_worker_thread_;
285 } 299 }
286 300
287 rtc::scoped_refptr<RTCStatsReport> worker_report = RTCStatsReport::Create(); 301 rtc::scoped_refptr<RTCStatsReport> worker_report =
302 RTCStatsReport::Create(0);
288 worker_report->AddStats(std::unique_ptr<const RTCStats>( 303 worker_report->AddStats(std::unique_ptr<const RTCStats>(
289 new RTCTestStats("WorkerThreadStats", timestamp_us))); 304 new RTCTestStats("WorkerThreadStats", timestamp_us)));
290 AddPartialResults(worker_report); 305 AddPartialResults(worker_report);
291 } 306 }
292 void ProducePartialResultsOnNetworkThread(int64_t timestamp_us) override { 307 void ProducePartialResultsOnNetworkThread(int64_t timestamp_us) override {
293 EXPECT_TRUE(network_thread_->IsCurrent()); 308 EXPECT_TRUE(network_thread_->IsCurrent());
294 { 309 {
295 rtc::CritScope cs(&lock_); 310 rtc::CritScope cs(&lock_);
296 EXPECT_FALSE(delivered_report_); 311 EXPECT_FALSE(delivered_report_);
297 ++produced_on_network_thread_; 312 ++produced_on_network_thread_;
298 } 313 }
299 314
300 rtc::scoped_refptr<RTCStatsReport> network_report = 315 rtc::scoped_refptr<RTCStatsReport> network_report =
301 RTCStatsReport::Create(); 316 RTCStatsReport::Create(0);
302 network_report->AddStats(std::unique_ptr<const RTCStats>( 317 network_report->AddStats(std::unique_ptr<const RTCStats>(
303 new RTCTestStats("NetworkThreadStats", timestamp_us))); 318 new RTCTestStats("NetworkThreadStats", timestamp_us)));
304 AddPartialResults(network_report); 319 AddPartialResults(network_report);
305 } 320 }
306 321
307 private: 322 private:
308 rtc::Thread* const signaling_thread_; 323 rtc::Thread* const signaling_thread_;
309 rtc::Thread* const worker_thread_; 324 rtc::Thread* const worker_thread_;
310 rtc::Thread* const network_thread_; 325 rtc::Thread* const network_thread_;
311 326
(...skipping 641 matching lines...) Expand 10 before | Expand all | Expand 10 after
953 // channels that have been opened and closed, not the numbers currently 968 // channels that have been opened and closed, not the numbers currently
954 // open/closed, we would expect opened >= closed and (opened - closed) to be 969 // open/closed, we would expect opened >= closed and (opened - closed) to be
955 // the number currently open. crbug.com/636818. 970 // the number currently open. crbug.com/636818.
956 const RTCPeerConnectionStats& pcstats = 971 const RTCPeerConnectionStats& pcstats =
957 stats->cast_to<RTCPeerConnectionStats>(); 972 stats->cast_to<RTCPeerConnectionStats>();
958 EXPECT_EQ(*pcstats.data_channels_opened, static_cast<uint32_t>(1)); 973 EXPECT_EQ(*pcstats.data_channels_opened, static_cast<uint32_t>(1));
959 EXPECT_EQ(*pcstats.data_channels_closed, static_cast<uint32_t>(3)); 974 EXPECT_EQ(*pcstats.data_channels_closed, static_cast<uint32_t>(3));
960 } 975 }
961 } 976 }
962 977
978 TEST_F(RTCStatsCollectorTest, CollectRTCOutboundRTPStreamStats_Audio) {
979 MockVoiceMediaChannel* voice_media_channel = new MockVoiceMediaChannel();
980 cricket::VoiceChannel voice_channel(
981 test_->worker_thread(), test_->network_thread(), test_->media_engine(),
982 voice_media_channel, nullptr, "VoiceContentName", false);
983
984 cricket::VoiceMediaInfo voice_media_info;
985 voice_media_info.senders.push_back(cricket::VoiceSenderInfo());
986 voice_media_info.senders[0].local_stats.push_back(cricket::SsrcSenderInfo());
987 voice_media_info.senders[0].local_stats[0].ssrc = 1;
988 voice_media_info.senders[0].packets_sent = 2;
989 voice_media_info.senders[0].bytes_sent = 3;
990 voice_media_info.senders[0].rtt_ms = 4500.0;
991 EXPECT_CALL(*voice_media_channel, GetStats(_))
992 .WillOnce(DoAll(SetArgPointee<0>(voice_media_info), Return(true)));
993
994 SessionStats session_stats;
995 session_stats.proxy_to_transport["VoiceContentName"] = "TransportName";
996 session_stats.transport_stats["TransportName"].transport_name =
997 "TransportName";
998
999 // Make sure the associated |RTCTransportStats| is created.
1000 cricket::TransportChannelStats channel_stats;
1001 channel_stats.component = cricket::ICE_CANDIDATE_COMPONENT_RTP;
1002 cricket::ConnectionInfo connection_info;
1003 connection_info.local_candidate = *CreateFakeCandidate(
1004 "42.42.42.42", 42, "protocol", cricket::LOCAL_PORT_TYPE, 42).get();
1005 connection_info.remote_candidate = *CreateFakeCandidate(
1006 "42.42.42.42", 42, "protocol", cricket::LOCAL_PORT_TYPE, 42).get();
1007 channel_stats.connection_infos.push_back(connection_info);
1008 session_stats.transport_stats["TransportName"].channel_stats.push_back(
1009 channel_stats);
1010
1011 EXPECT_CALL(test_->session(), GetTransportStats(_))
1012 .WillRepeatedly(DoAll(SetArgPointee<0>(session_stats), Return(true)));
1013 EXPECT_CALL(test_->session(), voice_channel())
1014 .WillRepeatedly(Return(&voice_channel));
1015
1016 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport();
1017
1018 RTCOutboundRTPStreamStats expected_audio(
1019 "RTCOutboundRTPAudioStream_1", report->timestamp_us());
1020 expected_audio.ssrc = "1";
1021 expected_audio.is_remote = false;
1022 expected_audio.media_type = "audio";
1023 expected_audio.transport_id = "RTCTransport_TransportName_" +
1024 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP);
1025 expected_audio.packets_sent = 2;
1026 expected_audio.bytes_sent = 3;
1027 expected_audio.round_trip_time = 4.5;
1028
1029 ASSERT(report->Get(expected_audio.id()));
1030 const RTCOutboundRTPStreamStats& audio = report->Get(
1031 expected_audio.id())->cast_to<RTCOutboundRTPStreamStats>();
1032 EXPECT_EQ(audio, expected_audio);
1033
1034 EXPECT_TRUE(report->Get(*expected_audio.transport_id));
1035 }
1036
1037 TEST_F(RTCStatsCollectorTest, CollectRTCOutboundRTPStreamStats_Video) {
1038 MockVideoMediaChannel* video_media_channel = new MockVideoMediaChannel();
1039 cricket::VideoChannel video_channel(
1040 test_->worker_thread(), test_->network_thread(), video_media_channel,
1041 nullptr, "VideoContentName", false);
1042
1043 cricket::VideoMediaInfo video_media_info;
1044 video_media_info.senders.push_back(cricket::VideoSenderInfo());
1045 video_media_info.senders[0].local_stats.push_back(cricket::SsrcSenderInfo());
1046 video_media_info.senders[0].local_stats[0].ssrc = 1;
1047 video_media_info.senders[0].firs_rcvd = 2;
1048 video_media_info.senders[0].plis_rcvd = 3;
1049 video_media_info.senders[0].nacks_rcvd = 4;
1050 video_media_info.senders[0].packets_sent = 5;
1051 video_media_info.senders[0].bytes_sent = 6;
1052 video_media_info.senders[0].rtt_ms = 7500.0;
1053 EXPECT_CALL(*video_media_channel, GetStats(_))
1054 .WillOnce(DoAll(SetArgPointee<0>(video_media_info), Return(true)));
1055
1056 SessionStats session_stats;
1057 session_stats.proxy_to_transport["VideoContentName"] = "TransportName";
1058 session_stats.transport_stats["TransportName"].transport_name =
1059 "TransportName";
1060
1061 // Make sure the associated |RTCTransportStats| is created.
1062 cricket::TransportChannelStats channel_stats;
1063 channel_stats.component = cricket::ICE_CANDIDATE_COMPONENT_RTP;
1064 cricket::ConnectionInfo connection_info;
1065 connection_info.local_candidate = *CreateFakeCandidate(
1066 "42.42.42.42", 42, "protocol", cricket::LOCAL_PORT_TYPE, 42).get();
1067 connection_info.remote_candidate = *CreateFakeCandidate(
1068 "42.42.42.42", 42, "protocol", cricket::LOCAL_PORT_TYPE, 42).get();
1069 channel_stats.connection_infos.push_back(connection_info);
1070 session_stats.transport_stats["TransportName"].channel_stats.push_back(
1071 channel_stats);
1072
1073 EXPECT_CALL(test_->session(), GetTransportStats(_))
1074 .WillRepeatedly(DoAll(SetArgPointee<0>(session_stats), Return(true)));
1075 EXPECT_CALL(test_->session(), video_channel())
1076 .WillRepeatedly(Return(&video_channel));
1077
1078 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport();
1079
1080 RTCOutboundRTPStreamStats expected_video(
1081 "RTCOutboundRTPVideoStream_1", report->timestamp_us());
1082 expected_video.ssrc = "1";
1083 expected_video.is_remote = false;
1084 expected_video.media_type = "video";
1085 expected_video.transport_id = "RTCTransport_TransportName_" +
1086 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP);
1087 expected_video.fir_count = 2;
1088 expected_video.pli_count = 3;
1089 expected_video.nack_count = 4;
1090 expected_video.packets_sent = 5;
1091 expected_video.bytes_sent = 6;
1092 expected_video.round_trip_time = 7.5;
1093
1094 ASSERT(report->Get(expected_video.id()));
1095 const RTCOutboundRTPStreamStats& video = report->Get(
1096 expected_video.id())->cast_to<RTCOutboundRTPStreamStats>();
1097 EXPECT_EQ(video, expected_video);
1098
1099 EXPECT_TRUE(report->Get(*expected_video.transport_id));
1100 }
1101
963 TEST_F(RTCStatsCollectorTest, CollectRTCTransportStats) { 1102 TEST_F(RTCStatsCollectorTest, CollectRTCTransportStats) {
964 std::unique_ptr<cricket::Candidate> rtp_local_candidate = CreateFakeCandidate( 1103 std::unique_ptr<cricket::Candidate> rtp_local_candidate = CreateFakeCandidate(
965 "42.42.42.42", 42, "protocol", cricket::LOCAL_PORT_TYPE, 42); 1104 "42.42.42.42", 42, "protocol", cricket::LOCAL_PORT_TYPE, 42);
966 std::unique_ptr<cricket::Candidate> rtp_remote_candidate = 1105 std::unique_ptr<cricket::Candidate> rtp_remote_candidate =
967 CreateFakeCandidate("42.42.42.42", 42, "protocol", 1106 CreateFakeCandidate("42.42.42.42", 42, "protocol",
968 cricket::LOCAL_PORT_TYPE, 42); 1107 cricket::LOCAL_PORT_TYPE, 42);
969 std::unique_ptr<cricket::Candidate> rtcp_local_candidate = 1108 std::unique_ptr<cricket::Candidate> rtcp_local_candidate =
970 CreateFakeCandidate("42.42.42.42", 42, "protocol", 1109 CreateFakeCandidate("42.42.42.42", 42, "protocol",
971 cricket::LOCAL_PORT_TYPE, 42); 1110 cricket::LOCAL_PORT_TYPE, 42);
972 std::unique_ptr<cricket::Candidate> rtcp_remote_candidate = 1111 std::unique_ptr<cricket::Candidate> rtcp_remote_candidate =
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
1072 rtc::scoped_refptr<FakeRTCStatsCollector> collector_; 1211 rtc::scoped_refptr<FakeRTCStatsCollector> collector_;
1073 }; 1212 };
1074 1213
1075 TEST_F(RTCStatsCollectorTestWithFakeCollector, ThreadUsageAndResultsMerging) { 1214 TEST_F(RTCStatsCollectorTestWithFakeCollector, ThreadUsageAndResultsMerging) {
1076 collector_->VerifyThreadUsageAndResultsMerging(); 1215 collector_->VerifyThreadUsageAndResultsMerging();
1077 } 1216 }
1078 1217
1079 } // namespace 1218 } // namespace
1080 1219
1081 } // namespace webrtc 1220 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/api/rtcstatscollector.cc ('k') | webrtc/api/stats/rtcstats.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698