OLD | NEW |
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 |
11 #include "webrtc/api/rtcstatscollector.h" | 11 #include "webrtc/api/rtcstatscollector.h" |
12 | 12 |
13 #include <memory> | 13 #include <memory> |
14 #include <ostream> | 14 #include <ostream> |
15 #include <string> | 15 #include <string> |
16 #include <vector> | 16 #include <vector> |
17 | 17 |
| 18 #include "webrtc/api/mediastream.h" |
| 19 #include "webrtc/api/mediastreamtrack.h" |
18 #include "webrtc/api/jsepsessiondescription.h" | 20 #include "webrtc/api/jsepsessiondescription.h" |
19 #include "webrtc/api/stats/rtcstats_objects.h" | 21 #include "webrtc/api/stats/rtcstats_objects.h" |
20 #include "webrtc/api/stats/rtcstatsreport.h" | 22 #include "webrtc/api/stats/rtcstatsreport.h" |
21 #include "webrtc/api/test/mock_datachannel.h" | 23 #include "webrtc/api/test/mock_datachannel.h" |
22 #include "webrtc/api/test/mock_peerconnection.h" | 24 #include "webrtc/api/test/mock_peerconnection.h" |
23 #include "webrtc/api/test/mock_webrtcsession.h" | 25 #include "webrtc/api/test/mock_webrtcsession.h" |
24 #include "webrtc/base/checks.h" | 26 #include "webrtc/base/checks.h" |
25 #include "webrtc/base/fakeclock.h" | 27 #include "webrtc/base/fakeclock.h" |
26 #include "webrtc/base/fakesslidentity.h" | 28 #include "webrtc/base/fakesslidentity.h" |
27 #include "webrtc/base/gunit.h" | 29 #include "webrtc/base/gunit.h" |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 } | 65 } |
64 | 66 |
65 void PrintTo(const RTCRemoteIceCandidateStats& stats, ::std::ostream* os) { | 67 void PrintTo(const RTCRemoteIceCandidateStats& stats, ::std::ostream* os) { |
66 *os << stats.ToString(); | 68 *os << stats.ToString(); |
67 } | 69 } |
68 | 70 |
69 void PrintTo(const RTCPeerConnectionStats& stats, ::std::ostream* os) { | 71 void PrintTo(const RTCPeerConnectionStats& stats, ::std::ostream* os) { |
70 *os << stats.ToString(); | 72 *os << stats.ToString(); |
71 } | 73 } |
72 | 74 |
| 75 void PrintTo(const RTCMediaStreamStats& stats, ::std::ostream* os) { |
| 76 *os << stats.ToString(); |
| 77 } |
| 78 |
| 79 void PrintTo(const RTCMediaStreamTrackStats& stats, ::std::ostream* os) { |
| 80 *os << stats.ToString(); |
| 81 } |
| 82 |
73 void PrintTo(const RTCInboundRTPStreamStats& stats, ::std::ostream* os) { | 83 void PrintTo(const RTCInboundRTPStreamStats& stats, ::std::ostream* os) { |
74 *os << stats.ToString(); | 84 *os << stats.ToString(); |
75 } | 85 } |
76 | 86 |
77 void PrintTo(const RTCOutboundRTPStreamStats& stats, ::std::ostream* os) { | 87 void PrintTo(const RTCOutboundRTPStreamStats& stats, ::std::ostream* os) { |
78 *os << stats.ToString(); | 88 *os << stats.ToString(); |
79 } | 89 } |
80 | 90 |
81 void PrintTo(const RTCTransportStats& stats, ::std::ostream* os) { | 91 void PrintTo(const RTCTransportStats& stats, ::std::ostream* os) { |
82 *os << stats.ToString(); | 92 *os << stats.ToString(); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
143 const std::string& candidate_type, | 153 const std::string& candidate_type, |
144 uint32_t priority) { | 154 uint32_t priority) { |
145 std::unique_ptr<cricket::Candidate> candidate(new cricket::Candidate()); | 155 std::unique_ptr<cricket::Candidate> candidate(new cricket::Candidate()); |
146 candidate->set_address(rtc::SocketAddress(hostname, port)); | 156 candidate->set_address(rtc::SocketAddress(hostname, port)); |
147 candidate->set_protocol(protocol); | 157 candidate->set_protocol(protocol); |
148 candidate->set_type(candidate_type); | 158 candidate->set_type(candidate_type); |
149 candidate->set_priority(priority); | 159 candidate->set_priority(priority); |
150 return candidate; | 160 return candidate; |
151 } | 161 } |
152 | 162 |
| 163 class FakeAudioProcessorForStats : public AudioProcessorInterface { |
| 164 public: |
| 165 static rtc::scoped_refptr<FakeAudioProcessorForStats> Create( |
| 166 AudioProcessorInterface::AudioProcessorStats stats) { |
| 167 return rtc::scoped_refptr<FakeAudioProcessorForStats>( |
| 168 new rtc::RefCountedObject<FakeAudioProcessorForStats>(stats)); |
| 169 } |
| 170 |
| 171 FakeAudioProcessorForStats( |
| 172 AudioProcessorInterface::AudioProcessorStats stats) |
| 173 : stats_(stats) { |
| 174 } |
| 175 |
| 176 void GetStats(AudioProcessorInterface::AudioProcessorStats* stats) override { |
| 177 *stats = stats_; |
| 178 } |
| 179 |
| 180 private: |
| 181 AudioProcessorInterface::AudioProcessorStats stats_; |
| 182 }; |
| 183 |
| 184 class FakeAudioTrackForStats |
| 185 : public MediaStreamTrack<AudioTrackInterface> { |
| 186 public: |
| 187 static rtc::scoped_refptr<FakeAudioTrackForStats> Create( |
| 188 const std::string& id, |
| 189 MediaStreamTrackInterface::TrackState state, |
| 190 int signal_level, |
| 191 rtc::scoped_refptr<FakeAudioProcessorForStats> processor) { |
| 192 rtc::scoped_refptr<FakeAudioTrackForStats> audio_track_stats( |
| 193 new rtc::RefCountedObject<FakeAudioTrackForStats>( |
| 194 id, signal_level, processor)); |
| 195 audio_track_stats->set_state(state); |
| 196 return audio_track_stats; |
| 197 } |
| 198 |
| 199 FakeAudioTrackForStats( |
| 200 const std::string& id, |
| 201 int signal_level, |
| 202 rtc::scoped_refptr<FakeAudioProcessorForStats> processor) |
| 203 : MediaStreamTrack<AudioTrackInterface>(id), |
| 204 signal_level_(signal_level), |
| 205 processor_(processor) { |
| 206 } |
| 207 |
| 208 std::string kind() const override { |
| 209 return MediaStreamTrackInterface::kAudioKind; |
| 210 } |
| 211 webrtc::AudioSourceInterface* GetSource() const override { return nullptr; } |
| 212 void AddSink(webrtc::AudioTrackSinkInterface* sink) override {} |
| 213 void RemoveSink(webrtc::AudioTrackSinkInterface* sink) override {} |
| 214 bool GetSignalLevel(int* level) override { |
| 215 *level = signal_level_; |
| 216 return true; |
| 217 } |
| 218 rtc::scoped_refptr<AudioProcessorInterface> GetAudioProcessor() override { |
| 219 return processor_; |
| 220 } |
| 221 |
| 222 private: |
| 223 int signal_level_; |
| 224 rtc::scoped_refptr<FakeAudioProcessorForStats> processor_; |
| 225 }; |
| 226 |
| 227 class FakeVideoTrackSourceForStats : public VideoTrackSourceInterface { |
| 228 public: |
| 229 static rtc::scoped_refptr<FakeVideoTrackSourceForStats> Create( |
| 230 VideoTrackSourceInterface::Stats stats) { |
| 231 return rtc::scoped_refptr<FakeVideoTrackSourceForStats>( |
| 232 new rtc::RefCountedObject<FakeVideoTrackSourceForStats>(stats)); |
| 233 } |
| 234 |
| 235 FakeVideoTrackSourceForStats(VideoTrackSourceInterface::Stats stats) |
| 236 : stats_(stats) { |
| 237 } |
| 238 |
| 239 MediaSourceInterface::SourceState state() const override { |
| 240 return MediaSourceInterface::kLive; |
| 241 } |
| 242 bool remote() const override { return false; } |
| 243 void RegisterObserver(ObserverInterface* observer) override {} |
| 244 void UnregisterObserver(ObserverInterface* observer) override {} |
| 245 void AddOrUpdateSink(rtc::VideoSinkInterface<cricket::VideoFrame>* sink, |
| 246 const rtc::VideoSinkWants& wants) override {} |
| 247 void RemoveSink(rtc::VideoSinkInterface<cricket::VideoFrame>* sink) override { |
| 248 } |
| 249 bool is_screencast() const override { return false; } |
| 250 rtc::Optional<bool> needs_denoising() const override { |
| 251 return rtc::Optional<bool>(); |
| 252 } |
| 253 bool GetStats(VideoTrackSourceInterface::Stats* stats) override { |
| 254 *stats = stats_; |
| 255 return true; |
| 256 } |
| 257 |
| 258 private: |
| 259 VideoTrackSourceInterface::Stats stats_; |
| 260 }; |
| 261 |
| 262 class FakeVideoTrackForStats |
| 263 : public MediaStreamTrack<VideoTrackInterface> { |
| 264 public: |
| 265 static rtc::scoped_refptr<FakeVideoTrackForStats> Create( |
| 266 const std::string& id, |
| 267 MediaStreamTrackInterface::TrackState state, |
| 268 rtc::scoped_refptr<VideoTrackSourceInterface> source) { |
| 269 rtc::scoped_refptr<FakeVideoTrackForStats> video_track( |
| 270 new rtc::RefCountedObject<FakeVideoTrackForStats>(id, source)); |
| 271 video_track->set_state(state); |
| 272 return video_track; |
| 273 } |
| 274 |
| 275 FakeVideoTrackForStats( |
| 276 const std::string& id, |
| 277 rtc::scoped_refptr<VideoTrackSourceInterface> source) |
| 278 : MediaStreamTrack<VideoTrackInterface>(id), |
| 279 source_(source) { |
| 280 } |
| 281 |
| 282 std::string kind() const override { |
| 283 return MediaStreamTrackInterface::kVideoKind; |
| 284 } |
| 285 VideoTrackSourceInterface* GetSource() const override { |
| 286 return source_; |
| 287 } |
| 288 |
| 289 private: |
| 290 rtc::scoped_refptr<VideoTrackSourceInterface> source_; |
| 291 }; |
| 292 |
153 class RTCStatsCollectorTestHelper : public SetSessionDescriptionObserver { | 293 class RTCStatsCollectorTestHelper : public SetSessionDescriptionObserver { |
154 public: | 294 public: |
155 RTCStatsCollectorTestHelper() | 295 RTCStatsCollectorTestHelper() |
156 : worker_thread_(rtc::Thread::Current()), | 296 : worker_thread_(rtc::Thread::Current()), |
157 network_thread_(rtc::Thread::Current()), | 297 network_thread_(rtc::Thread::Current()), |
158 media_engine_(new cricket::FakeMediaEngine()), | 298 media_engine_(new cricket::FakeMediaEngine()), |
159 channel_manager_( | 299 channel_manager_( |
160 new cricket::ChannelManager(media_engine_, | 300 new cricket::ChannelManager(media_engine_, |
161 worker_thread_, | 301 worker_thread_, |
162 network_thread_)), | 302 network_thread_)), |
163 media_controller_( | 303 media_controller_( |
164 MediaControllerInterface::Create(cricket::MediaConfig(), | 304 MediaControllerInterface::Create(cricket::MediaConfig(), |
165 worker_thread_, | 305 worker_thread_, |
166 channel_manager_.get(), | 306 channel_manager_.get(), |
167 &event_log_)), | 307 &event_log_)), |
168 session_(media_controller_.get()), | 308 session_(media_controller_.get()), |
169 pc_() { | 309 pc_() { |
170 // Default return values for mocks. | 310 // Default return values for mocks. |
| 311 EXPECT_CALL(pc_, local_streams()).WillRepeatedly(Return(nullptr)); |
| 312 EXPECT_CALL(pc_, remote_streams()).WillRepeatedly(Return(nullptr)); |
171 EXPECT_CALL(pc_, session()).WillRepeatedly(Return(&session_)); | 313 EXPECT_CALL(pc_, session()).WillRepeatedly(Return(&session_)); |
172 EXPECT_CALL(pc_, sctp_data_channels()).WillRepeatedly( | 314 EXPECT_CALL(pc_, sctp_data_channels()).WillRepeatedly( |
173 ReturnRef(data_channels_)); | 315 ReturnRef(data_channels_)); |
174 EXPECT_CALL(session_, video_channel()).WillRepeatedly(ReturnNull()); | 316 EXPECT_CALL(session_, video_channel()).WillRepeatedly(ReturnNull()); |
175 EXPECT_CALL(session_, voice_channel()).WillRepeatedly(ReturnNull()); | 317 EXPECT_CALL(session_, voice_channel()).WillRepeatedly(ReturnNull()); |
176 EXPECT_CALL(session_, GetTransportStats(_)).WillRepeatedly(Return(false)); | 318 EXPECT_CALL(session_, GetTransportStats(_)).WillRepeatedly(Return(false)); |
177 EXPECT_CALL(session_, GetLocalCertificate(_, _)).WillRepeatedly( | 319 EXPECT_CALL(session_, GetLocalCertificate(_, _)).WillRepeatedly( |
178 Return(false)); | 320 Return(false)); |
179 EXPECT_CALL(session_, GetRemoteSSLCertificate_ReturnsRawPointer(_)) | 321 EXPECT_CALL(session_, GetRemoteSSLCertificate_ReturnsRawPointer(_)) |
180 .WillRepeatedly(Return(nullptr)); | 322 .WillRepeatedly(Return(nullptr)); |
(...skipping 10 matching lines...) Expand all Loading... |
191 } | 333 } |
192 | 334 |
193 // SetSessionDescriptionObserver overrides. | 335 // SetSessionDescriptionObserver overrides. |
194 void OnSuccess() override {} | 336 void OnSuccess() override {} |
195 void OnFailure(const std::string& error) override { | 337 void OnFailure(const std::string& error) override { |
196 RTC_NOTREACHED() << error; | 338 RTC_NOTREACHED() << error; |
197 } | 339 } |
198 | 340 |
199 private: | 341 private: |
200 rtc::ScopedFakeClock fake_clock_; | 342 rtc::ScopedFakeClock fake_clock_; |
201 webrtc::RtcEventLogNullImpl event_log_; | 343 RtcEventLogNullImpl event_log_; |
202 rtc::Thread* const worker_thread_; | 344 rtc::Thread* const worker_thread_; |
203 rtc::Thread* const network_thread_; | 345 rtc::Thread* const network_thread_; |
204 cricket::FakeMediaEngine* media_engine_; | 346 cricket::FakeMediaEngine* media_engine_; |
205 std::unique_ptr<cricket::ChannelManager> channel_manager_; | 347 std::unique_ptr<cricket::ChannelManager> channel_manager_; |
206 std::unique_ptr<webrtc::MediaControllerInterface> media_controller_; | 348 std::unique_ptr<MediaControllerInterface> media_controller_; |
207 MockWebRtcSession session_; | 349 MockWebRtcSession session_; |
208 MockPeerConnection pc_; | 350 MockPeerConnection pc_; |
209 | 351 |
210 std::vector<rtc::scoped_refptr<DataChannel>> data_channels_; | 352 std::vector<rtc::scoped_refptr<DataChannel>> data_channels_; |
211 }; | 353 }; |
212 | 354 |
213 class RTCTestStats : public RTCStats { | 355 class RTCTestStats : public RTCStats { |
214 public: | 356 public: |
215 WEBRTC_RTCSTATS_DECL(); | 357 WEBRTC_RTCSTATS_DECL(); |
216 | 358 |
(...skipping 755 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
972 // channels that have been opened and closed, not the numbers currently | 1114 // channels that have been opened and closed, not the numbers currently |
973 // open/closed, we would expect opened >= closed and (opened - closed) to be | 1115 // open/closed, we would expect opened >= closed and (opened - closed) to be |
974 // the number currently open. crbug.com/636818. | 1116 // the number currently open. crbug.com/636818. |
975 const RTCPeerConnectionStats& pcstats = | 1117 const RTCPeerConnectionStats& pcstats = |
976 stats->cast_to<RTCPeerConnectionStats>(); | 1118 stats->cast_to<RTCPeerConnectionStats>(); |
977 EXPECT_EQ(*pcstats.data_channels_opened, static_cast<uint32_t>(1)); | 1119 EXPECT_EQ(*pcstats.data_channels_opened, static_cast<uint32_t>(1)); |
978 EXPECT_EQ(*pcstats.data_channels_closed, static_cast<uint32_t>(3)); | 1120 EXPECT_EQ(*pcstats.data_channels_closed, static_cast<uint32_t>(3)); |
979 } | 1121 } |
980 } | 1122 } |
981 | 1123 |
| 1124 TEST_F(RTCStatsCollectorTest, |
| 1125 CollectRTCMediaStreamStatsAndRTCMediaStreamTrackStats_Audio) { |
| 1126 rtc::scoped_refptr<StreamCollection> local_streams = |
| 1127 StreamCollection::Create(); |
| 1128 rtc::scoped_refptr<StreamCollection> remote_streams = |
| 1129 StreamCollection::Create(); |
| 1130 EXPECT_CALL(test_->pc(), local_streams()) |
| 1131 .WillRepeatedly(Return(local_streams)); |
| 1132 EXPECT_CALL(test_->pc(), remote_streams()) |
| 1133 .WillRepeatedly(Return(remote_streams)); |
| 1134 |
| 1135 rtc::scoped_refptr<MediaStream> local_stream = |
| 1136 MediaStream::Create("LocalStreamLabel"); |
| 1137 local_streams->AddStream(local_stream); |
| 1138 rtc::scoped_refptr<MediaStream> remote_stream = |
| 1139 MediaStream::Create("RemoteStreamLabel"); |
| 1140 remote_streams->AddStream(remote_stream); |
| 1141 |
| 1142 // Local audio track |
| 1143 AudioProcessorInterface::AudioProcessorStats local_audio_processor_stats; |
| 1144 local_audio_processor_stats.echo_return_loss = 42; |
| 1145 local_audio_processor_stats.echo_return_loss_enhancement = 52; |
| 1146 rtc::scoped_refptr<FakeAudioTrackForStats> local_audio_track = |
| 1147 FakeAudioTrackForStats::Create( |
| 1148 "LocalAudioTrackID", |
| 1149 MediaStreamTrackInterface::TrackState::kEnded, |
| 1150 32767, |
| 1151 FakeAudioProcessorForStats::Create(local_audio_processor_stats)); |
| 1152 local_stream->AddTrack(local_audio_track); |
| 1153 |
| 1154 // Remote audio track |
| 1155 AudioProcessorInterface::AudioProcessorStats remote_audio_processor_stats; |
| 1156 remote_audio_processor_stats.echo_return_loss = 13; |
| 1157 remote_audio_processor_stats.echo_return_loss_enhancement = 37; |
| 1158 rtc::scoped_refptr<FakeAudioTrackForStats> remote_audio_track = |
| 1159 FakeAudioTrackForStats::Create( |
| 1160 "RemoteAudioTrackID", |
| 1161 MediaStreamTrackInterface::TrackState::kLive, |
| 1162 0, |
| 1163 FakeAudioProcessorForStats::Create(remote_audio_processor_stats)); |
| 1164 remote_stream->AddTrack(remote_audio_track); |
| 1165 |
| 1166 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); |
| 1167 |
| 1168 RTCMediaStreamStats expected_local_stream( |
| 1169 "RTCMediaStream_LocalStreamLabel", report->timestamp_us()); |
| 1170 expected_local_stream.stream_identifier = "LocalStreamLabel"; |
| 1171 expected_local_stream.track_ids = std::vector<std::string>(); |
| 1172 expected_local_stream.track_ids->push_back( |
| 1173 "RTCMediaStreamTrack_LocalAudioTrackID"); |
| 1174 EXPECT_TRUE(report->Get(expected_local_stream.id())); |
| 1175 EXPECT_EQ(expected_local_stream, |
| 1176 report->Get(expected_local_stream.id())->cast_to< |
| 1177 RTCMediaStreamStats>()); |
| 1178 |
| 1179 RTCMediaStreamStats expected_remote_stream( |
| 1180 "RTCMediaStream_RemoteStreamLabel", report->timestamp_us()); |
| 1181 expected_remote_stream.stream_identifier = "RemoteStreamLabel"; |
| 1182 expected_remote_stream.track_ids = std::vector<std::string>(); |
| 1183 expected_remote_stream.track_ids->push_back( |
| 1184 "RTCMediaStreamTrack_RemoteAudioTrackID"); |
| 1185 EXPECT_TRUE(report->Get(expected_remote_stream.id())); |
| 1186 EXPECT_EQ(expected_remote_stream, |
| 1187 report->Get(expected_remote_stream.id())->cast_to< |
| 1188 RTCMediaStreamStats>()); |
| 1189 |
| 1190 RTCMediaStreamTrackStats expected_local_audio_track( |
| 1191 "RTCMediaStreamTrack_LocalAudioTrackID", report->timestamp_us()); |
| 1192 expected_local_audio_track.track_identifier = "LocalAudioTrackID"; |
| 1193 expected_local_audio_track.remote_source = false; |
| 1194 expected_local_audio_track.ended = true; |
| 1195 expected_local_audio_track.detached = false; |
| 1196 expected_local_audio_track.audio_level = 1.0; |
| 1197 expected_local_audio_track.echo_return_loss = 42.0; |
| 1198 expected_local_audio_track.echo_return_loss_enhancement = 52.0; |
| 1199 EXPECT_TRUE(report->Get(expected_local_audio_track.id())); |
| 1200 EXPECT_EQ(expected_local_audio_track, |
| 1201 report->Get(expected_local_audio_track.id())->cast_to< |
| 1202 RTCMediaStreamTrackStats>()); |
| 1203 |
| 1204 RTCMediaStreamTrackStats expected_remote_audio_track( |
| 1205 "RTCMediaStreamTrack_RemoteAudioTrackID", report->timestamp_us()); |
| 1206 expected_remote_audio_track.track_identifier = "RemoteAudioTrackID"; |
| 1207 expected_remote_audio_track.remote_source = true; |
| 1208 expected_remote_audio_track.ended = false; |
| 1209 expected_remote_audio_track.detached = false; |
| 1210 expected_remote_audio_track.audio_level = 0.0; |
| 1211 expected_remote_audio_track.echo_return_loss = 13.0; |
| 1212 expected_remote_audio_track.echo_return_loss_enhancement = 37.0; |
| 1213 EXPECT_TRUE(report->Get(expected_remote_audio_track.id())); |
| 1214 EXPECT_EQ(expected_remote_audio_track, |
| 1215 report->Get(expected_remote_audio_track.id())->cast_to< |
| 1216 RTCMediaStreamTrackStats>()); |
| 1217 } |
| 1218 |
| 1219 TEST_F(RTCStatsCollectorTest, |
| 1220 CollectRTCMediaStreamStatsAndRTCMediaStreamTrackStats_Video) { |
| 1221 rtc::scoped_refptr<StreamCollection> local_streams = |
| 1222 StreamCollection::Create(); |
| 1223 rtc::scoped_refptr<StreamCollection> remote_streams = |
| 1224 StreamCollection::Create(); |
| 1225 EXPECT_CALL(test_->pc(), local_streams()) |
| 1226 .WillRepeatedly(Return(local_streams)); |
| 1227 EXPECT_CALL(test_->pc(), remote_streams()) |
| 1228 .WillRepeatedly(Return(remote_streams)); |
| 1229 |
| 1230 rtc::scoped_refptr<MediaStream> local_stream = |
| 1231 MediaStream::Create("LocalStreamLabel"); |
| 1232 local_streams->AddStream(local_stream); |
| 1233 rtc::scoped_refptr<MediaStream> remote_stream = |
| 1234 MediaStream::Create("RemoteStreamLabel"); |
| 1235 remote_streams->AddStream(remote_stream); |
| 1236 |
| 1237 // Local video track |
| 1238 VideoTrackSourceInterface::Stats local_video_track_source_stats; |
| 1239 local_video_track_source_stats.input_width = 1234; |
| 1240 local_video_track_source_stats.input_height = 4321; |
| 1241 rtc::scoped_refptr<FakeVideoTrackSourceForStats> local_video_track_source = |
| 1242 FakeVideoTrackSourceForStats::Create(local_video_track_source_stats); |
| 1243 rtc::scoped_refptr<FakeVideoTrackForStats> local_video_track = |
| 1244 FakeVideoTrackForStats::Create( |
| 1245 "LocalVideoTrackID", |
| 1246 MediaStreamTrackInterface::TrackState::kLive, |
| 1247 local_video_track_source); |
| 1248 local_stream->AddTrack(local_video_track); |
| 1249 |
| 1250 // Remote video track |
| 1251 VideoTrackSourceInterface::Stats remote_video_track_source_stats; |
| 1252 remote_video_track_source_stats.input_width = 1234; |
| 1253 remote_video_track_source_stats.input_height = 4321; |
| 1254 rtc::scoped_refptr<FakeVideoTrackSourceForStats> remote_video_track_source = |
| 1255 FakeVideoTrackSourceForStats::Create(remote_video_track_source_stats); |
| 1256 rtc::scoped_refptr<FakeVideoTrackForStats> remote_video_track = |
| 1257 FakeVideoTrackForStats::Create( |
| 1258 "RemoteVideoTrackID", |
| 1259 MediaStreamTrackInterface::TrackState::kEnded, |
| 1260 remote_video_track_source); |
| 1261 remote_stream->AddTrack(remote_video_track); |
| 1262 |
| 1263 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); |
| 1264 |
| 1265 RTCMediaStreamStats expected_local_stream( |
| 1266 "RTCMediaStream_LocalStreamLabel", report->timestamp_us()); |
| 1267 expected_local_stream.stream_identifier = "LocalStreamLabel"; |
| 1268 expected_local_stream.track_ids = std::vector<std::string>(); |
| 1269 expected_local_stream.track_ids->push_back( |
| 1270 "RTCMediaStreamTrack_LocalVideoTrackID"); |
| 1271 EXPECT_TRUE(report->Get(expected_local_stream.id())); |
| 1272 EXPECT_EQ(expected_local_stream, |
| 1273 report->Get(expected_local_stream.id())->cast_to< |
| 1274 RTCMediaStreamStats>()); |
| 1275 |
| 1276 RTCMediaStreamStats expected_remote_stream( |
| 1277 "RTCMediaStream_RemoteStreamLabel", report->timestamp_us()); |
| 1278 expected_remote_stream.stream_identifier = "RemoteStreamLabel"; |
| 1279 expected_remote_stream.track_ids = std::vector<std::string>(); |
| 1280 expected_remote_stream.track_ids->push_back( |
| 1281 "RTCMediaStreamTrack_RemoteVideoTrackID"); |
| 1282 EXPECT_TRUE(report->Get(expected_remote_stream.id())); |
| 1283 EXPECT_EQ(expected_remote_stream, |
| 1284 report->Get(expected_remote_stream.id())->cast_to< |
| 1285 RTCMediaStreamStats>()); |
| 1286 |
| 1287 RTCMediaStreamTrackStats expected_local_video_track( |
| 1288 "RTCMediaStreamTrack_LocalVideoTrackID", report->timestamp_us()); |
| 1289 expected_local_video_track.track_identifier = "LocalVideoTrackID"; |
| 1290 expected_local_video_track.remote_source = false; |
| 1291 expected_local_video_track.ended = false; |
| 1292 expected_local_video_track.detached = false; |
| 1293 expected_local_video_track.frame_width = 1234; |
| 1294 expected_local_video_track.frame_height = 4321; |
| 1295 EXPECT_TRUE(report->Get(expected_local_video_track.id())); |
| 1296 EXPECT_EQ(expected_local_video_track, |
| 1297 report->Get(expected_local_video_track.id())->cast_to< |
| 1298 RTCMediaStreamTrackStats>()); |
| 1299 |
| 1300 RTCMediaStreamTrackStats expected_remote_video_track( |
| 1301 "RTCMediaStreamTrack_RemoteVideoTrackID", report->timestamp_us()); |
| 1302 expected_remote_video_track.track_identifier = "RemoteVideoTrackID"; |
| 1303 expected_remote_video_track.remote_source = true; |
| 1304 expected_remote_video_track.ended = true; |
| 1305 expected_remote_video_track.detached = false; |
| 1306 expected_remote_video_track.frame_width = 1234; |
| 1307 expected_remote_video_track.frame_height = 4321; |
| 1308 EXPECT_TRUE(report->Get(expected_remote_video_track.id())); |
| 1309 EXPECT_EQ(expected_remote_video_track, |
| 1310 report->Get(expected_remote_video_track.id())->cast_to< |
| 1311 RTCMediaStreamTrackStats>()); |
| 1312 } |
| 1313 |
982 TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Audio) { | 1314 TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Audio) { |
983 MockVoiceMediaChannel* voice_media_channel = new MockVoiceMediaChannel(); | 1315 MockVoiceMediaChannel* voice_media_channel = new MockVoiceMediaChannel(); |
984 cricket::VoiceChannel voice_channel( | 1316 cricket::VoiceChannel voice_channel( |
985 test_->worker_thread(), test_->network_thread(), test_->media_engine(), | 1317 test_->worker_thread(), test_->network_thread(), test_->media_engine(), |
986 voice_media_channel, nullptr, "VoiceContentName", false); | 1318 voice_media_channel, nullptr, "VoiceContentName", false); |
987 | 1319 |
988 cricket::VoiceMediaInfo voice_media_info; | 1320 cricket::VoiceMediaInfo voice_media_info; |
989 voice_media_info.receivers.push_back(cricket::VoiceReceiverInfo()); | 1321 voice_media_info.receivers.push_back(cricket::VoiceReceiverInfo()); |
990 voice_media_info.receivers[0].local_stats.push_back( | 1322 voice_media_info.receivers[0].local_stats.push_back( |
991 cricket::SsrcReceiverInfo()); | 1323 cricket::SsrcReceiverInfo()); |
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1313 rtc::scoped_refptr<FakeRTCStatsCollector> collector_; | 1645 rtc::scoped_refptr<FakeRTCStatsCollector> collector_; |
1314 }; | 1646 }; |
1315 | 1647 |
1316 TEST_F(RTCStatsCollectorTestWithFakeCollector, ThreadUsageAndResultsMerging) { | 1648 TEST_F(RTCStatsCollectorTestWithFakeCollector, ThreadUsageAndResultsMerging) { |
1317 collector_->VerifyThreadUsageAndResultsMerging(); | 1649 collector_->VerifyThreadUsageAndResultsMerging(); |
1318 } | 1650 } |
1319 | 1651 |
1320 } // namespace | 1652 } // namespace |
1321 | 1653 |
1322 } // namespace webrtc | 1654 } // namespace webrtc |
OLD | NEW |