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 <initializer_list> | |
13 #include <memory> | 14 #include <memory> |
14 #include <ostream> | 15 #include <ostream> |
15 #include <string> | 16 #include <string> |
16 #include <vector> | 17 #include <vector> |
17 | 18 |
18 #include "webrtc/api/jsepsessiondescription.h" | 19 #include "webrtc/api/jsepsessiondescription.h" |
19 #include "webrtc/api/mediastream.h" | 20 #include "webrtc/api/mediastream.h" |
20 #include "webrtc/api/mediastreamtrack.h" | 21 #include "webrtc/api/mediastreamtrack.h" |
21 #include "webrtc/api/rtpparameters.h" | 22 #include "webrtc/api/rtpparameters.h" |
22 #include "webrtc/api/stats/rtcstats_objects.h" | 23 #include "webrtc/api/stats/rtcstats_objects.h" |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
163 const std::string& candidate_type, | 164 const std::string& candidate_type, |
164 uint32_t priority) { | 165 uint32_t priority) { |
165 std::unique_ptr<cricket::Candidate> candidate(new cricket::Candidate()); | 166 std::unique_ptr<cricket::Candidate> candidate(new cricket::Candidate()); |
166 candidate->set_address(rtc::SocketAddress(hostname, port)); | 167 candidate->set_address(rtc::SocketAddress(hostname, port)); |
167 candidate->set_protocol(protocol); | 168 candidate->set_protocol(protocol); |
168 candidate->set_type(candidate_type); | 169 candidate->set_type(candidate_type); |
169 candidate->set_priority(priority); | 170 candidate->set_priority(priority); |
170 return candidate; | 171 return candidate; |
171 } | 172 } |
172 | 173 |
173 class FakeAudioProcessorForStats | |
174 : public rtc::RefCountedObject<AudioProcessorInterface> { | |
175 public: | |
176 FakeAudioProcessorForStats( | |
177 AudioProcessorInterface::AudioProcessorStats stats) | |
178 : stats_(stats) { | |
179 } | |
180 | |
181 void GetStats(AudioProcessorInterface::AudioProcessorStats* stats) override { | |
182 *stats = stats_; | |
183 } | |
184 | |
185 private: | |
186 AudioProcessorInterface::AudioProcessorStats stats_; | |
187 }; | |
188 | |
189 class FakeAudioTrackForStats | 174 class FakeAudioTrackForStats |
190 : public MediaStreamTrack<AudioTrackInterface> { | 175 : public MediaStreamTrack<AudioTrackInterface> { |
191 public: | 176 public: |
192 static rtc::scoped_refptr<FakeAudioTrackForStats> Create( | 177 static rtc::scoped_refptr<FakeAudioTrackForStats> Create( |
193 const std::string& id, | 178 const std::string& id, |
194 MediaStreamTrackInterface::TrackState state, | 179 MediaStreamTrackInterface::TrackState state) { |
195 int signal_level, | |
196 rtc::scoped_refptr<FakeAudioProcessorForStats> processor) { | |
197 rtc::scoped_refptr<FakeAudioTrackForStats> audio_track_stats( | 180 rtc::scoped_refptr<FakeAudioTrackForStats> audio_track_stats( |
198 new rtc::RefCountedObject<FakeAudioTrackForStats>( | 181 new rtc::RefCountedObject<FakeAudioTrackForStats>(id)); |
199 id, signal_level, processor)); | |
200 audio_track_stats->set_state(state); | 182 audio_track_stats->set_state(state); |
201 return audio_track_stats; | 183 return audio_track_stats; |
202 } | 184 } |
203 | 185 |
204 FakeAudioTrackForStats( | 186 FakeAudioTrackForStats(const std::string& id) |
205 const std::string& id, | 187 : MediaStreamTrack<AudioTrackInterface>(id) { |
206 int signal_level, | |
207 rtc::scoped_refptr<FakeAudioProcessorForStats> processor) | |
208 : MediaStreamTrack<AudioTrackInterface>(id), | |
209 signal_level_(signal_level), | |
210 processor_(processor) { | |
211 } | 188 } |
212 | 189 |
213 std::string kind() const override { | 190 std::string kind() const override { |
214 return MediaStreamTrackInterface::kAudioKind; | 191 return MediaStreamTrackInterface::kAudioKind; |
215 } | 192 } |
216 webrtc::AudioSourceInterface* GetSource() const override { return nullptr; } | 193 webrtc::AudioSourceInterface* GetSource() const override { return nullptr; } |
217 void AddSink(webrtc::AudioTrackSinkInterface* sink) override {} | 194 void AddSink(webrtc::AudioTrackSinkInterface* sink) override {} |
218 void RemoveSink(webrtc::AudioTrackSinkInterface* sink) override {} | 195 void RemoveSink(webrtc::AudioTrackSinkInterface* sink) override {} |
219 bool GetSignalLevel(int* level) override { | 196 bool GetSignalLevel(int* level) override { return false; } |
220 *level = signal_level_; | 197 rtc::scoped_refptr<AudioProcessorInterface> GetAudioProcessor() override { |
221 return true; | 198 return nullptr; |
222 } | 199 } |
223 rtc::scoped_refptr<AudioProcessorInterface> GetAudioProcessor() override { | |
224 return processor_; | |
225 } | |
226 | |
227 private: | |
228 int signal_level_; | |
229 rtc::scoped_refptr<FakeAudioProcessorForStats> processor_; | |
230 }; | |
231 | |
232 class FakeVideoTrackSourceForStats | |
233 : public rtc::RefCountedObject<VideoTrackSourceInterface> { | |
234 public: | |
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<webrtc::VideoFrame>* sink, | |
246 const rtc::VideoSinkWants& wants) override {} | |
247 void RemoveSink(rtc::VideoSinkInterface<webrtc::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 }; | 200 }; |
261 | 201 |
262 class FakeVideoTrackForStats | 202 class FakeVideoTrackForStats |
263 : public MediaStreamTrack<VideoTrackInterface> { | 203 : public MediaStreamTrack<VideoTrackInterface> { |
264 public: | 204 public: |
265 static rtc::scoped_refptr<FakeVideoTrackForStats> Create( | 205 static rtc::scoped_refptr<FakeVideoTrackForStats> Create( |
266 const std::string& id, | 206 const std::string& id, |
267 MediaStreamTrackInterface::TrackState state, | 207 MediaStreamTrackInterface::TrackState state) { |
268 rtc::scoped_refptr<VideoTrackSourceInterface> source) { | |
269 rtc::scoped_refptr<FakeVideoTrackForStats> video_track( | 208 rtc::scoped_refptr<FakeVideoTrackForStats> video_track( |
270 new rtc::RefCountedObject<FakeVideoTrackForStats>(id, source)); | 209 new rtc::RefCountedObject<FakeVideoTrackForStats>(id)); |
271 video_track->set_state(state); | 210 video_track->set_state(state); |
272 return video_track; | 211 return video_track; |
273 } | 212 } |
274 | 213 |
275 FakeVideoTrackForStats( | 214 FakeVideoTrackForStats(const std::string& id) |
276 const std::string& id, | 215 : MediaStreamTrack<VideoTrackInterface>(id) { |
277 rtc::scoped_refptr<VideoTrackSourceInterface> source) | |
278 : MediaStreamTrack<VideoTrackInterface>(id), | |
279 source_(source) { | |
280 } | 216 } |
281 | 217 |
282 std::string kind() const override { | 218 std::string kind() const override { |
283 return MediaStreamTrackInterface::kVideoKind; | 219 return MediaStreamTrackInterface::kVideoKind; |
284 } | 220 } |
285 VideoTrackSourceInterface* GetSource() const override { | 221 VideoTrackSourceInterface* GetSource() const override { return nullptr; } |
286 return source_; | |
287 } | |
288 | |
289 private: | |
290 rtc::scoped_refptr<VideoTrackSourceInterface> source_; | |
291 }; | 222 }; |
292 | 223 |
293 rtc::scoped_refptr<MediaStreamTrackInterface> CreateFakeTrack( | 224 rtc::scoped_refptr<MediaStreamTrackInterface> CreateFakeTrack( |
294 cricket::MediaType media_type, | 225 cricket::MediaType media_type, |
295 const std::string& track_id) { | 226 const std::string& track_id, |
227 MediaStreamTrackInterface::TrackState track_state) { | |
296 if (media_type == cricket::MEDIA_TYPE_AUDIO) { | 228 if (media_type == cricket::MEDIA_TYPE_AUDIO) { |
297 return FakeAudioTrackForStats::Create( | 229 return FakeAudioTrackForStats::Create(track_id, track_state); |
298 track_id, | |
299 MediaStreamTrackInterface::TrackState::kLive, | |
300 32767, | |
301 new FakeAudioProcessorForStats( | |
302 AudioProcessorInterface::AudioProcessorStats())); | |
303 } else { | 230 } else { |
304 RTC_DCHECK_EQ(media_type, cricket::MEDIA_TYPE_VIDEO); | 231 RTC_DCHECK_EQ(media_type, cricket::MEDIA_TYPE_VIDEO); |
305 return FakeVideoTrackForStats::Create( | 232 return FakeVideoTrackForStats::Create(track_id, track_state); |
306 track_id, | |
307 MediaStreamTrackInterface::TrackState::kLive, | |
308 new FakeVideoTrackSourceForStats( | |
309 VideoTrackSourceInterface::Stats())); | |
310 } | 233 } |
311 } | 234 } |
312 | 235 |
236 rtc::scoped_refptr<MockRtpSender> CreateMockSender( | |
237 rtc::scoped_refptr<MediaStreamTrackInterface> track, uint32_t ssrc) { | |
238 rtc::scoped_refptr<MockRtpSender> sender( | |
239 new rtc::RefCountedObject<MockRtpSender>()); | |
240 EXPECT_CALL(*sender, track()).WillRepeatedly(Return(track)); | |
241 EXPECT_CALL(*sender, ssrc()).WillRepeatedly(Return(ssrc)); | |
242 EXPECT_CALL(*sender, media_type()).WillRepeatedly(Return( | |
243 track->kind() == MediaStreamTrackInterface::kAudioKind | |
244 ? cricket::MEDIA_TYPE_AUDIO : cricket::MEDIA_TYPE_VIDEO)); | |
245 EXPECT_CALL(*sender, GetParameters()).WillRepeatedly(Invoke( | |
246 [ssrc]() { | |
247 RtpParameters params; | |
248 params.encodings.push_back(RtpEncodingParameters()); | |
249 params.encodings[0].ssrc = rtc::Optional<uint32_t>(ssrc); | |
250 return params; | |
251 })); | |
252 return sender; | |
253 } | |
254 | |
255 rtc::scoped_refptr<MockRtpReceiver> CreateMockReceiver( | |
256 rtc::scoped_refptr<MediaStreamTrackInterface> track, uint32_t ssrc) { | |
257 rtc::scoped_refptr<MockRtpReceiver> receiver( | |
258 new rtc::RefCountedObject<MockRtpReceiver>()); | |
259 EXPECT_CALL(*receiver, track()).WillRepeatedly(Return(track)); | |
260 EXPECT_CALL(*receiver, media_type()).WillRepeatedly(Return( | |
261 track->kind() == MediaStreamTrackInterface::kAudioKind | |
262 ? cricket::MEDIA_TYPE_AUDIO : cricket::MEDIA_TYPE_VIDEO)); | |
263 EXPECT_CALL(*receiver, GetParameters()).WillRepeatedly(Invoke( | |
264 [ssrc]() { | |
265 RtpParameters params; | |
266 params.encodings.push_back(RtpEncodingParameters()); | |
267 params.encodings[0].ssrc = rtc::Optional<uint32_t>(ssrc); | |
268 return params; | |
269 })); | |
270 return receiver; | |
271 } | |
272 | |
313 class RTCStatsCollectorTestHelper : public SetSessionDescriptionObserver { | 273 class RTCStatsCollectorTestHelper : public SetSessionDescriptionObserver { |
314 public: | 274 public: |
315 RTCStatsCollectorTestHelper() | 275 RTCStatsCollectorTestHelper() |
316 : worker_thread_(rtc::Thread::Current()), | 276 : worker_thread_(rtc::Thread::Current()), |
317 network_thread_(rtc::Thread::Current()), | 277 network_thread_(rtc::Thread::Current()), |
318 signaling_thread_(rtc::Thread::Current()), | 278 signaling_thread_(rtc::Thread::Current()), |
319 media_engine_(new cricket::FakeMediaEngine()), | 279 media_engine_(new cricket::FakeMediaEngine()), |
320 channel_manager_(new cricket::ChannelManager(media_engine_, | 280 channel_manager_(new cricket::ChannelManager(media_engine_, |
321 worker_thread_, | 281 worker_thread_, |
322 network_thread_)), | 282 network_thread_)), |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
370 StreamCollection::Create(); | 330 StreamCollection::Create(); |
371 EXPECT_CALL(pc_, local_streams()) | 331 EXPECT_CALL(pc_, local_streams()) |
372 .WillRepeatedly(Return(local_streams)); | 332 .WillRepeatedly(Return(local_streams)); |
373 | 333 |
374 rtc::scoped_refptr<MediaStream> local_stream = | 334 rtc::scoped_refptr<MediaStream> local_stream = |
375 MediaStream::Create("LocalStreamLabel"); | 335 MediaStream::Create("LocalStreamLabel"); |
376 local_streams->AddStream(local_stream); | 336 local_streams->AddStream(local_stream); |
377 | 337 |
378 rtc::scoped_refptr<MediaStreamTrackInterface> track; | 338 rtc::scoped_refptr<MediaStreamTrackInterface> track; |
379 if (media_type == cricket::MEDIA_TYPE_AUDIO) { | 339 if (media_type == cricket::MEDIA_TYPE_AUDIO) { |
380 track = CreateFakeTrack(media_type, track_id); | 340 track = CreateFakeTrack(media_type, track_id, |
341 MediaStreamTrackInterface::kLive); | |
381 local_stream->AddTrack(static_cast<AudioTrackInterface*>(track.get())); | 342 local_stream->AddTrack(static_cast<AudioTrackInterface*>(track.get())); |
382 } else { | 343 } else { |
383 track = CreateFakeTrack(media_type, track_id); | 344 track = CreateFakeTrack(media_type, track_id, |
345 MediaStreamTrackInterface::kLive); | |
384 local_stream->AddTrack(static_cast<VideoTrackInterface*>(track.get())); | 346 local_stream->AddTrack(static_cast<VideoTrackInterface*>(track.get())); |
385 } | 347 } |
386 | 348 |
387 rtc::scoped_refptr<MockRtpSender> sender( | 349 rtc::scoped_refptr<MockRtpSender> sender = CreateMockSender(track, ssrc); |
388 new rtc::RefCountedObject<MockRtpSender>()); | |
389 EXPECT_CALL(*sender, track()).WillRepeatedly(Return(track)); | |
390 EXPECT_CALL(*sender, ssrc()).WillRepeatedly(Return(ssrc)); | |
391 EXPECT_CALL(*sender, media_type()).WillRepeatedly(Return(media_type)); | |
392 EXPECT_CALL(*sender, GetParameters()).WillRepeatedly(Invoke( | |
393 [ssrc]() { | |
394 RtpParameters params; | |
395 params.encodings.push_back(RtpEncodingParameters()); | |
396 params.encodings[0].ssrc = rtc::Optional<uint32_t>(ssrc); | |
397 return params; | |
398 })); | |
399 EXPECT_CALL(pc_, GetSenders()).WillRepeatedly(Return( | 350 EXPECT_CALL(pc_, GetSenders()).WillRepeatedly(Return( |
400 std::vector<rtc::scoped_refptr<RtpSenderInterface>>({ | 351 std::vector<rtc::scoped_refptr<RtpSenderInterface>>({ |
401 rtc::scoped_refptr<RtpSenderInterface>(sender.get()) }))); | 352 rtc::scoped_refptr<RtpSenderInterface>(sender.get()) }))); |
402 } | 353 } |
403 | 354 |
404 void SetupRemoteTrackAndReceiver(cricket::MediaType media_type, | 355 void SetupRemoteTrackAndReceiver(cricket::MediaType media_type, |
405 const std::string& track_id, | 356 const std::string& track_id, |
406 uint32_t ssrc) { | 357 uint32_t ssrc) { |
407 rtc::scoped_refptr<StreamCollection> remote_streams = | 358 rtc::scoped_refptr<StreamCollection> remote_streams = |
408 StreamCollection::Create(); | 359 StreamCollection::Create(); |
409 EXPECT_CALL(pc_, remote_streams()) | 360 EXPECT_CALL(pc_, remote_streams()) |
410 .WillRepeatedly(Return(remote_streams)); | 361 .WillRepeatedly(Return(remote_streams)); |
411 | 362 |
412 rtc::scoped_refptr<MediaStream> remote_stream = | 363 rtc::scoped_refptr<MediaStream> remote_stream = |
413 MediaStream::Create("RemoteStreamLabel"); | 364 MediaStream::Create("RemoteStreamLabel"); |
414 remote_streams->AddStream(remote_stream); | 365 remote_streams->AddStream(remote_stream); |
415 | 366 |
416 rtc::scoped_refptr<MediaStreamTrackInterface> track; | 367 rtc::scoped_refptr<MediaStreamTrackInterface> track; |
417 if (media_type == cricket::MEDIA_TYPE_AUDIO) { | 368 if (media_type == cricket::MEDIA_TYPE_AUDIO) { |
418 track = CreateFakeTrack(media_type, track_id); | 369 track = CreateFakeTrack(media_type, track_id, |
370 MediaStreamTrackInterface::kLive); | |
419 remote_stream->AddTrack(static_cast<AudioTrackInterface*>(track.get())); | 371 remote_stream->AddTrack(static_cast<AudioTrackInterface*>(track.get())); |
420 } else { | 372 } else { |
421 track = CreateFakeTrack(media_type, track_id); | 373 track = CreateFakeTrack(media_type, track_id, |
374 MediaStreamTrackInterface::kLive); | |
422 remote_stream->AddTrack(static_cast<VideoTrackInterface*>(track.get())); | 375 remote_stream->AddTrack(static_cast<VideoTrackInterface*>(track.get())); |
423 } | 376 } |
424 | 377 |
425 rtc::scoped_refptr<MockRtpReceiver> receiver( | 378 rtc::scoped_refptr<MockRtpReceiver> receiver = |
426 new rtc::RefCountedObject<MockRtpReceiver>()); | 379 CreateMockReceiver(track, ssrc); |
427 EXPECT_CALL(*receiver, track()).WillRepeatedly(Return(track)); | |
428 EXPECT_CALL(*receiver, media_type()).WillRepeatedly(Return(media_type)); | |
429 EXPECT_CALL(*receiver, GetParameters()).WillRepeatedly(Invoke( | |
430 [ssrc]() { | |
431 RtpParameters params; | |
432 params.encodings.push_back(RtpEncodingParameters()); | |
433 params.encodings[0].ssrc = rtc::Optional<uint32_t>(ssrc); | |
434 return params; | |
435 })); | |
436 EXPECT_CALL(pc_, GetReceivers()).WillRepeatedly(Return( | 380 EXPECT_CALL(pc_, GetReceivers()).WillRepeatedly(Return( |
437 std::vector<rtc::scoped_refptr<RtpReceiverInterface>>({ | 381 std::vector<rtc::scoped_refptr<RtpReceiverInterface>>({ |
438 rtc::scoped_refptr<RtpReceiverInterface>(receiver.get()) }))); | 382 rtc::scoped_refptr<RtpReceiverInterface>(receiver.get()) }))); |
439 } | 383 } |
440 | 384 |
Taylor Brandstetter
2017/01/18 20:10:27
Could you add a comment above this, explaining tha
hbos
2017/01/19 10:00:00
Done.
| |
385 void WireTracksToInfos( | |
386 std::initializer_list<std::pair<MediaStreamTrackInterface*, | |
387 cricket::VoiceSenderInfo>> local_audio_track_info_pairs, | |
388 std::initializer_list<std::pair<MediaStreamTrackInterface*, | |
389 cricket::VoiceReceiverInfo>> remote_audio_track_info_pairs, | |
390 std::initializer_list<std::pair<MediaStreamTrackInterface*, | |
391 cricket::VideoSenderInfo>> local_video_track_info_pairs, | |
392 std::initializer_list<std::pair<MediaStreamTrackInterface*, | |
393 cricket::VideoReceiverInfo>> remote_video_track_info_pairs) { | |
394 voice_media_info_.reset(new cricket::VoiceMediaInfo()); | |
395 video_media_info_.reset(new cricket::VideoMediaInfo()); | |
396 rtp_senders_.clear(); | |
397 rtp_receivers_.clear(); | |
398 // Local audio tracks and voice sender infos | |
399 for (auto& pair : local_audio_track_info_pairs) { | |
400 MediaStreamTrackInterface* local_audio_track = pair.first; | |
401 const cricket::VoiceSenderInfo& voice_sender_info = pair.second; | |
402 RTC_DCHECK_EQ(local_audio_track->kind(), | |
403 MediaStreamTrackInterface::kAudioKind); | |
404 | |
405 voice_media_info_->senders.push_back(voice_sender_info); | |
406 rtc::scoped_refptr<MockRtpSender> rtp_sender = | |
407 CreateMockSender(rtc::scoped_refptr<MediaStreamTrackInterface>( | |
408 local_audio_track), | |
409 voice_sender_info.local_stats[0].ssrc); | |
410 rtp_senders_.push_back(rtc::scoped_refptr<RtpSenderInterface>( | |
411 rtp_sender.get())); | |
412 } | |
413 // Remote audio tracks and voice receiver infos | |
414 for (auto& pair : remote_audio_track_info_pairs) { | |
415 MediaStreamTrackInterface* remote_audio_track = pair.first; | |
416 const cricket::VoiceReceiverInfo& voice_receiver_info = pair.second; | |
417 RTC_DCHECK_EQ(remote_audio_track->kind(), | |
418 MediaStreamTrackInterface::kAudioKind); | |
419 | |
420 voice_media_info_->receivers.push_back(voice_receiver_info); | |
421 rtc::scoped_refptr<MockRtpReceiver> rtp_receiver = | |
422 CreateMockReceiver(rtc::scoped_refptr<MediaStreamTrackInterface>( | |
423 remote_audio_track), | |
424 voice_receiver_info.local_stats[0].ssrc); | |
425 rtp_receivers_.push_back(rtc::scoped_refptr<RtpReceiverInterface>( | |
426 rtp_receiver.get())); | |
427 } | |
428 // Local video tracks and video sender infos | |
429 for (auto& pair : local_video_track_info_pairs) { | |
430 MediaStreamTrackInterface* local_video_track = pair.first; | |
431 const cricket::VideoSenderInfo& video_sender_info = pair.second; | |
432 RTC_DCHECK_EQ(local_video_track->kind(), | |
433 MediaStreamTrackInterface::kVideoKind); | |
434 | |
435 video_media_info_->senders.push_back(video_sender_info); | |
436 rtc::scoped_refptr<MockRtpSender> rtp_sender = | |
437 CreateMockSender(rtc::scoped_refptr<MediaStreamTrackInterface>( | |
438 local_video_track), | |
439 video_sender_info.local_stats[0].ssrc); | |
440 rtp_senders_.push_back(rtc::scoped_refptr<RtpSenderInterface>( | |
441 rtp_sender.get())); | |
442 } | |
443 // Remote video tracks and video receiver infos | |
444 for (auto& pair : remote_video_track_info_pairs) { | |
445 MediaStreamTrackInterface* remote_video_track = pair.first; | |
446 const cricket::VideoReceiverInfo& video_receiver_info = pair.second; | |
447 RTC_DCHECK_EQ(remote_video_track->kind(), | |
448 MediaStreamTrackInterface::kVideoKind); | |
449 | |
450 video_media_info_->receivers.push_back(video_receiver_info); | |
451 rtc::scoped_refptr<MockRtpReceiver> rtp_receiver = | |
452 CreateMockReceiver(rtc::scoped_refptr<MediaStreamTrackInterface>( | |
453 remote_video_track), | |
454 video_receiver_info.local_stats[0].ssrc); | |
455 rtp_receivers_.push_back(rtc::scoped_refptr<RtpReceiverInterface>( | |
456 rtp_receiver.get())); | |
457 } | |
458 EXPECT_CALL(pc_, GetSenders()).WillRepeatedly(Return(rtp_senders_)); | |
459 EXPECT_CALL(pc_, GetReceivers()).WillRepeatedly(Return(rtp_receivers_)); | |
460 | |
461 MockVoiceMediaChannel* voice_media_channel = new MockVoiceMediaChannel(); | |
462 voice_channel_.reset(new cricket::VoiceChannel( | |
463 worker_thread_, network_thread_, nullptr, media_engine_, | |
464 voice_media_channel, "VoiceContentName", kDefaultRtcpMuxRequired, | |
465 kDefaultSrtpRequired)); | |
466 EXPECT_CALL(session_, voice_channel()) | |
467 .WillRepeatedly(Return(voice_channel_.get())); | |
468 EXPECT_CALL(*voice_media_channel, GetStats(_)) | |
469 .WillOnce(DoAll(SetArgPointee<0>(*voice_media_info_), Return(true))); | |
470 | |
471 MockVideoMediaChannel* video_media_channel = new MockVideoMediaChannel(); | |
472 video_channel_.reset(new cricket::VideoChannel( | |
473 worker_thread_, network_thread_, nullptr, video_media_channel, | |
474 "VideoContentName", kDefaultRtcpMuxRequired, kDefaultSrtpRequired)); | |
475 EXPECT_CALL(session_, video_channel()) | |
476 .WillRepeatedly(Return(video_channel_.get())); | |
477 EXPECT_CALL(*video_media_channel, GetStats(_)) | |
478 .WillOnce(DoAll(SetArgPointee<0>(*video_media_info_), Return(true))); | |
479 } | |
480 | |
441 private: | 481 private: |
442 rtc::ScopedFakeClock fake_clock_; | 482 rtc::ScopedFakeClock fake_clock_; |
443 RtcEventLogNullImpl event_log_; | 483 RtcEventLogNullImpl event_log_; |
444 rtc::Thread* const worker_thread_; | 484 rtc::Thread* const worker_thread_; |
445 rtc::Thread* const network_thread_; | 485 rtc::Thread* const network_thread_; |
446 rtc::Thread* const signaling_thread_; | 486 rtc::Thread* const signaling_thread_; |
447 cricket::FakeMediaEngine* media_engine_; | 487 cricket::FakeMediaEngine* media_engine_; |
448 std::unique_ptr<cricket::ChannelManager> channel_manager_; | 488 std::unique_ptr<cricket::ChannelManager> channel_manager_; |
449 std::unique_ptr<MediaControllerInterface> media_controller_; | 489 std::unique_ptr<MediaControllerInterface> media_controller_; |
450 MockWebRtcSession session_; | 490 MockWebRtcSession session_; |
451 MockPeerConnection pc_; | 491 MockPeerConnection pc_; |
452 | 492 |
453 std::vector<rtc::scoped_refptr<DataChannel>> data_channels_; | 493 std::vector<rtc::scoped_refptr<DataChannel>> data_channels_; |
494 std::unique_ptr<cricket::VoiceChannel> voice_channel_; | |
495 std::unique_ptr<cricket::VideoChannel> video_channel_; | |
496 std::unique_ptr<cricket::VoiceMediaInfo> voice_media_info_; | |
497 std::unique_ptr<cricket::VideoMediaInfo> video_media_info_; | |
498 std::vector<rtc::scoped_refptr<RtpSenderInterface>> rtp_senders_; | |
499 std::vector<rtc::scoped_refptr<RtpReceiverInterface>> rtp_receivers_; | |
454 }; | 500 }; |
455 | 501 |
456 class RTCTestStats : public RTCStats { | 502 class RTCTestStats : public RTCStats { |
457 public: | 503 public: |
458 WEBRTC_RTCSTATS_DECL(); | 504 WEBRTC_RTCSTATS_DECL(); |
459 | 505 |
460 RTCTestStats(const std::string& id, int64_t timestamp_us) | 506 RTCTestStats(const std::string& id, int64_t timestamp_us) |
461 : RTCStats(id, timestamp_us), | 507 : RTCStats(id, timestamp_us), |
462 dummy_stat("dummyStat") {} | 508 dummy_stat("dummyStat") {} |
463 | 509 |
(...skipping 862 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1326 .WillRepeatedly(Return(remote_streams)); | 1372 .WillRepeatedly(Return(remote_streams)); |
1327 | 1373 |
1328 rtc::scoped_refptr<MediaStream> local_stream = | 1374 rtc::scoped_refptr<MediaStream> local_stream = |
1329 MediaStream::Create("LocalStreamLabel"); | 1375 MediaStream::Create("LocalStreamLabel"); |
1330 local_streams->AddStream(local_stream); | 1376 local_streams->AddStream(local_stream); |
1331 rtc::scoped_refptr<MediaStream> remote_stream = | 1377 rtc::scoped_refptr<MediaStream> remote_stream = |
1332 MediaStream::Create("RemoteStreamLabel"); | 1378 MediaStream::Create("RemoteStreamLabel"); |
1333 remote_streams->AddStream(remote_stream); | 1379 remote_streams->AddStream(remote_stream); |
1334 | 1380 |
1335 // Local audio track | 1381 // Local audio track |
1336 AudioProcessorInterface::AudioProcessorStats local_audio_processor_stats; | 1382 rtc::scoped_refptr<MediaStreamTrackInterface> local_audio_track = |
1337 local_audio_processor_stats.echo_return_loss = 42; | 1383 CreateFakeTrack(cricket::MEDIA_TYPE_AUDIO, "LocalAudioTrackID", |
1338 local_audio_processor_stats.echo_return_loss_enhancement = 52; | 1384 MediaStreamTrackInterface::kEnded); |
1339 rtc::scoped_refptr<FakeAudioTrackForStats> local_audio_track = | 1385 local_stream->AddTrack(static_cast<AudioTrackInterface*>( |
1340 FakeAudioTrackForStats::Create( | 1386 local_audio_track.get())); |
1341 "LocalAudioTrackID", | 1387 |
1342 MediaStreamTrackInterface::TrackState::kEnded, | 1388 cricket::VoiceSenderInfo voice_sender_info; |
1343 32767, | 1389 voice_sender_info.local_stats.push_back(cricket::SsrcSenderInfo()); |
1344 new FakeAudioProcessorForStats(local_audio_processor_stats)); | 1390 voice_sender_info.local_stats[0].ssrc = 1; |
1345 local_stream->AddTrack(local_audio_track); | 1391 voice_sender_info.audio_level = 32767; |
1392 voice_sender_info.echo_return_loss = 42; | |
1393 voice_sender_info.echo_return_loss_enhancement = 52; | |
1346 | 1394 |
1347 // Remote audio track | 1395 // Remote audio track |
1348 AudioProcessorInterface::AudioProcessorStats remote_audio_processor_stats; | 1396 rtc::scoped_refptr<MediaStreamTrackInterface> remote_audio_track = |
1349 remote_audio_processor_stats.echo_return_loss = 13; | 1397 CreateFakeTrack(cricket::MEDIA_TYPE_AUDIO, "RemoteAudioTrackID", |
1350 remote_audio_processor_stats.echo_return_loss_enhancement = 37; | 1398 MediaStreamTrackInterface::kLive); |
1351 rtc::scoped_refptr<FakeAudioTrackForStats> remote_audio_track = | 1399 remote_stream->AddTrack(static_cast<AudioTrackInterface*>( |
1352 FakeAudioTrackForStats::Create( | 1400 remote_audio_track.get())); |
1353 "RemoteAudioTrackID", | 1401 |
1354 MediaStreamTrackInterface::TrackState::kLive, | 1402 cricket::VoiceReceiverInfo voice_receiver_info; |
1355 0, | 1403 voice_receiver_info.local_stats.push_back(cricket::SsrcReceiverInfo()); |
1356 new FakeAudioProcessorForStats(remote_audio_processor_stats)); | 1404 voice_receiver_info.local_stats[0].ssrc = 2; |
1357 remote_stream->AddTrack(remote_audio_track); | 1405 voice_receiver_info.audio_level = 0; |
1406 | |
1407 test_->WireTracksToInfos( | |
1408 { std::make_pair(local_audio_track.get(), voice_sender_info) }, | |
1409 { std::make_pair(remote_audio_track.get(), voice_receiver_info) }, | |
1410 {}, {}); | |
1358 | 1411 |
1359 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); | 1412 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); |
1360 | 1413 |
1361 RTCMediaStreamStats expected_local_stream( | 1414 RTCMediaStreamStats expected_local_stream( |
1362 "RTCMediaStream_local_LocalStreamLabel", report->timestamp_us()); | 1415 "RTCMediaStream_local_LocalStreamLabel", report->timestamp_us()); |
1363 expected_local_stream.stream_identifier = local_stream->label(); | 1416 expected_local_stream.stream_identifier = local_stream->label(); |
1364 expected_local_stream.track_ids = std::vector<std::string>(); | 1417 expected_local_stream.track_ids = std::vector<std::string>(); |
1365 expected_local_stream.track_ids->push_back( | 1418 expected_local_stream.track_ids->push_back( |
1366 "RTCMediaStreamTrack_local_LocalAudioTrackID"); | 1419 "RTCMediaStreamTrack_local_audio_LocalAudioTrackID_1"); |
1367 ASSERT_TRUE(report->Get(expected_local_stream.id())); | 1420 ASSERT_TRUE(report->Get(expected_local_stream.id())); |
1368 EXPECT_EQ(expected_local_stream, | 1421 EXPECT_EQ(expected_local_stream, |
1369 report->Get(expected_local_stream.id())->cast_to< | 1422 report->Get(expected_local_stream.id())->cast_to< |
1370 RTCMediaStreamStats>()); | 1423 RTCMediaStreamStats>()); |
1371 | 1424 |
1372 RTCMediaStreamStats expected_remote_stream( | 1425 RTCMediaStreamStats expected_remote_stream( |
1373 "RTCMediaStream_remote_RemoteStreamLabel", report->timestamp_us()); | 1426 "RTCMediaStream_remote_RemoteStreamLabel", report->timestamp_us()); |
1374 expected_remote_stream.stream_identifier = remote_stream->label(); | 1427 expected_remote_stream.stream_identifier = remote_stream->label(); |
1375 expected_remote_stream.track_ids = std::vector<std::string>(); | 1428 expected_remote_stream.track_ids = std::vector<std::string>(); |
1376 expected_remote_stream.track_ids->push_back( | 1429 expected_remote_stream.track_ids->push_back( |
1377 "RTCMediaStreamTrack_remote_RemoteAudioTrackID"); | 1430 "RTCMediaStreamTrack_remote_audio_RemoteAudioTrackID_2"); |
1378 ASSERT_TRUE(report->Get(expected_remote_stream.id())); | 1431 ASSERT_TRUE(report->Get(expected_remote_stream.id())); |
1379 EXPECT_EQ(expected_remote_stream, | 1432 EXPECT_EQ(expected_remote_stream, |
1380 report->Get(expected_remote_stream.id())->cast_to< | 1433 report->Get(expected_remote_stream.id())->cast_to< |
1381 RTCMediaStreamStats>()); | 1434 RTCMediaStreamStats>()); |
1382 | 1435 |
1383 RTCMediaStreamTrackStats expected_local_audio_track( | 1436 RTCMediaStreamTrackStats expected_local_audio_track( |
1384 "RTCMediaStreamTrack_local_LocalAudioTrackID", report->timestamp_us(), | 1437 "RTCMediaStreamTrack_local_audio_LocalAudioTrackID_1", |
1385 RTCMediaStreamTrackKind::kAudio); | 1438 report->timestamp_us(), RTCMediaStreamTrackKind::kAudio); |
1386 expected_local_audio_track.track_identifier = local_audio_track->id(); | 1439 expected_local_audio_track.track_identifier = local_audio_track->id(); |
1387 expected_local_audio_track.remote_source = false; | 1440 expected_local_audio_track.remote_source = false; |
1388 expected_local_audio_track.ended = true; | 1441 expected_local_audio_track.ended = true; |
1389 expected_local_audio_track.detached = false; | 1442 expected_local_audio_track.detached = false; |
1390 expected_local_audio_track.audio_level = 1.0; | 1443 expected_local_audio_track.audio_level = 1.0; |
1391 expected_local_audio_track.echo_return_loss = 42.0; | 1444 expected_local_audio_track.echo_return_loss = 42.0; |
1392 expected_local_audio_track.echo_return_loss_enhancement = 52.0; | 1445 expected_local_audio_track.echo_return_loss_enhancement = 52.0; |
1393 ASSERT_TRUE(report->Get(expected_local_audio_track.id())); | 1446 ASSERT_TRUE(report->Get(expected_local_audio_track.id())); |
1394 EXPECT_EQ(expected_local_audio_track, | 1447 EXPECT_EQ(expected_local_audio_track, |
1395 report->Get(expected_local_audio_track.id())->cast_to< | 1448 report->Get(expected_local_audio_track.id())->cast_to< |
1396 RTCMediaStreamTrackStats>()); | 1449 RTCMediaStreamTrackStats>()); |
1397 | 1450 |
1398 RTCMediaStreamTrackStats expected_remote_audio_track( | 1451 RTCMediaStreamTrackStats expected_remote_audio_track( |
1399 "RTCMediaStreamTrack_remote_RemoteAudioTrackID", report->timestamp_us(), | 1452 "RTCMediaStreamTrack_remote_audio_RemoteAudioTrackID_2", |
1400 RTCMediaStreamTrackKind::kAudio); | 1453 report->timestamp_us(), RTCMediaStreamTrackKind::kAudio); |
1401 expected_remote_audio_track.track_identifier = remote_audio_track->id(); | 1454 expected_remote_audio_track.track_identifier = remote_audio_track->id(); |
1402 expected_remote_audio_track.remote_source = true; | 1455 expected_remote_audio_track.remote_source = true; |
1403 expected_remote_audio_track.ended = false; | 1456 expected_remote_audio_track.ended = false; |
1404 expected_remote_audio_track.detached = false; | 1457 expected_remote_audio_track.detached = false; |
1405 expected_remote_audio_track.audio_level = 0.0; | 1458 expected_remote_audio_track.audio_level = 0.0; |
1406 expected_remote_audio_track.echo_return_loss = 13.0; | |
1407 expected_remote_audio_track.echo_return_loss_enhancement = 37.0; | |
1408 ASSERT_TRUE(report->Get(expected_remote_audio_track.id())); | 1459 ASSERT_TRUE(report->Get(expected_remote_audio_track.id())); |
1409 EXPECT_EQ(expected_remote_audio_track, | 1460 EXPECT_EQ(expected_remote_audio_track, |
1410 report->Get(expected_remote_audio_track.id())->cast_to< | 1461 report->Get(expected_remote_audio_track.id())->cast_to< |
1411 RTCMediaStreamTrackStats>()); | 1462 RTCMediaStreamTrackStats>()); |
1412 } | 1463 } |
1413 | 1464 |
1414 TEST_F(RTCStatsCollectorTest, | 1465 TEST_F(RTCStatsCollectorTest, |
1415 CollectRTCMediaStreamStatsAndRTCMediaStreamTrackStats_Audio_Defaults) { | 1466 CollectRTCMediaStreamStatsAndRTCMediaStreamTrackStats_Audio_Defaults) { |
1416 rtc::scoped_refptr<StreamCollection> local_streams = | 1467 rtc::scoped_refptr<StreamCollection> local_streams = |
1417 StreamCollection::Create(); | 1468 StreamCollection::Create(); |
1418 EXPECT_CALL(test_->pc(), local_streams()) | 1469 EXPECT_CALL(test_->pc(), local_streams()) |
1419 .WillRepeatedly(Return(local_streams)); | 1470 .WillRepeatedly(Return(local_streams)); |
1420 | 1471 |
1421 rtc::scoped_refptr<MediaStream> local_stream = | 1472 rtc::scoped_refptr<MediaStream> local_stream = |
1422 MediaStream::Create("LocalStreamLabel"); | 1473 MediaStream::Create("LocalStreamLabel"); |
1423 local_streams->AddStream(local_stream); | 1474 local_streams->AddStream(local_stream); |
1424 | 1475 |
1425 // Local audio track | 1476 // Local audio track |
1426 AudioProcessorInterface::AudioProcessorStats local_audio_processor_stats; | 1477 rtc::scoped_refptr<MediaStreamTrackInterface> local_audio_track = |
1427 local_audio_processor_stats.echo_return_loss = -100; | 1478 CreateFakeTrack(cricket::MEDIA_TYPE_AUDIO, "LocalAudioTrackID", |
1428 local_audio_processor_stats.echo_return_loss_enhancement = -100; | 1479 MediaStreamTrackInterface::kEnded); |
1429 rtc::scoped_refptr<FakeAudioTrackForStats> local_audio_track = | 1480 local_stream->AddTrack(static_cast<AudioTrackInterface*>( |
1430 FakeAudioTrackForStats::Create( | 1481 local_audio_track.get())); |
1431 "LocalAudioTrackID", | 1482 |
1432 MediaStreamTrackInterface::TrackState::kEnded, | 1483 cricket::VoiceSenderInfo voice_sender_info; |
1433 32767, | 1484 voice_sender_info.local_stats.push_back(cricket::SsrcSenderInfo()); |
1434 new FakeAudioProcessorForStats(local_audio_processor_stats)); | 1485 voice_sender_info.local_stats[0].ssrc = 1; |
1435 local_stream->AddTrack(local_audio_track); | 1486 voice_sender_info.audio_level = 32767; |
1487 voice_sender_info.echo_return_loss = -100; | |
1488 voice_sender_info.echo_return_loss_enhancement = -100; | |
1489 | |
1490 test_->WireTracksToInfos( | |
1491 { std::make_pair(local_audio_track.get(), voice_sender_info) }, | |
1492 {}, {}, {}); | |
1436 | 1493 |
1437 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); | 1494 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); |
1438 | 1495 |
1439 RTCMediaStreamTrackStats expected_local_audio_track( | 1496 RTCMediaStreamTrackStats expected_local_audio_track( |
1440 "RTCMediaStreamTrack_local_LocalAudioTrackID", report->timestamp_us(), | 1497 "RTCMediaStreamTrack_local_audio_LocalAudioTrackID_1", |
1441 RTCMediaStreamTrackKind::kAudio); | 1498 report->timestamp_us(), RTCMediaStreamTrackKind::kAudio); |
1442 expected_local_audio_track.track_identifier = local_audio_track->id(); | 1499 expected_local_audio_track.track_identifier = local_audio_track->id(); |
1443 expected_local_audio_track.remote_source = false; | 1500 expected_local_audio_track.remote_source = false; |
1444 expected_local_audio_track.ended = true; | 1501 expected_local_audio_track.ended = true; |
1445 expected_local_audio_track.detached = false; | 1502 expected_local_audio_track.detached = false; |
1446 expected_local_audio_track.audio_level = 1.0; | 1503 expected_local_audio_track.audio_level = 1.0; |
1447 // Should be undefined: |expected_local_audio_track.echo_return_loss| and | 1504 // Should be undefined: |expected_local_audio_track.echo_return_loss| and |
1448 // |expected_local_audio_track.echo_return_loss_enhancement|. | 1505 // |expected_local_audio_track.echo_return_loss_enhancement|. |
1449 ASSERT_TRUE(report->Get(expected_local_audio_track.id())); | 1506 ASSERT_TRUE(report->Get(expected_local_audio_track.id())); |
1450 EXPECT_EQ(expected_local_audio_track, | 1507 EXPECT_EQ(expected_local_audio_track, |
1451 report->Get(expected_local_audio_track.id())->cast_to< | 1508 report->Get(expected_local_audio_track.id())->cast_to< |
(...skipping 12 matching lines...) Expand all Loading... | |
1464 .WillRepeatedly(Return(remote_streams)); | 1521 .WillRepeatedly(Return(remote_streams)); |
1465 | 1522 |
1466 rtc::scoped_refptr<MediaStream> local_stream = | 1523 rtc::scoped_refptr<MediaStream> local_stream = |
1467 MediaStream::Create("LocalStreamLabel"); | 1524 MediaStream::Create("LocalStreamLabel"); |
1468 local_streams->AddStream(local_stream); | 1525 local_streams->AddStream(local_stream); |
1469 rtc::scoped_refptr<MediaStream> remote_stream = | 1526 rtc::scoped_refptr<MediaStream> remote_stream = |
1470 MediaStream::Create("RemoteStreamLabel"); | 1527 MediaStream::Create("RemoteStreamLabel"); |
1471 remote_streams->AddStream(remote_stream); | 1528 remote_streams->AddStream(remote_stream); |
1472 | 1529 |
1473 // Local video track | 1530 // Local video track |
1474 VideoTrackSourceInterface::Stats local_video_track_source_stats; | 1531 rtc::scoped_refptr<MediaStreamTrackInterface> local_video_track = |
1475 local_video_track_source_stats.input_width = 1234; | 1532 CreateFakeTrack(cricket::MEDIA_TYPE_VIDEO, "LocalVideoTrackID", |
1476 local_video_track_source_stats.input_height = 4321; | 1533 MediaStreamTrackInterface::kLive); |
1477 rtc::scoped_refptr<FakeVideoTrackSourceForStats> local_video_track_source = | 1534 local_stream->AddTrack(static_cast<VideoTrackInterface*>( |
1478 new FakeVideoTrackSourceForStats(local_video_track_source_stats); | 1535 local_video_track.get())); |
1479 rtc::scoped_refptr<FakeVideoTrackForStats> local_video_track = | |
1480 FakeVideoTrackForStats::Create( | |
1481 "LocalVideoTrackID", | |
1482 MediaStreamTrackInterface::TrackState::kLive, | |
1483 local_video_track_source); | |
1484 local_stream->AddTrack(local_video_track); | |
1485 | 1536 |
1486 // Remote video track | 1537 cricket::VideoSenderInfo video_sender_info; |
1487 VideoTrackSourceInterface::Stats remote_video_track_source_stats; | 1538 video_sender_info.local_stats.push_back(cricket::SsrcSenderInfo()); |
1488 remote_video_track_source_stats.input_width = 1234; | 1539 video_sender_info.local_stats[0].ssrc = 1; |
1489 remote_video_track_source_stats.input_height = 4321; | 1540 video_sender_info.send_frame_width = 1234; |
1490 rtc::scoped_refptr<FakeVideoTrackSourceForStats> remote_video_track_source = | 1541 video_sender_info.send_frame_height = 4321; |
1491 new FakeVideoTrackSourceForStats(remote_video_track_source_stats); | 1542 |
1492 rtc::scoped_refptr<FakeVideoTrackForStats> remote_video_track = | 1543 // Remote audio track |
1493 FakeVideoTrackForStats::Create( | 1544 rtc::scoped_refptr<MediaStreamTrackInterface> remote_video_track = |
1494 "RemoteVideoTrackID", | 1545 CreateFakeTrack(cricket::MEDIA_TYPE_VIDEO, "RemoteVideoTrackID", |
1495 MediaStreamTrackInterface::TrackState::kEnded, | 1546 MediaStreamTrackInterface::kEnded); |
1496 remote_video_track_source); | 1547 remote_stream->AddTrack(static_cast<VideoTrackInterface*>( |
1497 remote_stream->AddTrack(remote_video_track); | 1548 remote_video_track.get())); |
1549 | |
1550 cricket::VideoReceiverInfo video_receiver_info; | |
1551 video_receiver_info.local_stats.push_back(cricket::SsrcReceiverInfo()); | |
1552 video_receiver_info.local_stats[0].ssrc = 2; | |
1553 video_receiver_info.frame_width = 6789; | |
1554 video_receiver_info.frame_height = 9876; | |
1555 | |
1556 test_->WireTracksToInfos( | |
1557 {}, {}, | |
1558 { std::make_pair(local_video_track.get(), video_sender_info) }, | |
1559 { std::make_pair(remote_video_track.get(), video_receiver_info) }); | |
1498 | 1560 |
1499 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); | 1561 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); |
1500 | 1562 |
1501 RTCMediaStreamStats expected_local_stream( | 1563 RTCMediaStreamStats expected_local_stream( |
1502 "RTCMediaStream_local_LocalStreamLabel", report->timestamp_us()); | 1564 "RTCMediaStream_local_LocalStreamLabel", report->timestamp_us()); |
1503 expected_local_stream.stream_identifier = local_stream->label(); | 1565 expected_local_stream.stream_identifier = local_stream->label(); |
1504 expected_local_stream.track_ids = std::vector<std::string>(); | 1566 expected_local_stream.track_ids = std::vector<std::string>(); |
1505 expected_local_stream.track_ids->push_back( | 1567 expected_local_stream.track_ids->push_back( |
1506 "RTCMediaStreamTrack_local_LocalVideoTrackID"); | 1568 "RTCMediaStreamTrack_local_video_LocalVideoTrackID_1"); |
1507 ASSERT_TRUE(report->Get(expected_local_stream.id())); | 1569 ASSERT_TRUE(report->Get(expected_local_stream.id())); |
1508 EXPECT_EQ(expected_local_stream, | 1570 EXPECT_EQ(expected_local_stream, |
1509 report->Get(expected_local_stream.id())->cast_to< | 1571 report->Get(expected_local_stream.id())->cast_to< |
1510 RTCMediaStreamStats>()); | 1572 RTCMediaStreamStats>()); |
1511 | 1573 |
1512 RTCMediaStreamStats expected_remote_stream( | 1574 RTCMediaStreamStats expected_remote_stream( |
1513 "RTCMediaStream_remote_RemoteStreamLabel", report->timestamp_us()); | 1575 "RTCMediaStream_remote_RemoteStreamLabel", report->timestamp_us()); |
1514 expected_remote_stream.stream_identifier = remote_stream->label(); | 1576 expected_remote_stream.stream_identifier = remote_stream->label(); |
1515 expected_remote_stream.track_ids = std::vector<std::string>(); | 1577 expected_remote_stream.track_ids = std::vector<std::string>(); |
1516 expected_remote_stream.track_ids->push_back( | 1578 expected_remote_stream.track_ids->push_back( |
1517 "RTCMediaStreamTrack_remote_RemoteVideoTrackID"); | 1579 "RTCMediaStreamTrack_remote_video_RemoteVideoTrackID_2"); |
1518 ASSERT_TRUE(report->Get(expected_remote_stream.id())); | 1580 ASSERT_TRUE(report->Get(expected_remote_stream.id())); |
1519 EXPECT_EQ(expected_remote_stream, | 1581 EXPECT_EQ(expected_remote_stream, |
1520 report->Get(expected_remote_stream.id())->cast_to< | 1582 report->Get(expected_remote_stream.id())->cast_to< |
1521 RTCMediaStreamStats>()); | 1583 RTCMediaStreamStats>()); |
1522 | 1584 |
1523 RTCMediaStreamTrackStats expected_local_video_track( | 1585 RTCMediaStreamTrackStats expected_local_video_track( |
1524 "RTCMediaStreamTrack_local_LocalVideoTrackID", report->timestamp_us(), | 1586 "RTCMediaStreamTrack_local_video_LocalVideoTrackID_1", |
1525 RTCMediaStreamTrackKind::kVideo); | 1587 report->timestamp_us(), RTCMediaStreamTrackKind::kVideo); |
1526 expected_local_video_track.track_identifier = local_video_track->id(); | 1588 expected_local_video_track.track_identifier = local_video_track->id(); |
1527 expected_local_video_track.remote_source = false; | 1589 expected_local_video_track.remote_source = false; |
1528 expected_local_video_track.ended = false; | 1590 expected_local_video_track.ended = false; |
1529 expected_local_video_track.detached = false; | 1591 expected_local_video_track.detached = false; |
1530 expected_local_video_track.frame_width = 1234; | 1592 expected_local_video_track.frame_width = 1234; |
1531 expected_local_video_track.frame_height = 4321; | 1593 expected_local_video_track.frame_height = 4321; |
1532 ASSERT_TRUE(report->Get(expected_local_video_track.id())); | 1594 ASSERT_TRUE(report->Get(expected_local_video_track.id())); |
1533 EXPECT_EQ(expected_local_video_track, | 1595 EXPECT_EQ(expected_local_video_track, |
1534 report->Get(expected_local_video_track.id())->cast_to< | 1596 report->Get(expected_local_video_track.id())->cast_to< |
1535 RTCMediaStreamTrackStats>()); | 1597 RTCMediaStreamTrackStats>()); |
1536 | 1598 |
1537 RTCMediaStreamTrackStats expected_remote_video_track( | 1599 RTCMediaStreamTrackStats expected_remote_video_track( |
1538 "RTCMediaStreamTrack_remote_RemoteVideoTrackID", report->timestamp_us(), | 1600 "RTCMediaStreamTrack_remote_video_RemoteVideoTrackID_2", |
1539 RTCMediaStreamTrackKind::kVideo); | 1601 report->timestamp_us(), RTCMediaStreamTrackKind::kVideo); |
1540 expected_remote_video_track.track_identifier = remote_video_track->id(); | 1602 expected_remote_video_track.track_identifier = remote_video_track->id(); |
1541 expected_remote_video_track.remote_source = true; | 1603 expected_remote_video_track.remote_source = true; |
1542 expected_remote_video_track.ended = true; | 1604 expected_remote_video_track.ended = true; |
1543 expected_remote_video_track.detached = false; | 1605 expected_remote_video_track.detached = false; |
1544 expected_remote_video_track.frame_width = 1234; | 1606 expected_remote_video_track.frame_width = 6789; |
1545 expected_remote_video_track.frame_height = 4321; | 1607 expected_remote_video_track.frame_height = 9876; |
1546 ASSERT_TRUE(report->Get(expected_remote_video_track.id())); | 1608 ASSERT_TRUE(report->Get(expected_remote_video_track.id())); |
1547 EXPECT_EQ(expected_remote_video_track, | 1609 EXPECT_EQ(expected_remote_video_track, |
1548 report->Get(expected_remote_video_track.id())->cast_to< | 1610 report->Get(expected_remote_video_track.id())->cast_to< |
1549 RTCMediaStreamTrackStats>()); | 1611 RTCMediaStreamTrackStats>()); |
1550 } | 1612 } |
1551 | 1613 |
1552 TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Audio) { | 1614 TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Audio) { |
1553 MockVoiceMediaChannel* voice_media_channel = new MockVoiceMediaChannel(); | 1615 MockVoiceMediaChannel* voice_media_channel = new MockVoiceMediaChannel(); |
1554 cricket::VoiceChannel voice_channel( | 1616 cricket::VoiceChannel voice_channel( |
1555 test_->worker_thread(), test_->network_thread(), | 1617 test_->worker_thread(), test_->network_thread(), |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1601 .WillRepeatedly(Return(&voice_channel)); | 1663 .WillRepeatedly(Return(&voice_channel)); |
1602 | 1664 |
1603 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); | 1665 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); |
1604 | 1666 |
1605 RTCInboundRTPStreamStats expected_audio( | 1667 RTCInboundRTPStreamStats expected_audio( |
1606 "RTCInboundRTPAudioStream_1", report->timestamp_us()); | 1668 "RTCInboundRTPAudioStream_1", report->timestamp_us()); |
1607 expected_audio.ssrc = "1"; | 1669 expected_audio.ssrc = "1"; |
1608 expected_audio.is_remote = false; | 1670 expected_audio.is_remote = false; |
1609 expected_audio.media_type = "audio"; | 1671 expected_audio.media_type = "audio"; |
1610 expected_audio.media_track_id = | 1672 expected_audio.media_track_id = |
1611 "RTCMediaStreamTrack_remote_RemoteAudioTrackID"; | 1673 "RTCMediaStreamTrack_remote_audio_RemoteAudioTrackID_1"; |
1612 expected_audio.transport_id = "RTCTransport_TransportName_" + | 1674 expected_audio.transport_id = "RTCTransport_TransportName_" + |
1613 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); | 1675 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); |
1614 expected_audio.codec_id = "RTCCodec_InboundAudio_42"; | 1676 expected_audio.codec_id = "RTCCodec_InboundAudio_42"; |
1615 expected_audio.packets_received = 2; | 1677 expected_audio.packets_received = 2; |
1616 expected_audio.bytes_received = 3; | 1678 expected_audio.bytes_received = 3; |
1617 expected_audio.packets_lost = 42; | 1679 expected_audio.packets_lost = 42; |
1618 expected_audio.jitter = 4.5; | 1680 expected_audio.jitter = 4.5; |
1619 expected_audio.fraction_lost = 5.5; | 1681 expected_audio.fraction_lost = 5.5; |
1620 | 1682 |
1621 ASSERT(report->Get(expected_audio.id())); | 1683 ASSERT(report->Get(expected_audio.id())); |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1683 .WillRepeatedly(Return(&video_channel)); | 1745 .WillRepeatedly(Return(&video_channel)); |
1684 | 1746 |
1685 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); | 1747 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); |
1686 | 1748 |
1687 RTCInboundRTPStreamStats expected_video( | 1749 RTCInboundRTPStreamStats expected_video( |
1688 "RTCInboundRTPVideoStream_1", report->timestamp_us()); | 1750 "RTCInboundRTPVideoStream_1", report->timestamp_us()); |
1689 expected_video.ssrc = "1"; | 1751 expected_video.ssrc = "1"; |
1690 expected_video.is_remote = false; | 1752 expected_video.is_remote = false; |
1691 expected_video.media_type = "video"; | 1753 expected_video.media_type = "video"; |
1692 expected_video.media_track_id = | 1754 expected_video.media_track_id = |
1693 "RTCMediaStreamTrack_remote_RemoteVideoTrackID"; | 1755 "RTCMediaStreamTrack_remote_video_RemoteVideoTrackID_1"; |
1694 expected_video.transport_id = "RTCTransport_TransportName_" + | 1756 expected_video.transport_id = "RTCTransport_TransportName_" + |
1695 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); | 1757 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); |
1696 expected_video.codec_id = "RTCCodec_InboundVideo_42"; | 1758 expected_video.codec_id = "RTCCodec_InboundVideo_42"; |
1697 expected_video.fir_count = 5; | 1759 expected_video.fir_count = 5; |
1698 expected_video.pli_count = 6; | 1760 expected_video.pli_count = 6; |
1699 expected_video.nack_count = 7; | 1761 expected_video.nack_count = 7; |
1700 expected_video.packets_received = 2; | 1762 expected_video.packets_received = 2; |
1701 expected_video.bytes_received = 3; | 1763 expected_video.bytes_received = 3; |
1702 expected_video.packets_lost = 42; | 1764 expected_video.packets_lost = 42; |
1703 expected_video.fraction_lost = 4.5; | 1765 expected_video.fraction_lost = 4.5; |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1761 EXPECT_CALL(test_->session(), voice_channel()) | 1823 EXPECT_CALL(test_->session(), voice_channel()) |
1762 .WillRepeatedly(Return(&voice_channel)); | 1824 .WillRepeatedly(Return(&voice_channel)); |
1763 | 1825 |
1764 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); | 1826 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); |
1765 | 1827 |
1766 RTCOutboundRTPStreamStats expected_audio( | 1828 RTCOutboundRTPStreamStats expected_audio( |
1767 "RTCOutboundRTPAudioStream_1", report->timestamp_us()); | 1829 "RTCOutboundRTPAudioStream_1", report->timestamp_us()); |
1768 expected_audio.ssrc = "1"; | 1830 expected_audio.ssrc = "1"; |
1769 expected_audio.is_remote = false; | 1831 expected_audio.is_remote = false; |
1770 expected_audio.media_type = "audio"; | 1832 expected_audio.media_type = "audio"; |
1771 expected_audio.media_track_id = "RTCMediaStreamTrack_local_LocalAudioTrackID"; | 1833 expected_audio.media_track_id = |
1834 "RTCMediaStreamTrack_local_audio_LocalAudioTrackID_1"; | |
1772 expected_audio.transport_id = "RTCTransport_TransportName_" + | 1835 expected_audio.transport_id = "RTCTransport_TransportName_" + |
1773 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); | 1836 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); |
1774 expected_audio.codec_id = "RTCCodec_OutboundAudio_42"; | 1837 expected_audio.codec_id = "RTCCodec_OutboundAudio_42"; |
1775 expected_audio.packets_sent = 2; | 1838 expected_audio.packets_sent = 2; |
1776 expected_audio.bytes_sent = 3; | 1839 expected_audio.bytes_sent = 3; |
1777 expected_audio.round_trip_time = 4.5; | 1840 expected_audio.round_trip_time = 4.5; |
1778 | 1841 |
1779 ASSERT(report->Get(expected_audio.id())); | 1842 ASSERT(report->Get(expected_audio.id())); |
1780 const RTCOutboundRTPStreamStats& audio = report->Get( | 1843 const RTCOutboundRTPStreamStats& audio = report->Get( |
1781 expected_audio.id())->cast_to<RTCOutboundRTPStreamStats>(); | 1844 expected_audio.id())->cast_to<RTCOutboundRTPStreamStats>(); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1839 EXPECT_CALL(test_->session(), video_channel()) | 1902 EXPECT_CALL(test_->session(), video_channel()) |
1840 .WillRepeatedly(Return(&video_channel)); | 1903 .WillRepeatedly(Return(&video_channel)); |
1841 | 1904 |
1842 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); | 1905 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); |
1843 | 1906 |
1844 RTCOutboundRTPStreamStats expected_video( | 1907 RTCOutboundRTPStreamStats expected_video( |
1845 "RTCOutboundRTPVideoStream_1", report->timestamp_us()); | 1908 "RTCOutboundRTPVideoStream_1", report->timestamp_us()); |
1846 expected_video.ssrc = "1"; | 1909 expected_video.ssrc = "1"; |
1847 expected_video.is_remote = false; | 1910 expected_video.is_remote = false; |
1848 expected_video.media_type = "video"; | 1911 expected_video.media_type = "video"; |
1849 expected_video.media_track_id = "RTCMediaStreamTrack_local_LocalVideoTrackID"; | 1912 expected_video.media_track_id = |
1913 "RTCMediaStreamTrack_local_video_LocalVideoTrackID_1"; | |
1850 expected_video.transport_id = "RTCTransport_TransportName_" + | 1914 expected_video.transport_id = "RTCTransport_TransportName_" + |
1851 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); | 1915 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); |
1852 expected_video.codec_id = "RTCCodec_OutboundVideo_42"; | 1916 expected_video.codec_id = "RTCCodec_OutboundVideo_42"; |
1853 expected_video.fir_count = 2; | 1917 expected_video.fir_count = 2; |
1854 expected_video.pli_count = 3; | 1918 expected_video.pli_count = 3; |
1855 expected_video.nack_count = 4; | 1919 expected_video.nack_count = 4; |
1856 expected_video.packets_sent = 5; | 1920 expected_video.packets_sent = 5; |
1857 expected_video.bytes_sent = 6; | 1921 expected_video.bytes_sent = 6; |
1858 expected_video.round_trip_time = 7.5; | 1922 expected_video.round_trip_time = 7.5; |
1859 expected_video.frames_encoded = 8; | 1923 expected_video.frames_encoded = 8; |
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2139 | 2203 |
2140 protected: | 2204 protected: |
2141 rtc::scoped_refptr<RTCStatsCollectorTestHelper> test_; | 2205 rtc::scoped_refptr<RTCStatsCollectorTestHelper> test_; |
2142 rtc::scoped_refptr<FakeRTCStatsCollector> collector_; | 2206 rtc::scoped_refptr<FakeRTCStatsCollector> collector_; |
2143 }; | 2207 }; |
2144 | 2208 |
2145 TEST_F(RTCStatsCollectorTestWithFakeCollector, ThreadUsageAndResultsMerging) { | 2209 TEST_F(RTCStatsCollectorTestWithFakeCollector, ThreadUsageAndResultsMerging) { |
2146 collector_->VerifyThreadUsageAndResultsMerging(); | 2210 collector_->VerifyThreadUsageAndResultsMerging(); |
2147 } | 2211 } |
2148 | 2212 |
2149 } // namespace | 2213 } // namespace |
Taylor Brandstetter
2017/01/18 20:10:27
Since this CL adds the ability to have multiple tr
hbos
2017/01/19 10:00:00
Done.
| |
2150 | 2214 |
2151 } // namespace webrtc | 2215 } // namespace webrtc |
OLD | NEW |