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

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

Issue 2641763003: RTCMediaStreamTrackStats collected on a per-attachment basis. (Closed)
Patch Set: Multiple senders for local video track too, not just for local audio track Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/api/rtcstatscollector.cc ('k') | no next file » | 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
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
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
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
385 void CreateMockRtpSendersReceiversAndChannels(
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
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_ssrc1;
1343 32767, 1389 voice_sender_info_ssrc1.local_stats.push_back(cricket::SsrcSenderInfo());
1344 new FakeAudioProcessorForStats(local_audio_processor_stats)); 1390 voice_sender_info_ssrc1.local_stats[0].ssrc = 1;
1345 local_stream->AddTrack(local_audio_track); 1391 voice_sender_info_ssrc1.audio_level = 32767;
1392 voice_sender_info_ssrc1.echo_return_loss = 42;
1393 voice_sender_info_ssrc1.echo_return_loss_enhancement = 52;
1394
Taylor Brandstetter 2017/01/19 17:20:32 nit: Could add comment here that this VoiceSenderI
hbos 2017/01/20 09:43:22 Done.
1395 cricket::VoiceSenderInfo voice_sender_info_ssrc2;
1396 voice_sender_info_ssrc2.local_stats.push_back(cricket::SsrcSenderInfo());
1397 voice_sender_info_ssrc2.local_stats[0].ssrc = 2;
1398 voice_sender_info_ssrc2.audio_level = 0;
1399 voice_sender_info_ssrc2.echo_return_loss = -100;
1400 voice_sender_info_ssrc2.echo_return_loss_enhancement = -100;
1346 1401
1347 // Remote audio track 1402 // Remote audio track
1348 AudioProcessorInterface::AudioProcessorStats remote_audio_processor_stats; 1403 rtc::scoped_refptr<MediaStreamTrackInterface> remote_audio_track =
1349 remote_audio_processor_stats.echo_return_loss = 13; 1404 CreateFakeTrack(cricket::MEDIA_TYPE_AUDIO, "RemoteAudioTrackID",
1350 remote_audio_processor_stats.echo_return_loss_enhancement = 37; 1405 MediaStreamTrackInterface::kLive);
1351 rtc::scoped_refptr<FakeAudioTrackForStats> remote_audio_track = 1406 remote_stream->AddTrack(static_cast<AudioTrackInterface*>(
1352 FakeAudioTrackForStats::Create( 1407 remote_audio_track.get()));
1353 "RemoteAudioTrackID", 1408
1354 MediaStreamTrackInterface::TrackState::kLive, 1409 cricket::VoiceReceiverInfo voice_receiver_info;
1355 0, 1410 voice_receiver_info.local_stats.push_back(cricket::SsrcReceiverInfo());
1356 new FakeAudioProcessorForStats(remote_audio_processor_stats)); 1411 voice_receiver_info.local_stats[0].ssrc = 3;
1357 remote_stream->AddTrack(remote_audio_track); 1412 voice_receiver_info.audio_level = 16383;
1413
1414 test_->CreateMockRtpSendersReceiversAndChannels(
1415 { std::make_pair(local_audio_track.get(), voice_sender_info_ssrc1),
1416 std::make_pair(local_audio_track.get(), voice_sender_info_ssrc2) },
1417 { std::make_pair(remote_audio_track.get(), voice_receiver_info) },
1418 {}, {});
1358 1419
1359 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); 1420 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport();
1360 1421
1361 RTCMediaStreamStats expected_local_stream( 1422 RTCMediaStreamStats expected_local_stream(
1362 "RTCMediaStream_local_LocalStreamLabel", report->timestamp_us()); 1423 "RTCMediaStream_local_LocalStreamLabel", report->timestamp_us());
1363 expected_local_stream.stream_identifier = local_stream->label(); 1424 expected_local_stream.stream_identifier = local_stream->label();
1364 expected_local_stream.track_ids = std::vector<std::string>(); 1425 expected_local_stream.track_ids = std::vector<std::string>(
1365 expected_local_stream.track_ids->push_back( 1426 { "RTCMediaStreamTrack_local_audio_LocalAudioTrackID_1",
1366 "RTCMediaStreamTrack_local_LocalAudioTrackID"); 1427 "RTCMediaStreamTrack_local_audio_LocalAudioTrackID_2" });
1367 ASSERT_TRUE(report->Get(expected_local_stream.id())); 1428 ASSERT_TRUE(report->Get(expected_local_stream.id()));
1368 EXPECT_EQ(expected_local_stream, 1429 EXPECT_EQ(expected_local_stream,
1369 report->Get(expected_local_stream.id())->cast_to< 1430 report->Get(expected_local_stream.id())->cast_to<
1370 RTCMediaStreamStats>()); 1431 RTCMediaStreamStats>());
1371 1432
1372 RTCMediaStreamStats expected_remote_stream( 1433 RTCMediaStreamStats expected_remote_stream(
1373 "RTCMediaStream_remote_RemoteStreamLabel", report->timestamp_us()); 1434 "RTCMediaStream_remote_RemoteStreamLabel", report->timestamp_us());
1374 expected_remote_stream.stream_identifier = remote_stream->label(); 1435 expected_remote_stream.stream_identifier = remote_stream->label();
1375 expected_remote_stream.track_ids = std::vector<std::string>(); 1436 expected_remote_stream.track_ids = std::vector<std::string>({
1376 expected_remote_stream.track_ids->push_back( 1437 "RTCMediaStreamTrack_remote_audio_RemoteAudioTrackID_3" });
1377 "RTCMediaStreamTrack_remote_RemoteAudioTrackID");
1378 ASSERT_TRUE(report->Get(expected_remote_stream.id())); 1438 ASSERT_TRUE(report->Get(expected_remote_stream.id()));
1379 EXPECT_EQ(expected_remote_stream, 1439 EXPECT_EQ(expected_remote_stream,
1380 report->Get(expected_remote_stream.id())->cast_to< 1440 report->Get(expected_remote_stream.id())->cast_to<
1381 RTCMediaStreamStats>()); 1441 RTCMediaStreamStats>());
1382 1442
1383 RTCMediaStreamTrackStats expected_local_audio_track( 1443 RTCMediaStreamTrackStats expected_local_audio_track_ssrc1(
1384 "RTCMediaStreamTrack_local_LocalAudioTrackID", report->timestamp_us(), 1444 "RTCMediaStreamTrack_local_audio_LocalAudioTrackID_1",
1385 RTCMediaStreamTrackKind::kAudio); 1445 report->timestamp_us(), RTCMediaStreamTrackKind::kAudio);
1386 expected_local_audio_track.track_identifier = local_audio_track->id(); 1446 expected_local_audio_track_ssrc1.track_identifier = local_audio_track->id();
1387 expected_local_audio_track.remote_source = false; 1447 expected_local_audio_track_ssrc1.remote_source = false;
1388 expected_local_audio_track.ended = true; 1448 expected_local_audio_track_ssrc1.ended = true;
1389 expected_local_audio_track.detached = false; 1449 expected_local_audio_track_ssrc1.detached = false;
1390 expected_local_audio_track.audio_level = 1.0; 1450 expected_local_audio_track_ssrc1.audio_level = 1.0;
1391 expected_local_audio_track.echo_return_loss = 42.0; 1451 expected_local_audio_track_ssrc1.echo_return_loss = 42.0;
1392 expected_local_audio_track.echo_return_loss_enhancement = 52.0; 1452 expected_local_audio_track_ssrc1.echo_return_loss_enhancement = 52.0;
1393 ASSERT_TRUE(report->Get(expected_local_audio_track.id())); 1453 ASSERT_TRUE(report->Get(expected_local_audio_track_ssrc1.id()));
1394 EXPECT_EQ(expected_local_audio_track, 1454 EXPECT_EQ(expected_local_audio_track_ssrc1,
1395 report->Get(expected_local_audio_track.id())->cast_to< 1455 report->Get(expected_local_audio_track_ssrc1.id())->cast_to<
1456 RTCMediaStreamTrackStats>());
1457
1458 RTCMediaStreamTrackStats expected_local_audio_track_ssrc2(
1459 "RTCMediaStreamTrack_local_audio_LocalAudioTrackID_2",
1460 report->timestamp_us(), RTCMediaStreamTrackKind::kAudio);
1461 expected_local_audio_track_ssrc2.track_identifier = local_audio_track->id();
1462 expected_local_audio_track_ssrc2.remote_source = false;
1463 expected_local_audio_track_ssrc2.ended = true;
1464 expected_local_audio_track_ssrc2.detached = false;
1465 expected_local_audio_track_ssrc2.audio_level = 0.0;
1466 // Should be undefined: |expected_local_audio_track_ssrc2.echo_return_loss|
1467 // and |expected_local_audio_track_ssrc2.echo_return_loss_enhancement|.
1468 ASSERT_TRUE(report->Get(expected_local_audio_track_ssrc2.id()));
1469 EXPECT_EQ(expected_local_audio_track_ssrc2,
1470 report->Get(expected_local_audio_track_ssrc2.id())->cast_to<
1396 RTCMediaStreamTrackStats>()); 1471 RTCMediaStreamTrackStats>());
1397 1472
1398 RTCMediaStreamTrackStats expected_remote_audio_track( 1473 RTCMediaStreamTrackStats expected_remote_audio_track(
1399 "RTCMediaStreamTrack_remote_RemoteAudioTrackID", report->timestamp_us(), 1474 "RTCMediaStreamTrack_remote_audio_RemoteAudioTrackID_3",
1400 RTCMediaStreamTrackKind::kAudio); 1475 report->timestamp_us(), RTCMediaStreamTrackKind::kAudio);
1401 expected_remote_audio_track.track_identifier = remote_audio_track->id(); 1476 expected_remote_audio_track.track_identifier = remote_audio_track->id();
1402 expected_remote_audio_track.remote_source = true; 1477 expected_remote_audio_track.remote_source = true;
1403 expected_remote_audio_track.ended = false; 1478 expected_remote_audio_track.ended = false;
1404 expected_remote_audio_track.detached = false; 1479 expected_remote_audio_track.detached = false;
1405 expected_remote_audio_track.audio_level = 0.0; 1480 expected_remote_audio_track.audio_level = 16383.0 / 32767.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())); 1481 ASSERT_TRUE(report->Get(expected_remote_audio_track.id()));
1409 EXPECT_EQ(expected_remote_audio_track, 1482 EXPECT_EQ(expected_remote_audio_track,
1410 report->Get(expected_remote_audio_track.id())->cast_to< 1483 report->Get(expected_remote_audio_track.id())->cast_to<
1411 RTCMediaStreamTrackStats>()); 1484 RTCMediaStreamTrackStats>());
1412 } 1485 }
1413 1486
1414 TEST_F(RTCStatsCollectorTest, 1487 TEST_F(RTCStatsCollectorTest,
1415 CollectRTCMediaStreamStatsAndRTCMediaStreamTrackStats_Audio_Defaults) {
1416 rtc::scoped_refptr<StreamCollection> local_streams =
1417 StreamCollection::Create();
1418 EXPECT_CALL(test_->pc(), local_streams())
1419 .WillRepeatedly(Return(local_streams));
1420
1421 rtc::scoped_refptr<MediaStream> local_stream =
1422 MediaStream::Create("LocalStreamLabel");
1423 local_streams->AddStream(local_stream);
1424
1425 // Local audio track
1426 AudioProcessorInterface::AudioProcessorStats local_audio_processor_stats;
1427 local_audio_processor_stats.echo_return_loss = -100;
1428 local_audio_processor_stats.echo_return_loss_enhancement = -100;
1429 rtc::scoped_refptr<FakeAudioTrackForStats> local_audio_track =
1430 FakeAudioTrackForStats::Create(
1431 "LocalAudioTrackID",
1432 MediaStreamTrackInterface::TrackState::kEnded,
1433 32767,
1434 new FakeAudioProcessorForStats(local_audio_processor_stats));
1435 local_stream->AddTrack(local_audio_track);
1436
1437 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport();
1438
1439 RTCMediaStreamTrackStats expected_local_audio_track(
1440 "RTCMediaStreamTrack_local_LocalAudioTrackID", report->timestamp_us(),
1441 RTCMediaStreamTrackKind::kAudio);
1442 expected_local_audio_track.track_identifier = local_audio_track->id();
1443 expected_local_audio_track.remote_source = false;
1444 expected_local_audio_track.ended = true;
1445 expected_local_audio_track.detached = false;
1446 expected_local_audio_track.audio_level = 1.0;
1447 // Should be undefined: |expected_local_audio_track.echo_return_loss| and
1448 // |expected_local_audio_track.echo_return_loss_enhancement|.
1449 ASSERT_TRUE(report->Get(expected_local_audio_track.id()));
1450 EXPECT_EQ(expected_local_audio_track,
1451 report->Get(expected_local_audio_track.id())->cast_to<
1452 RTCMediaStreamTrackStats>());
1453 }
1454
1455 TEST_F(RTCStatsCollectorTest,
1456 CollectRTCMediaStreamStatsAndRTCMediaStreamTrackStats_Video) { 1488 CollectRTCMediaStreamStatsAndRTCMediaStreamTrackStats_Video) {
1457 rtc::scoped_refptr<StreamCollection> local_streams = 1489 rtc::scoped_refptr<StreamCollection> local_streams =
1458 StreamCollection::Create(); 1490 StreamCollection::Create();
1459 rtc::scoped_refptr<StreamCollection> remote_streams = 1491 rtc::scoped_refptr<StreamCollection> remote_streams =
1460 StreamCollection::Create(); 1492 StreamCollection::Create();
1461 EXPECT_CALL(test_->pc(), local_streams()) 1493 EXPECT_CALL(test_->pc(), local_streams())
1462 .WillRepeatedly(Return(local_streams)); 1494 .WillRepeatedly(Return(local_streams));
1463 EXPECT_CALL(test_->pc(), remote_streams()) 1495 EXPECT_CALL(test_->pc(), remote_streams())
1464 .WillRepeatedly(Return(remote_streams)); 1496 .WillRepeatedly(Return(remote_streams));
1465 1497
1466 rtc::scoped_refptr<MediaStream> local_stream = 1498 rtc::scoped_refptr<MediaStream> local_stream =
1467 MediaStream::Create("LocalStreamLabel"); 1499 MediaStream::Create("LocalStreamLabel");
1468 local_streams->AddStream(local_stream); 1500 local_streams->AddStream(local_stream);
1469 rtc::scoped_refptr<MediaStream> remote_stream = 1501 rtc::scoped_refptr<MediaStream> remote_stream =
1470 MediaStream::Create("RemoteStreamLabel"); 1502 MediaStream::Create("RemoteStreamLabel");
1471 remote_streams->AddStream(remote_stream); 1503 remote_streams->AddStream(remote_stream);
1472 1504
1473 // Local video track 1505 // Local video track
1474 VideoTrackSourceInterface::Stats local_video_track_source_stats; 1506 rtc::scoped_refptr<MediaStreamTrackInterface> local_video_track =
1475 local_video_track_source_stats.input_width = 1234; 1507 CreateFakeTrack(cricket::MEDIA_TYPE_VIDEO, "LocalVideoTrackID",
1476 local_video_track_source_stats.input_height = 4321; 1508 MediaStreamTrackInterface::kLive);
1477 rtc::scoped_refptr<FakeVideoTrackSourceForStats> local_video_track_source = 1509 local_stream->AddTrack(static_cast<VideoTrackInterface*>(
1478 new FakeVideoTrackSourceForStats(local_video_track_source_stats); 1510 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 1511
1486 // Remote video track 1512 cricket::VideoSenderInfo video_sender_info_ssrc1;
1487 VideoTrackSourceInterface::Stats remote_video_track_source_stats; 1513 video_sender_info_ssrc1.local_stats.push_back(cricket::SsrcSenderInfo());
1488 remote_video_track_source_stats.input_width = 1234; 1514 video_sender_info_ssrc1.local_stats[0].ssrc = 1;
1489 remote_video_track_source_stats.input_height = 4321; 1515 video_sender_info_ssrc1.send_frame_width = 1234;
1490 rtc::scoped_refptr<FakeVideoTrackSourceForStats> remote_video_track_source = 1516 video_sender_info_ssrc1.send_frame_height = 4321;
1491 new FakeVideoTrackSourceForStats(remote_video_track_source_stats); 1517
1492 rtc::scoped_refptr<FakeVideoTrackForStats> remote_video_track = 1518 cricket::VideoSenderInfo video_sender_info_ssrc2;
1493 FakeVideoTrackForStats::Create( 1519 video_sender_info_ssrc2.local_stats.push_back(cricket::SsrcSenderInfo());
1494 "RemoteVideoTrackID", 1520 video_sender_info_ssrc2.local_stats[0].ssrc = 2;
1495 MediaStreamTrackInterface::TrackState::kEnded, 1521 video_sender_info_ssrc2.send_frame_width = 4321;
1496 remote_video_track_source); 1522 video_sender_info_ssrc2.send_frame_height = 1234;
1497 remote_stream->AddTrack(remote_video_track); 1523
1524 // Remote audio track with values
1525 rtc::scoped_refptr<MediaStreamTrackInterface> remote_video_track_ssrc3 =
1526 CreateFakeTrack(cricket::MEDIA_TYPE_VIDEO, "RemoteVideoTrackID3",
1527 MediaStreamTrackInterface::kEnded);
1528 remote_stream->AddTrack(static_cast<VideoTrackInterface*>(
1529 remote_video_track_ssrc3.get()));
1530
1531 cricket::VideoReceiverInfo video_receiver_info_ssrc3;
1532 video_receiver_info_ssrc3.local_stats.push_back(cricket::SsrcReceiverInfo());
1533 video_receiver_info_ssrc3.local_stats[0].ssrc = 3;
1534 video_receiver_info_ssrc3.frame_width = 6789;
1535 video_receiver_info_ssrc3.frame_height = 9876;
1536
1537 // Remote audio track with undefined (default) values
Taylor Brandstetter 2017/01/19 17:20:32 Typo, should say "remote video track"
hbos 2017/01/20 09:43:22 Done.
1538 rtc::scoped_refptr<MediaStreamTrackInterface> remote_video_track_ssrc4 =
1539 CreateFakeTrack(cricket::MEDIA_TYPE_VIDEO, "RemoteVideoTrackID4",
1540 MediaStreamTrackInterface::kLive);
1541 remote_stream->AddTrack(static_cast<VideoTrackInterface*>(
1542 remote_video_track_ssrc4.get()));
1543
1544 cricket::VideoReceiverInfo video_receiver_info_ssrc4;
1545 video_receiver_info_ssrc4.local_stats.push_back(cricket::SsrcReceiverInfo());
1546 video_receiver_info_ssrc4.local_stats[0].ssrc = 4;
1547 video_receiver_info_ssrc4.frame_width = 0;
1548 video_receiver_info_ssrc4.frame_height = 0;
1549
1550 test_->CreateMockRtpSendersReceiversAndChannels(
1551 {}, {},
1552 { std::make_pair(local_video_track.get(), video_sender_info_ssrc1),
1553 std::make_pair(local_video_track.get(), video_sender_info_ssrc2) },
1554 { std::make_pair(remote_video_track_ssrc3.get(),
1555 video_receiver_info_ssrc3),
1556 std::make_pair(remote_video_track_ssrc4.get(),
1557 video_receiver_info_ssrc4) });
1498 1558
1499 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); 1559 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport();
1500 1560
1501 RTCMediaStreamStats expected_local_stream( 1561 RTCMediaStreamStats expected_local_stream(
1502 "RTCMediaStream_local_LocalStreamLabel", report->timestamp_us()); 1562 "RTCMediaStream_local_LocalStreamLabel", report->timestamp_us());
1503 expected_local_stream.stream_identifier = local_stream->label(); 1563 expected_local_stream.stream_identifier = local_stream->label();
1504 expected_local_stream.track_ids = std::vector<std::string>(); 1564 expected_local_stream.track_ids = std::vector<std::string>({
1505 expected_local_stream.track_ids->push_back( 1565 "RTCMediaStreamTrack_local_video_LocalVideoTrackID_1",
1506 "RTCMediaStreamTrack_local_LocalVideoTrackID"); 1566 "RTCMediaStreamTrack_local_video_LocalVideoTrackID_2" });
1507 ASSERT_TRUE(report->Get(expected_local_stream.id())); 1567 ASSERT_TRUE(report->Get(expected_local_stream.id()));
1508 EXPECT_EQ(expected_local_stream, 1568 EXPECT_EQ(expected_local_stream,
1509 report->Get(expected_local_stream.id())->cast_to< 1569 report->Get(expected_local_stream.id())->cast_to<
1510 RTCMediaStreamStats>()); 1570 RTCMediaStreamStats>());
1511 1571
1512 RTCMediaStreamStats expected_remote_stream( 1572 RTCMediaStreamStats expected_remote_stream(
1513 "RTCMediaStream_remote_RemoteStreamLabel", report->timestamp_us()); 1573 "RTCMediaStream_remote_RemoteStreamLabel", report->timestamp_us());
1514 expected_remote_stream.stream_identifier = remote_stream->label(); 1574 expected_remote_stream.stream_identifier = remote_stream->label();
1515 expected_remote_stream.track_ids = std::vector<std::string>(); 1575 expected_remote_stream.track_ids = std::vector<std::string>({
1516 expected_remote_stream.track_ids->push_back( 1576 "RTCMediaStreamTrack_remote_video_RemoteVideoTrackID3_3",
1517 "RTCMediaStreamTrack_remote_RemoteVideoTrackID"); 1577 "RTCMediaStreamTrack_remote_video_RemoteVideoTrackID4_4" });
1518 ASSERT_TRUE(report->Get(expected_remote_stream.id())); 1578 ASSERT_TRUE(report->Get(expected_remote_stream.id()));
1519 EXPECT_EQ(expected_remote_stream, 1579 EXPECT_EQ(expected_remote_stream,
1520 report->Get(expected_remote_stream.id())->cast_to< 1580 report->Get(expected_remote_stream.id())->cast_to<
1521 RTCMediaStreamStats>()); 1581 RTCMediaStreamStats>());
1522 1582
1523 RTCMediaStreamTrackStats expected_local_video_track( 1583 RTCMediaStreamTrackStats expected_local_video_track_ssrc1(
1524 "RTCMediaStreamTrack_local_LocalVideoTrackID", report->timestamp_us(), 1584 "RTCMediaStreamTrack_local_video_LocalVideoTrackID_1",
1525 RTCMediaStreamTrackKind::kVideo); 1585 report->timestamp_us(), RTCMediaStreamTrackKind::kVideo);
1526 expected_local_video_track.track_identifier = local_video_track->id(); 1586 expected_local_video_track_ssrc1.track_identifier = local_video_track->id();
1527 expected_local_video_track.remote_source = false; 1587 expected_local_video_track_ssrc1.remote_source = false;
1528 expected_local_video_track.ended = false; 1588 expected_local_video_track_ssrc1.ended = false;
1529 expected_local_video_track.detached = false; 1589 expected_local_video_track_ssrc1.detached = false;
1530 expected_local_video_track.frame_width = 1234; 1590 expected_local_video_track_ssrc1.frame_width = 1234;
1531 expected_local_video_track.frame_height = 4321; 1591 expected_local_video_track_ssrc1.frame_height = 4321;
1532 ASSERT_TRUE(report->Get(expected_local_video_track.id())); 1592 ASSERT_TRUE(report->Get(expected_local_video_track_ssrc1.id()));
1533 EXPECT_EQ(expected_local_video_track, 1593 EXPECT_EQ(expected_local_video_track_ssrc1,
1534 report->Get(expected_local_video_track.id())->cast_to< 1594 report->Get(expected_local_video_track_ssrc1.id())->cast_to<
1535 RTCMediaStreamTrackStats>()); 1595 RTCMediaStreamTrackStats>());
1536 1596
1537 RTCMediaStreamTrackStats expected_remote_video_track( 1597 RTCMediaStreamTrackStats expected_local_video_track_ssrc2(
1538 "RTCMediaStreamTrack_remote_RemoteVideoTrackID", report->timestamp_us(), 1598 "RTCMediaStreamTrack_local_video_LocalVideoTrackID_2",
1539 RTCMediaStreamTrackKind::kVideo); 1599 report->timestamp_us(), RTCMediaStreamTrackKind::kVideo);
1540 expected_remote_video_track.track_identifier = remote_video_track->id(); 1600 expected_local_video_track_ssrc2.track_identifier = local_video_track->id();
1541 expected_remote_video_track.remote_source = true; 1601 expected_local_video_track_ssrc2.remote_source = false;
1542 expected_remote_video_track.ended = true; 1602 expected_local_video_track_ssrc2.ended = false;
1543 expected_remote_video_track.detached = false; 1603 expected_local_video_track_ssrc2.detached = false;
1544 expected_remote_video_track.frame_width = 1234; 1604 expected_local_video_track_ssrc2.frame_width = 4321;
1545 expected_remote_video_track.frame_height = 4321; 1605 expected_local_video_track_ssrc2.frame_height = 1234;
1546 ASSERT_TRUE(report->Get(expected_remote_video_track.id())); 1606 ASSERT_TRUE(report->Get(expected_local_video_track_ssrc2.id()));
1547 EXPECT_EQ(expected_remote_video_track, 1607 EXPECT_EQ(expected_local_video_track_ssrc2,
1548 report->Get(expected_remote_video_track.id())->cast_to< 1608 report->Get(expected_local_video_track_ssrc2.id())->cast_to<
1609 RTCMediaStreamTrackStats>());
1610
1611 RTCMediaStreamTrackStats expected_remote_video_track_ssrc3(
1612 "RTCMediaStreamTrack_remote_video_RemoteVideoTrackID3_3",
1613 report->timestamp_us(), RTCMediaStreamTrackKind::kVideo);
1614 expected_remote_video_track_ssrc3.track_identifier =
1615 remote_video_track_ssrc3->id();
1616 expected_remote_video_track_ssrc3.remote_source = true;
1617 expected_remote_video_track_ssrc3.ended = true;
1618 expected_remote_video_track_ssrc3.detached = false;
1619 expected_remote_video_track_ssrc3.frame_width = 6789;
1620 expected_remote_video_track_ssrc3.frame_height = 9876;
1621 ASSERT_TRUE(report->Get(expected_remote_video_track_ssrc3.id()));
1622 EXPECT_EQ(expected_remote_video_track_ssrc3,
1623 report->Get(expected_remote_video_track_ssrc3.id())->cast_to<
1624 RTCMediaStreamTrackStats>());
1625
1626 RTCMediaStreamTrackStats expected_remote_video_track_ssrc4(
1627 "RTCMediaStreamTrack_remote_video_RemoteVideoTrackID4_4",
1628 report->timestamp_us(), RTCMediaStreamTrackKind::kVideo);
1629 expected_remote_video_track_ssrc4.track_identifier =
1630 remote_video_track_ssrc4->id();
1631 expected_remote_video_track_ssrc4.remote_source = true;
1632 expected_remote_video_track_ssrc4.ended = false;
1633 expected_remote_video_track_ssrc4.detached = false;
1634 // Should be undefined: |expected_remote_video_track_ssrc4.frame_width| and
1635 // |expected_remote_video_track_ssrc4.frame_height|.
1636 ASSERT_TRUE(report->Get(expected_remote_video_track_ssrc4.id()));
1637 EXPECT_EQ(expected_remote_video_track_ssrc4,
1638 report->Get(expected_remote_video_track_ssrc4.id())->cast_to<
1549 RTCMediaStreamTrackStats>()); 1639 RTCMediaStreamTrackStats>());
1550 } 1640 }
1551 1641
1552 TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Audio) { 1642 TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Audio) {
1553 MockVoiceMediaChannel* voice_media_channel = new MockVoiceMediaChannel(); 1643 MockVoiceMediaChannel* voice_media_channel = new MockVoiceMediaChannel();
1554 cricket::VoiceChannel voice_channel( 1644 cricket::VoiceChannel voice_channel(
1555 test_->worker_thread(), test_->network_thread(), 1645 test_->worker_thread(), test_->network_thread(),
1556 test_->signaling_thread(), test_->media_engine(), voice_media_channel, 1646 test_->signaling_thread(), test_->media_engine(), voice_media_channel,
1557 "VoiceContentName", kDefaultRtcpMuxRequired, kDefaultSrtpRequired); 1647 "VoiceContentName", kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
1558 1648
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1601 .WillRepeatedly(Return(&voice_channel)); 1691 .WillRepeatedly(Return(&voice_channel));
1602 1692
1603 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); 1693 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport();
1604 1694
1605 RTCInboundRTPStreamStats expected_audio( 1695 RTCInboundRTPStreamStats expected_audio(
1606 "RTCInboundRTPAudioStream_1", report->timestamp_us()); 1696 "RTCInboundRTPAudioStream_1", report->timestamp_us());
1607 expected_audio.ssrc = "1"; 1697 expected_audio.ssrc = "1";
1608 expected_audio.is_remote = false; 1698 expected_audio.is_remote = false;
1609 expected_audio.media_type = "audio"; 1699 expected_audio.media_type = "audio";
1610 expected_audio.media_track_id = 1700 expected_audio.media_track_id =
1611 "RTCMediaStreamTrack_remote_RemoteAudioTrackID"; 1701 "RTCMediaStreamTrack_remote_audio_RemoteAudioTrackID_1";
1612 expected_audio.transport_id = "RTCTransport_TransportName_" + 1702 expected_audio.transport_id = "RTCTransport_TransportName_" +
1613 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); 1703 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP);
1614 expected_audio.codec_id = "RTCCodec_InboundAudio_42"; 1704 expected_audio.codec_id = "RTCCodec_InboundAudio_42";
1615 expected_audio.packets_received = 2; 1705 expected_audio.packets_received = 2;
1616 expected_audio.bytes_received = 3; 1706 expected_audio.bytes_received = 3;
1617 expected_audio.packets_lost = 42; 1707 expected_audio.packets_lost = 42;
1618 expected_audio.jitter = 4.5; 1708 expected_audio.jitter = 4.5;
1619 expected_audio.fraction_lost = 5.5; 1709 expected_audio.fraction_lost = 5.5;
1620 1710
1621 ASSERT(report->Get(expected_audio.id())); 1711 ASSERT(report->Get(expected_audio.id()));
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1683 .WillRepeatedly(Return(&video_channel)); 1773 .WillRepeatedly(Return(&video_channel));
1684 1774
1685 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); 1775 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport();
1686 1776
1687 RTCInboundRTPStreamStats expected_video( 1777 RTCInboundRTPStreamStats expected_video(
1688 "RTCInboundRTPVideoStream_1", report->timestamp_us()); 1778 "RTCInboundRTPVideoStream_1", report->timestamp_us());
1689 expected_video.ssrc = "1"; 1779 expected_video.ssrc = "1";
1690 expected_video.is_remote = false; 1780 expected_video.is_remote = false;
1691 expected_video.media_type = "video"; 1781 expected_video.media_type = "video";
1692 expected_video.media_track_id = 1782 expected_video.media_track_id =
1693 "RTCMediaStreamTrack_remote_RemoteVideoTrackID"; 1783 "RTCMediaStreamTrack_remote_video_RemoteVideoTrackID_1";
1694 expected_video.transport_id = "RTCTransport_TransportName_" + 1784 expected_video.transport_id = "RTCTransport_TransportName_" +
1695 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); 1785 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP);
1696 expected_video.codec_id = "RTCCodec_InboundVideo_42"; 1786 expected_video.codec_id = "RTCCodec_InboundVideo_42";
1697 expected_video.fir_count = 5; 1787 expected_video.fir_count = 5;
1698 expected_video.pli_count = 6; 1788 expected_video.pli_count = 6;
1699 expected_video.nack_count = 7; 1789 expected_video.nack_count = 7;
1700 expected_video.packets_received = 2; 1790 expected_video.packets_received = 2;
1701 expected_video.bytes_received = 3; 1791 expected_video.bytes_received = 3;
1702 expected_video.packets_lost = 42; 1792 expected_video.packets_lost = 42;
1703 expected_video.fraction_lost = 4.5; 1793 expected_video.fraction_lost = 4.5;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1761 EXPECT_CALL(test_->session(), voice_channel()) 1851 EXPECT_CALL(test_->session(), voice_channel())
1762 .WillRepeatedly(Return(&voice_channel)); 1852 .WillRepeatedly(Return(&voice_channel));
1763 1853
1764 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); 1854 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport();
1765 1855
1766 RTCOutboundRTPStreamStats expected_audio( 1856 RTCOutboundRTPStreamStats expected_audio(
1767 "RTCOutboundRTPAudioStream_1", report->timestamp_us()); 1857 "RTCOutboundRTPAudioStream_1", report->timestamp_us());
1768 expected_audio.ssrc = "1"; 1858 expected_audio.ssrc = "1";
1769 expected_audio.is_remote = false; 1859 expected_audio.is_remote = false;
1770 expected_audio.media_type = "audio"; 1860 expected_audio.media_type = "audio";
1771 expected_audio.media_track_id = "RTCMediaStreamTrack_local_LocalAudioTrackID"; 1861 expected_audio.media_track_id =
1862 "RTCMediaStreamTrack_local_audio_LocalAudioTrackID_1";
1772 expected_audio.transport_id = "RTCTransport_TransportName_" + 1863 expected_audio.transport_id = "RTCTransport_TransportName_" +
1773 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); 1864 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP);
1774 expected_audio.codec_id = "RTCCodec_OutboundAudio_42"; 1865 expected_audio.codec_id = "RTCCodec_OutboundAudio_42";
1775 expected_audio.packets_sent = 2; 1866 expected_audio.packets_sent = 2;
1776 expected_audio.bytes_sent = 3; 1867 expected_audio.bytes_sent = 3;
1777 expected_audio.round_trip_time = 4.5; 1868 expected_audio.round_trip_time = 4.5;
1778 1869
1779 ASSERT(report->Get(expected_audio.id())); 1870 ASSERT(report->Get(expected_audio.id()));
1780 const RTCOutboundRTPStreamStats& audio = report->Get( 1871 const RTCOutboundRTPStreamStats& audio = report->Get(
1781 expected_audio.id())->cast_to<RTCOutboundRTPStreamStats>(); 1872 expected_audio.id())->cast_to<RTCOutboundRTPStreamStats>();
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1839 EXPECT_CALL(test_->session(), video_channel()) 1930 EXPECT_CALL(test_->session(), video_channel())
1840 .WillRepeatedly(Return(&video_channel)); 1931 .WillRepeatedly(Return(&video_channel));
1841 1932
1842 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); 1933 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport();
1843 1934
1844 RTCOutboundRTPStreamStats expected_video( 1935 RTCOutboundRTPStreamStats expected_video(
1845 "RTCOutboundRTPVideoStream_1", report->timestamp_us()); 1936 "RTCOutboundRTPVideoStream_1", report->timestamp_us());
1846 expected_video.ssrc = "1"; 1937 expected_video.ssrc = "1";
1847 expected_video.is_remote = false; 1938 expected_video.is_remote = false;
1848 expected_video.media_type = "video"; 1939 expected_video.media_type = "video";
1849 expected_video.media_track_id = "RTCMediaStreamTrack_local_LocalVideoTrackID"; 1940 expected_video.media_track_id =
1941 "RTCMediaStreamTrack_local_video_LocalVideoTrackID_1";
1850 expected_video.transport_id = "RTCTransport_TransportName_" + 1942 expected_video.transport_id = "RTCTransport_TransportName_" +
1851 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); 1943 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP);
1852 expected_video.codec_id = "RTCCodec_OutboundVideo_42"; 1944 expected_video.codec_id = "RTCCodec_OutboundVideo_42";
1853 expected_video.fir_count = 2; 1945 expected_video.fir_count = 2;
1854 expected_video.pli_count = 3; 1946 expected_video.pli_count = 3;
1855 expected_video.nack_count = 4; 1947 expected_video.nack_count = 4;
1856 expected_video.packets_sent = 5; 1948 expected_video.packets_sent = 5;
1857 expected_video.bytes_sent = 6; 1949 expected_video.bytes_sent = 6;
1858 expected_video.round_trip_time = 7.5; 1950 expected_video.round_trip_time = 7.5;
1859 expected_video.frames_encoded = 8; 1951 expected_video.frames_encoded = 8;
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
2142 rtc::scoped_refptr<FakeRTCStatsCollector> collector_; 2234 rtc::scoped_refptr<FakeRTCStatsCollector> collector_;
2143 }; 2235 };
2144 2236
2145 TEST_F(RTCStatsCollectorTestWithFakeCollector, ThreadUsageAndResultsMerging) { 2237 TEST_F(RTCStatsCollectorTestWithFakeCollector, ThreadUsageAndResultsMerging) {
2146 collector_->VerifyThreadUsageAndResultsMerging(); 2238 collector_->VerifyThreadUsageAndResultsMerging();
2147 } 2239 }
2148 2240
2149 } // namespace 2241 } // namespace
2150 2242
2151 } // namespace webrtc 2243 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/api/rtcstatscollector.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698