| 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 |
| 385 // Attaches tracks to peer connections by configuring RTP senders and RTP |
| 386 // receivers according to the tracks' pairings with |
| 387 // |[Voice/Video][Sender/Receiver]Info| and their SSRCs. Local tracks can be |
| 388 // associated with multiple |[Voice/Video]SenderInfo|s, remote tracks can only |
| 389 // be associated with one |[Voice/Video]ReceiverInfo|. |
| 390 void CreateMockRtpSendersReceiversAndChannels( |
| 391 std::initializer_list<std::pair<MediaStreamTrackInterface*, |
| 392 cricket::VoiceSenderInfo>> local_audio_track_info_pairs, |
| 393 std::initializer_list<std::pair<MediaStreamTrackInterface*, |
| 394 cricket::VoiceReceiverInfo>> remote_audio_track_info_pairs, |
| 395 std::initializer_list<std::pair<MediaStreamTrackInterface*, |
| 396 cricket::VideoSenderInfo>> local_video_track_info_pairs, |
| 397 std::initializer_list<std::pair<MediaStreamTrackInterface*, |
| 398 cricket::VideoReceiverInfo>> remote_video_track_info_pairs) { |
| 399 voice_media_info_.reset(new cricket::VoiceMediaInfo()); |
| 400 video_media_info_.reset(new cricket::VideoMediaInfo()); |
| 401 rtp_senders_.clear(); |
| 402 rtp_receivers_.clear(); |
| 403 // Local audio tracks and voice sender infos |
| 404 for (auto& pair : local_audio_track_info_pairs) { |
| 405 MediaStreamTrackInterface* local_audio_track = pair.first; |
| 406 const cricket::VoiceSenderInfo& voice_sender_info = pair.second; |
| 407 RTC_DCHECK_EQ(local_audio_track->kind(), |
| 408 MediaStreamTrackInterface::kAudioKind); |
| 409 |
| 410 voice_media_info_->senders.push_back(voice_sender_info); |
| 411 rtc::scoped_refptr<MockRtpSender> rtp_sender = |
| 412 CreateMockSender(rtc::scoped_refptr<MediaStreamTrackInterface>( |
| 413 local_audio_track), |
| 414 voice_sender_info.local_stats[0].ssrc); |
| 415 rtp_senders_.push_back(rtc::scoped_refptr<RtpSenderInterface>( |
| 416 rtp_sender.get())); |
| 417 } |
| 418 // Remote audio tracks and voice receiver infos |
| 419 for (auto& pair : remote_audio_track_info_pairs) { |
| 420 MediaStreamTrackInterface* remote_audio_track = pair.first; |
| 421 const cricket::VoiceReceiverInfo& voice_receiver_info = pair.second; |
| 422 RTC_DCHECK_EQ(remote_audio_track->kind(), |
| 423 MediaStreamTrackInterface::kAudioKind); |
| 424 |
| 425 voice_media_info_->receivers.push_back(voice_receiver_info); |
| 426 rtc::scoped_refptr<MockRtpReceiver> rtp_receiver = |
| 427 CreateMockReceiver(rtc::scoped_refptr<MediaStreamTrackInterface>( |
| 428 remote_audio_track), |
| 429 voice_receiver_info.local_stats[0].ssrc); |
| 430 rtp_receivers_.push_back(rtc::scoped_refptr<RtpReceiverInterface>( |
| 431 rtp_receiver.get())); |
| 432 } |
| 433 // Local video tracks and video sender infos |
| 434 for (auto& pair : local_video_track_info_pairs) { |
| 435 MediaStreamTrackInterface* local_video_track = pair.first; |
| 436 const cricket::VideoSenderInfo& video_sender_info = pair.second; |
| 437 RTC_DCHECK_EQ(local_video_track->kind(), |
| 438 MediaStreamTrackInterface::kVideoKind); |
| 439 |
| 440 video_media_info_->senders.push_back(video_sender_info); |
| 441 rtc::scoped_refptr<MockRtpSender> rtp_sender = |
| 442 CreateMockSender(rtc::scoped_refptr<MediaStreamTrackInterface>( |
| 443 local_video_track), |
| 444 video_sender_info.local_stats[0].ssrc); |
| 445 rtp_senders_.push_back(rtc::scoped_refptr<RtpSenderInterface>( |
| 446 rtp_sender.get())); |
| 447 } |
| 448 // Remote video tracks and video receiver infos |
| 449 for (auto& pair : remote_video_track_info_pairs) { |
| 450 MediaStreamTrackInterface* remote_video_track = pair.first; |
| 451 const cricket::VideoReceiverInfo& video_receiver_info = pair.second; |
| 452 RTC_DCHECK_EQ(remote_video_track->kind(), |
| 453 MediaStreamTrackInterface::kVideoKind); |
| 454 |
| 455 video_media_info_->receivers.push_back(video_receiver_info); |
| 456 rtc::scoped_refptr<MockRtpReceiver> rtp_receiver = |
| 457 CreateMockReceiver(rtc::scoped_refptr<MediaStreamTrackInterface>( |
| 458 remote_video_track), |
| 459 video_receiver_info.local_stats[0].ssrc); |
| 460 rtp_receivers_.push_back(rtc::scoped_refptr<RtpReceiverInterface>( |
| 461 rtp_receiver.get())); |
| 462 } |
| 463 EXPECT_CALL(pc_, GetSenders()).WillRepeatedly(Return(rtp_senders_)); |
| 464 EXPECT_CALL(pc_, GetReceivers()).WillRepeatedly(Return(rtp_receivers_)); |
| 465 |
| 466 MockVoiceMediaChannel* voice_media_channel = new MockVoiceMediaChannel(); |
| 467 voice_channel_.reset(new cricket::VoiceChannel( |
| 468 worker_thread_, network_thread_, nullptr, media_engine_, |
| 469 voice_media_channel, "VoiceContentName", kDefaultRtcpMuxRequired, |
| 470 kDefaultSrtpRequired)); |
| 471 EXPECT_CALL(session_, voice_channel()) |
| 472 .WillRepeatedly(Return(voice_channel_.get())); |
| 473 EXPECT_CALL(*voice_media_channel, GetStats(_)) |
| 474 .WillOnce(DoAll(SetArgPointee<0>(*voice_media_info_), Return(true))); |
| 475 |
| 476 MockVideoMediaChannel* video_media_channel = new MockVideoMediaChannel(); |
| 477 video_channel_.reset(new cricket::VideoChannel( |
| 478 worker_thread_, network_thread_, nullptr, video_media_channel, |
| 479 "VideoContentName", kDefaultRtcpMuxRequired, kDefaultSrtpRequired)); |
| 480 EXPECT_CALL(session_, video_channel()) |
| 481 .WillRepeatedly(Return(video_channel_.get())); |
| 482 EXPECT_CALL(*video_media_channel, GetStats(_)) |
| 483 .WillOnce(DoAll(SetArgPointee<0>(*video_media_info_), Return(true))); |
| 484 } |
| 485 |
| 441 private: | 486 private: |
| 442 rtc::ScopedFakeClock fake_clock_; | 487 rtc::ScopedFakeClock fake_clock_; |
| 443 RtcEventLogNullImpl event_log_; | 488 RtcEventLogNullImpl event_log_; |
| 444 rtc::Thread* const worker_thread_; | 489 rtc::Thread* const worker_thread_; |
| 445 rtc::Thread* const network_thread_; | 490 rtc::Thread* const network_thread_; |
| 446 rtc::Thread* const signaling_thread_; | 491 rtc::Thread* const signaling_thread_; |
| 447 cricket::FakeMediaEngine* media_engine_; | 492 cricket::FakeMediaEngine* media_engine_; |
| 448 std::unique_ptr<cricket::ChannelManager> channel_manager_; | 493 std::unique_ptr<cricket::ChannelManager> channel_manager_; |
| 449 std::unique_ptr<MediaControllerInterface> media_controller_; | 494 std::unique_ptr<MediaControllerInterface> media_controller_; |
| 450 MockWebRtcSession session_; | 495 MockWebRtcSession session_; |
| 451 MockPeerConnection pc_; | 496 MockPeerConnection pc_; |
| 452 | 497 |
| 453 std::vector<rtc::scoped_refptr<DataChannel>> data_channels_; | 498 std::vector<rtc::scoped_refptr<DataChannel>> data_channels_; |
| 499 std::unique_ptr<cricket::VoiceChannel> voice_channel_; |
| 500 std::unique_ptr<cricket::VideoChannel> video_channel_; |
| 501 std::unique_ptr<cricket::VoiceMediaInfo> voice_media_info_; |
| 502 std::unique_ptr<cricket::VideoMediaInfo> video_media_info_; |
| 503 std::vector<rtc::scoped_refptr<RtpSenderInterface>> rtp_senders_; |
| 504 std::vector<rtc::scoped_refptr<RtpReceiverInterface>> rtp_receivers_; |
| 454 }; | 505 }; |
| 455 | 506 |
| 456 class RTCTestStats : public RTCStats { | 507 class RTCTestStats : public RTCStats { |
| 457 public: | 508 public: |
| 458 WEBRTC_RTCSTATS_DECL(); | 509 WEBRTC_RTCSTATS_DECL(); |
| 459 | 510 |
| 460 RTCTestStats(const std::string& id, int64_t timestamp_us) | 511 RTCTestStats(const std::string& id, int64_t timestamp_us) |
| 461 : RTCStats(id, timestamp_us), | 512 : RTCStats(id, timestamp_us), |
| 462 dummy_stat("dummyStat") {} | 513 dummy_stat("dummyStat") {} |
| 463 | 514 |
| (...skipping 862 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1326 .WillRepeatedly(Return(remote_streams)); | 1377 .WillRepeatedly(Return(remote_streams)); |
| 1327 | 1378 |
| 1328 rtc::scoped_refptr<MediaStream> local_stream = | 1379 rtc::scoped_refptr<MediaStream> local_stream = |
| 1329 MediaStream::Create("LocalStreamLabel"); | 1380 MediaStream::Create("LocalStreamLabel"); |
| 1330 local_streams->AddStream(local_stream); | 1381 local_streams->AddStream(local_stream); |
| 1331 rtc::scoped_refptr<MediaStream> remote_stream = | 1382 rtc::scoped_refptr<MediaStream> remote_stream = |
| 1332 MediaStream::Create("RemoteStreamLabel"); | 1383 MediaStream::Create("RemoteStreamLabel"); |
| 1333 remote_streams->AddStream(remote_stream); | 1384 remote_streams->AddStream(remote_stream); |
| 1334 | 1385 |
| 1335 // Local audio track | 1386 // Local audio track |
| 1336 AudioProcessorInterface::AudioProcessorStats local_audio_processor_stats; | 1387 rtc::scoped_refptr<MediaStreamTrackInterface> local_audio_track = |
| 1337 local_audio_processor_stats.echo_return_loss = 42; | 1388 CreateFakeTrack(cricket::MEDIA_TYPE_AUDIO, "LocalAudioTrackID", |
| 1338 local_audio_processor_stats.echo_return_loss_enhancement = 52; | 1389 MediaStreamTrackInterface::kEnded); |
| 1339 rtc::scoped_refptr<FakeAudioTrackForStats> local_audio_track = | 1390 local_stream->AddTrack(static_cast<AudioTrackInterface*>( |
| 1340 FakeAudioTrackForStats::Create( | 1391 local_audio_track.get())); |
| 1341 "LocalAudioTrackID", | 1392 |
| 1342 MediaStreamTrackInterface::TrackState::kEnded, | 1393 cricket::VoiceSenderInfo voice_sender_info_ssrc1; |
| 1343 32767, | 1394 voice_sender_info_ssrc1.local_stats.push_back(cricket::SsrcSenderInfo()); |
| 1344 new FakeAudioProcessorForStats(local_audio_processor_stats)); | 1395 voice_sender_info_ssrc1.local_stats[0].ssrc = 1; |
| 1345 local_stream->AddTrack(local_audio_track); | 1396 voice_sender_info_ssrc1.audio_level = 32767; |
| 1397 voice_sender_info_ssrc1.echo_return_loss = 42; |
| 1398 voice_sender_info_ssrc1.echo_return_loss_enhancement = 52; |
| 1399 |
| 1400 // Uses default values, the corresponding stats object should contain |
| 1401 // undefined members. |
| 1402 cricket::VoiceSenderInfo voice_sender_info_ssrc2; |
| 1403 voice_sender_info_ssrc2.local_stats.push_back(cricket::SsrcSenderInfo()); |
| 1404 voice_sender_info_ssrc2.local_stats[0].ssrc = 2; |
| 1405 voice_sender_info_ssrc2.audio_level = 0; |
| 1406 voice_sender_info_ssrc2.echo_return_loss = -100; |
| 1407 voice_sender_info_ssrc2.echo_return_loss_enhancement = -100; |
| 1346 | 1408 |
| 1347 // Remote audio track | 1409 // Remote audio track |
| 1348 AudioProcessorInterface::AudioProcessorStats remote_audio_processor_stats; | 1410 rtc::scoped_refptr<MediaStreamTrackInterface> remote_audio_track = |
| 1349 remote_audio_processor_stats.echo_return_loss = 13; | 1411 CreateFakeTrack(cricket::MEDIA_TYPE_AUDIO, "RemoteAudioTrackID", |
| 1350 remote_audio_processor_stats.echo_return_loss_enhancement = 37; | 1412 MediaStreamTrackInterface::kLive); |
| 1351 rtc::scoped_refptr<FakeAudioTrackForStats> remote_audio_track = | 1413 remote_stream->AddTrack(static_cast<AudioTrackInterface*>( |
| 1352 FakeAudioTrackForStats::Create( | 1414 remote_audio_track.get())); |
| 1353 "RemoteAudioTrackID", | 1415 |
| 1354 MediaStreamTrackInterface::TrackState::kLive, | 1416 cricket::VoiceReceiverInfo voice_receiver_info; |
| 1355 0, | 1417 voice_receiver_info.local_stats.push_back(cricket::SsrcReceiverInfo()); |
| 1356 new FakeAudioProcessorForStats(remote_audio_processor_stats)); | 1418 voice_receiver_info.local_stats[0].ssrc = 3; |
| 1357 remote_stream->AddTrack(remote_audio_track); | 1419 voice_receiver_info.audio_level = 16383; |
| 1420 |
| 1421 test_->CreateMockRtpSendersReceiversAndChannels( |
| 1422 { std::make_pair(local_audio_track.get(), voice_sender_info_ssrc1), |
| 1423 std::make_pair(local_audio_track.get(), voice_sender_info_ssrc2) }, |
| 1424 { std::make_pair(remote_audio_track.get(), voice_receiver_info) }, |
| 1425 {}, {}); |
| 1358 | 1426 |
| 1359 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); | 1427 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); |
| 1360 | 1428 |
| 1361 RTCMediaStreamStats expected_local_stream( | 1429 RTCMediaStreamStats expected_local_stream( |
| 1362 "RTCMediaStream_local_LocalStreamLabel", report->timestamp_us()); | 1430 "RTCMediaStream_local_LocalStreamLabel", report->timestamp_us()); |
| 1363 expected_local_stream.stream_identifier = local_stream->label(); | 1431 expected_local_stream.stream_identifier = local_stream->label(); |
| 1364 expected_local_stream.track_ids = std::vector<std::string>(); | 1432 expected_local_stream.track_ids = std::vector<std::string>( |
| 1365 expected_local_stream.track_ids->push_back( | 1433 { "RTCMediaStreamTrack_local_audio_LocalAudioTrackID_1", |
| 1366 "RTCMediaStreamTrack_local_LocalAudioTrackID"); | 1434 "RTCMediaStreamTrack_local_audio_LocalAudioTrackID_2" }); |
| 1367 ASSERT_TRUE(report->Get(expected_local_stream.id())); | 1435 ASSERT_TRUE(report->Get(expected_local_stream.id())); |
| 1368 EXPECT_EQ(expected_local_stream, | 1436 EXPECT_EQ(expected_local_stream, |
| 1369 report->Get(expected_local_stream.id())->cast_to< | 1437 report->Get(expected_local_stream.id())->cast_to< |
| 1370 RTCMediaStreamStats>()); | 1438 RTCMediaStreamStats>()); |
| 1371 | 1439 |
| 1372 RTCMediaStreamStats expected_remote_stream( | 1440 RTCMediaStreamStats expected_remote_stream( |
| 1373 "RTCMediaStream_remote_RemoteStreamLabel", report->timestamp_us()); | 1441 "RTCMediaStream_remote_RemoteStreamLabel", report->timestamp_us()); |
| 1374 expected_remote_stream.stream_identifier = remote_stream->label(); | 1442 expected_remote_stream.stream_identifier = remote_stream->label(); |
| 1375 expected_remote_stream.track_ids = std::vector<std::string>(); | 1443 expected_remote_stream.track_ids = std::vector<std::string>({ |
| 1376 expected_remote_stream.track_ids->push_back( | 1444 "RTCMediaStreamTrack_remote_audio_RemoteAudioTrackID_3" }); |
| 1377 "RTCMediaStreamTrack_remote_RemoteAudioTrackID"); | |
| 1378 ASSERT_TRUE(report->Get(expected_remote_stream.id())); | 1445 ASSERT_TRUE(report->Get(expected_remote_stream.id())); |
| 1379 EXPECT_EQ(expected_remote_stream, | 1446 EXPECT_EQ(expected_remote_stream, |
| 1380 report->Get(expected_remote_stream.id())->cast_to< | 1447 report->Get(expected_remote_stream.id())->cast_to< |
| 1381 RTCMediaStreamStats>()); | 1448 RTCMediaStreamStats>()); |
| 1382 | 1449 |
| 1383 RTCMediaStreamTrackStats expected_local_audio_track( | 1450 RTCMediaStreamTrackStats expected_local_audio_track_ssrc1( |
| 1384 "RTCMediaStreamTrack_local_LocalAudioTrackID", report->timestamp_us(), | 1451 "RTCMediaStreamTrack_local_audio_LocalAudioTrackID_1", |
| 1385 RTCMediaStreamTrackKind::kAudio); | 1452 report->timestamp_us(), RTCMediaStreamTrackKind::kAudio); |
| 1386 expected_local_audio_track.track_identifier = local_audio_track->id(); | 1453 expected_local_audio_track_ssrc1.track_identifier = local_audio_track->id(); |
| 1387 expected_local_audio_track.remote_source = false; | 1454 expected_local_audio_track_ssrc1.remote_source = false; |
| 1388 expected_local_audio_track.ended = true; | 1455 expected_local_audio_track_ssrc1.ended = true; |
| 1389 expected_local_audio_track.detached = false; | 1456 expected_local_audio_track_ssrc1.detached = false; |
| 1390 expected_local_audio_track.audio_level = 1.0; | 1457 expected_local_audio_track_ssrc1.audio_level = 1.0; |
| 1391 expected_local_audio_track.echo_return_loss = 42.0; | 1458 expected_local_audio_track_ssrc1.echo_return_loss = 42.0; |
| 1392 expected_local_audio_track.echo_return_loss_enhancement = 52.0; | 1459 expected_local_audio_track_ssrc1.echo_return_loss_enhancement = 52.0; |
| 1393 ASSERT_TRUE(report->Get(expected_local_audio_track.id())); | 1460 ASSERT_TRUE(report->Get(expected_local_audio_track_ssrc1.id())); |
| 1394 EXPECT_EQ(expected_local_audio_track, | 1461 EXPECT_EQ(expected_local_audio_track_ssrc1, |
| 1395 report->Get(expected_local_audio_track.id())->cast_to< | 1462 report->Get(expected_local_audio_track_ssrc1.id())->cast_to< |
| 1463 RTCMediaStreamTrackStats>()); |
| 1464 |
| 1465 RTCMediaStreamTrackStats expected_local_audio_track_ssrc2( |
| 1466 "RTCMediaStreamTrack_local_audio_LocalAudioTrackID_2", |
| 1467 report->timestamp_us(), RTCMediaStreamTrackKind::kAudio); |
| 1468 expected_local_audio_track_ssrc2.track_identifier = local_audio_track->id(); |
| 1469 expected_local_audio_track_ssrc2.remote_source = false; |
| 1470 expected_local_audio_track_ssrc2.ended = true; |
| 1471 expected_local_audio_track_ssrc2.detached = false; |
| 1472 expected_local_audio_track_ssrc2.audio_level = 0.0; |
| 1473 // Should be undefined: |expected_local_audio_track_ssrc2.echo_return_loss| |
| 1474 // and |expected_local_audio_track_ssrc2.echo_return_loss_enhancement|. |
| 1475 ASSERT_TRUE(report->Get(expected_local_audio_track_ssrc2.id())); |
| 1476 EXPECT_EQ(expected_local_audio_track_ssrc2, |
| 1477 report->Get(expected_local_audio_track_ssrc2.id())->cast_to< |
| 1396 RTCMediaStreamTrackStats>()); | 1478 RTCMediaStreamTrackStats>()); |
| 1397 | 1479 |
| 1398 RTCMediaStreamTrackStats expected_remote_audio_track( | 1480 RTCMediaStreamTrackStats expected_remote_audio_track( |
| 1399 "RTCMediaStreamTrack_remote_RemoteAudioTrackID", report->timestamp_us(), | 1481 "RTCMediaStreamTrack_remote_audio_RemoteAudioTrackID_3", |
| 1400 RTCMediaStreamTrackKind::kAudio); | 1482 report->timestamp_us(), RTCMediaStreamTrackKind::kAudio); |
| 1401 expected_remote_audio_track.track_identifier = remote_audio_track->id(); | 1483 expected_remote_audio_track.track_identifier = remote_audio_track->id(); |
| 1402 expected_remote_audio_track.remote_source = true; | 1484 expected_remote_audio_track.remote_source = true; |
| 1403 expected_remote_audio_track.ended = false; | 1485 expected_remote_audio_track.ended = false; |
| 1404 expected_remote_audio_track.detached = false; | 1486 expected_remote_audio_track.detached = false; |
| 1405 expected_remote_audio_track.audio_level = 0.0; | 1487 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())); | 1488 ASSERT_TRUE(report->Get(expected_remote_audio_track.id())); |
| 1409 EXPECT_EQ(expected_remote_audio_track, | 1489 EXPECT_EQ(expected_remote_audio_track, |
| 1410 report->Get(expected_remote_audio_track.id())->cast_to< | 1490 report->Get(expected_remote_audio_track.id())->cast_to< |
| 1411 RTCMediaStreamTrackStats>()); | 1491 RTCMediaStreamTrackStats>()); |
| 1412 } | 1492 } |
| 1413 | 1493 |
| 1414 TEST_F(RTCStatsCollectorTest, | 1494 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) { | 1495 CollectRTCMediaStreamStatsAndRTCMediaStreamTrackStats_Video) { |
| 1457 rtc::scoped_refptr<StreamCollection> local_streams = | 1496 rtc::scoped_refptr<StreamCollection> local_streams = |
| 1458 StreamCollection::Create(); | 1497 StreamCollection::Create(); |
| 1459 rtc::scoped_refptr<StreamCollection> remote_streams = | 1498 rtc::scoped_refptr<StreamCollection> remote_streams = |
| 1460 StreamCollection::Create(); | 1499 StreamCollection::Create(); |
| 1461 EXPECT_CALL(test_->pc(), local_streams()) | 1500 EXPECT_CALL(test_->pc(), local_streams()) |
| 1462 .WillRepeatedly(Return(local_streams)); | 1501 .WillRepeatedly(Return(local_streams)); |
| 1463 EXPECT_CALL(test_->pc(), remote_streams()) | 1502 EXPECT_CALL(test_->pc(), remote_streams()) |
| 1464 .WillRepeatedly(Return(remote_streams)); | 1503 .WillRepeatedly(Return(remote_streams)); |
| 1465 | 1504 |
| 1466 rtc::scoped_refptr<MediaStream> local_stream = | 1505 rtc::scoped_refptr<MediaStream> local_stream = |
| 1467 MediaStream::Create("LocalStreamLabel"); | 1506 MediaStream::Create("LocalStreamLabel"); |
| 1468 local_streams->AddStream(local_stream); | 1507 local_streams->AddStream(local_stream); |
| 1469 rtc::scoped_refptr<MediaStream> remote_stream = | 1508 rtc::scoped_refptr<MediaStream> remote_stream = |
| 1470 MediaStream::Create("RemoteStreamLabel"); | 1509 MediaStream::Create("RemoteStreamLabel"); |
| 1471 remote_streams->AddStream(remote_stream); | 1510 remote_streams->AddStream(remote_stream); |
| 1472 | 1511 |
| 1473 // Local video track | 1512 // Local video track |
| 1474 VideoTrackSourceInterface::Stats local_video_track_source_stats; | 1513 rtc::scoped_refptr<MediaStreamTrackInterface> local_video_track = |
| 1475 local_video_track_source_stats.input_width = 1234; | 1514 CreateFakeTrack(cricket::MEDIA_TYPE_VIDEO, "LocalVideoTrackID", |
| 1476 local_video_track_source_stats.input_height = 4321; | 1515 MediaStreamTrackInterface::kLive); |
| 1477 rtc::scoped_refptr<FakeVideoTrackSourceForStats> local_video_track_source = | 1516 local_stream->AddTrack(static_cast<VideoTrackInterface*>( |
| 1478 new FakeVideoTrackSourceForStats(local_video_track_source_stats); | 1517 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 | 1518 |
| 1486 // Remote video track | 1519 cricket::VideoSenderInfo video_sender_info_ssrc1; |
| 1487 VideoTrackSourceInterface::Stats remote_video_track_source_stats; | 1520 video_sender_info_ssrc1.local_stats.push_back(cricket::SsrcSenderInfo()); |
| 1488 remote_video_track_source_stats.input_width = 1234; | 1521 video_sender_info_ssrc1.local_stats[0].ssrc = 1; |
| 1489 remote_video_track_source_stats.input_height = 4321; | 1522 video_sender_info_ssrc1.send_frame_width = 1234; |
| 1490 rtc::scoped_refptr<FakeVideoTrackSourceForStats> remote_video_track_source = | 1523 video_sender_info_ssrc1.send_frame_height = 4321; |
| 1491 new FakeVideoTrackSourceForStats(remote_video_track_source_stats); | 1524 |
| 1492 rtc::scoped_refptr<FakeVideoTrackForStats> remote_video_track = | 1525 cricket::VideoSenderInfo video_sender_info_ssrc2; |
| 1493 FakeVideoTrackForStats::Create( | 1526 video_sender_info_ssrc2.local_stats.push_back(cricket::SsrcSenderInfo()); |
| 1494 "RemoteVideoTrackID", | 1527 video_sender_info_ssrc2.local_stats[0].ssrc = 2; |
| 1495 MediaStreamTrackInterface::TrackState::kEnded, | 1528 video_sender_info_ssrc2.send_frame_width = 4321; |
| 1496 remote_video_track_source); | 1529 video_sender_info_ssrc2.send_frame_height = 1234; |
| 1497 remote_stream->AddTrack(remote_video_track); | 1530 |
| 1531 // Remote video track with values |
| 1532 rtc::scoped_refptr<MediaStreamTrackInterface> remote_video_track_ssrc3 = |
| 1533 CreateFakeTrack(cricket::MEDIA_TYPE_VIDEO, "RemoteVideoTrackID3", |
| 1534 MediaStreamTrackInterface::kEnded); |
| 1535 remote_stream->AddTrack(static_cast<VideoTrackInterface*>( |
| 1536 remote_video_track_ssrc3.get())); |
| 1537 |
| 1538 cricket::VideoReceiverInfo video_receiver_info_ssrc3; |
| 1539 video_receiver_info_ssrc3.local_stats.push_back(cricket::SsrcReceiverInfo()); |
| 1540 video_receiver_info_ssrc3.local_stats[0].ssrc = 3; |
| 1541 video_receiver_info_ssrc3.frame_width = 6789; |
| 1542 video_receiver_info_ssrc3.frame_height = 9876; |
| 1543 |
| 1544 // Remote video track with undefined (default) values |
| 1545 rtc::scoped_refptr<MediaStreamTrackInterface> remote_video_track_ssrc4 = |
| 1546 CreateFakeTrack(cricket::MEDIA_TYPE_VIDEO, "RemoteVideoTrackID4", |
| 1547 MediaStreamTrackInterface::kLive); |
| 1548 remote_stream->AddTrack(static_cast<VideoTrackInterface*>( |
| 1549 remote_video_track_ssrc4.get())); |
| 1550 |
| 1551 cricket::VideoReceiverInfo video_receiver_info_ssrc4; |
| 1552 video_receiver_info_ssrc4.local_stats.push_back(cricket::SsrcReceiverInfo()); |
| 1553 video_receiver_info_ssrc4.local_stats[0].ssrc = 4; |
| 1554 video_receiver_info_ssrc4.frame_width = 0; |
| 1555 video_receiver_info_ssrc4.frame_height = 0; |
| 1556 |
| 1557 test_->CreateMockRtpSendersReceiversAndChannels( |
| 1558 {}, {}, |
| 1559 { std::make_pair(local_video_track.get(), video_sender_info_ssrc1), |
| 1560 std::make_pair(local_video_track.get(), video_sender_info_ssrc2) }, |
| 1561 { std::make_pair(remote_video_track_ssrc3.get(), |
| 1562 video_receiver_info_ssrc3), |
| 1563 std::make_pair(remote_video_track_ssrc4.get(), |
| 1564 video_receiver_info_ssrc4) }); |
| 1498 | 1565 |
| 1499 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); | 1566 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); |
| 1500 | 1567 |
| 1501 RTCMediaStreamStats expected_local_stream( | 1568 RTCMediaStreamStats expected_local_stream( |
| 1502 "RTCMediaStream_local_LocalStreamLabel", report->timestamp_us()); | 1569 "RTCMediaStream_local_LocalStreamLabel", report->timestamp_us()); |
| 1503 expected_local_stream.stream_identifier = local_stream->label(); | 1570 expected_local_stream.stream_identifier = local_stream->label(); |
| 1504 expected_local_stream.track_ids = std::vector<std::string>(); | 1571 expected_local_stream.track_ids = std::vector<std::string>({ |
| 1505 expected_local_stream.track_ids->push_back( | 1572 "RTCMediaStreamTrack_local_video_LocalVideoTrackID_1", |
| 1506 "RTCMediaStreamTrack_local_LocalVideoTrackID"); | 1573 "RTCMediaStreamTrack_local_video_LocalVideoTrackID_2" }); |
| 1507 ASSERT_TRUE(report->Get(expected_local_stream.id())); | 1574 ASSERT_TRUE(report->Get(expected_local_stream.id())); |
| 1508 EXPECT_EQ(expected_local_stream, | 1575 EXPECT_EQ(expected_local_stream, |
| 1509 report->Get(expected_local_stream.id())->cast_to< | 1576 report->Get(expected_local_stream.id())->cast_to< |
| 1510 RTCMediaStreamStats>()); | 1577 RTCMediaStreamStats>()); |
| 1511 | 1578 |
| 1512 RTCMediaStreamStats expected_remote_stream( | 1579 RTCMediaStreamStats expected_remote_stream( |
| 1513 "RTCMediaStream_remote_RemoteStreamLabel", report->timestamp_us()); | 1580 "RTCMediaStream_remote_RemoteStreamLabel", report->timestamp_us()); |
| 1514 expected_remote_stream.stream_identifier = remote_stream->label(); | 1581 expected_remote_stream.stream_identifier = remote_stream->label(); |
| 1515 expected_remote_stream.track_ids = std::vector<std::string>(); | 1582 expected_remote_stream.track_ids = std::vector<std::string>({ |
| 1516 expected_remote_stream.track_ids->push_back( | 1583 "RTCMediaStreamTrack_remote_video_RemoteVideoTrackID3_3", |
| 1517 "RTCMediaStreamTrack_remote_RemoteVideoTrackID"); | 1584 "RTCMediaStreamTrack_remote_video_RemoteVideoTrackID4_4" }); |
| 1518 ASSERT_TRUE(report->Get(expected_remote_stream.id())); | 1585 ASSERT_TRUE(report->Get(expected_remote_stream.id())); |
| 1519 EXPECT_EQ(expected_remote_stream, | 1586 EXPECT_EQ(expected_remote_stream, |
| 1520 report->Get(expected_remote_stream.id())->cast_to< | 1587 report->Get(expected_remote_stream.id())->cast_to< |
| 1521 RTCMediaStreamStats>()); | 1588 RTCMediaStreamStats>()); |
| 1522 | 1589 |
| 1523 RTCMediaStreamTrackStats expected_local_video_track( | 1590 RTCMediaStreamTrackStats expected_local_video_track_ssrc1( |
| 1524 "RTCMediaStreamTrack_local_LocalVideoTrackID", report->timestamp_us(), | 1591 "RTCMediaStreamTrack_local_video_LocalVideoTrackID_1", |
| 1525 RTCMediaStreamTrackKind::kVideo); | 1592 report->timestamp_us(), RTCMediaStreamTrackKind::kVideo); |
| 1526 expected_local_video_track.track_identifier = local_video_track->id(); | 1593 expected_local_video_track_ssrc1.track_identifier = local_video_track->id(); |
| 1527 expected_local_video_track.remote_source = false; | 1594 expected_local_video_track_ssrc1.remote_source = false; |
| 1528 expected_local_video_track.ended = false; | 1595 expected_local_video_track_ssrc1.ended = false; |
| 1529 expected_local_video_track.detached = false; | 1596 expected_local_video_track_ssrc1.detached = false; |
| 1530 expected_local_video_track.frame_width = 1234; | 1597 expected_local_video_track_ssrc1.frame_width = 1234; |
| 1531 expected_local_video_track.frame_height = 4321; | 1598 expected_local_video_track_ssrc1.frame_height = 4321; |
| 1532 ASSERT_TRUE(report->Get(expected_local_video_track.id())); | 1599 ASSERT_TRUE(report->Get(expected_local_video_track_ssrc1.id())); |
| 1533 EXPECT_EQ(expected_local_video_track, | 1600 EXPECT_EQ(expected_local_video_track_ssrc1, |
| 1534 report->Get(expected_local_video_track.id())->cast_to< | 1601 report->Get(expected_local_video_track_ssrc1.id())->cast_to< |
| 1535 RTCMediaStreamTrackStats>()); | 1602 RTCMediaStreamTrackStats>()); |
| 1536 | 1603 |
| 1537 RTCMediaStreamTrackStats expected_remote_video_track( | 1604 RTCMediaStreamTrackStats expected_local_video_track_ssrc2( |
| 1538 "RTCMediaStreamTrack_remote_RemoteVideoTrackID", report->timestamp_us(), | 1605 "RTCMediaStreamTrack_local_video_LocalVideoTrackID_2", |
| 1539 RTCMediaStreamTrackKind::kVideo); | 1606 report->timestamp_us(), RTCMediaStreamTrackKind::kVideo); |
| 1540 expected_remote_video_track.track_identifier = remote_video_track->id(); | 1607 expected_local_video_track_ssrc2.track_identifier = local_video_track->id(); |
| 1541 expected_remote_video_track.remote_source = true; | 1608 expected_local_video_track_ssrc2.remote_source = false; |
| 1542 expected_remote_video_track.ended = true; | 1609 expected_local_video_track_ssrc2.ended = false; |
| 1543 expected_remote_video_track.detached = false; | 1610 expected_local_video_track_ssrc2.detached = false; |
| 1544 expected_remote_video_track.frame_width = 1234; | 1611 expected_local_video_track_ssrc2.frame_width = 4321; |
| 1545 expected_remote_video_track.frame_height = 4321; | 1612 expected_local_video_track_ssrc2.frame_height = 1234; |
| 1546 ASSERT_TRUE(report->Get(expected_remote_video_track.id())); | 1613 ASSERT_TRUE(report->Get(expected_local_video_track_ssrc2.id())); |
| 1547 EXPECT_EQ(expected_remote_video_track, | 1614 EXPECT_EQ(expected_local_video_track_ssrc2, |
| 1548 report->Get(expected_remote_video_track.id())->cast_to< | 1615 report->Get(expected_local_video_track_ssrc2.id())->cast_to< |
| 1616 RTCMediaStreamTrackStats>()); |
| 1617 |
| 1618 RTCMediaStreamTrackStats expected_remote_video_track_ssrc3( |
| 1619 "RTCMediaStreamTrack_remote_video_RemoteVideoTrackID3_3", |
| 1620 report->timestamp_us(), RTCMediaStreamTrackKind::kVideo); |
| 1621 expected_remote_video_track_ssrc3.track_identifier = |
| 1622 remote_video_track_ssrc3->id(); |
| 1623 expected_remote_video_track_ssrc3.remote_source = true; |
| 1624 expected_remote_video_track_ssrc3.ended = true; |
| 1625 expected_remote_video_track_ssrc3.detached = false; |
| 1626 expected_remote_video_track_ssrc3.frame_width = 6789; |
| 1627 expected_remote_video_track_ssrc3.frame_height = 9876; |
| 1628 ASSERT_TRUE(report->Get(expected_remote_video_track_ssrc3.id())); |
| 1629 EXPECT_EQ(expected_remote_video_track_ssrc3, |
| 1630 report->Get(expected_remote_video_track_ssrc3.id())->cast_to< |
| 1631 RTCMediaStreamTrackStats>()); |
| 1632 |
| 1633 RTCMediaStreamTrackStats expected_remote_video_track_ssrc4( |
| 1634 "RTCMediaStreamTrack_remote_video_RemoteVideoTrackID4_4", |
| 1635 report->timestamp_us(), RTCMediaStreamTrackKind::kVideo); |
| 1636 expected_remote_video_track_ssrc4.track_identifier = |
| 1637 remote_video_track_ssrc4->id(); |
| 1638 expected_remote_video_track_ssrc4.remote_source = true; |
| 1639 expected_remote_video_track_ssrc4.ended = false; |
| 1640 expected_remote_video_track_ssrc4.detached = false; |
| 1641 // Should be undefined: |expected_remote_video_track_ssrc4.frame_width| and |
| 1642 // |expected_remote_video_track_ssrc4.frame_height|. |
| 1643 ASSERT_TRUE(report->Get(expected_remote_video_track_ssrc4.id())); |
| 1644 EXPECT_EQ(expected_remote_video_track_ssrc4, |
| 1645 report->Get(expected_remote_video_track_ssrc4.id())->cast_to< |
| 1549 RTCMediaStreamTrackStats>()); | 1646 RTCMediaStreamTrackStats>()); |
| 1550 } | 1647 } |
| 1551 | 1648 |
| 1552 TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Audio) { | 1649 TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Audio) { |
| 1553 MockVoiceMediaChannel* voice_media_channel = new MockVoiceMediaChannel(); | 1650 MockVoiceMediaChannel* voice_media_channel = new MockVoiceMediaChannel(); |
| 1554 cricket::VoiceChannel voice_channel( | 1651 cricket::VoiceChannel voice_channel( |
| 1555 test_->worker_thread(), test_->network_thread(), | 1652 test_->worker_thread(), test_->network_thread(), |
| 1556 test_->signaling_thread(), test_->media_engine(), voice_media_channel, | 1653 test_->signaling_thread(), test_->media_engine(), voice_media_channel, |
| 1557 "VoiceContentName", kDefaultRtcpMuxRequired, kDefaultSrtpRequired); | 1654 "VoiceContentName", kDefaultRtcpMuxRequired, kDefaultSrtpRequired); |
| 1558 | 1655 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1601 .WillRepeatedly(Return(&voice_channel)); | 1698 .WillRepeatedly(Return(&voice_channel)); |
| 1602 | 1699 |
| 1603 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); | 1700 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); |
| 1604 | 1701 |
| 1605 RTCInboundRTPStreamStats expected_audio( | 1702 RTCInboundRTPStreamStats expected_audio( |
| 1606 "RTCInboundRTPAudioStream_1", report->timestamp_us()); | 1703 "RTCInboundRTPAudioStream_1", report->timestamp_us()); |
| 1607 expected_audio.ssrc = "1"; | 1704 expected_audio.ssrc = "1"; |
| 1608 expected_audio.is_remote = false; | 1705 expected_audio.is_remote = false; |
| 1609 expected_audio.media_type = "audio"; | 1706 expected_audio.media_type = "audio"; |
| 1610 expected_audio.media_track_id = | 1707 expected_audio.media_track_id = |
| 1611 "RTCMediaStreamTrack_remote_RemoteAudioTrackID"; | 1708 "RTCMediaStreamTrack_remote_audio_RemoteAudioTrackID_1"; |
| 1612 expected_audio.transport_id = "RTCTransport_TransportName_" + | 1709 expected_audio.transport_id = "RTCTransport_TransportName_" + |
| 1613 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); | 1710 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); |
| 1614 expected_audio.codec_id = "RTCCodec_InboundAudio_42"; | 1711 expected_audio.codec_id = "RTCCodec_InboundAudio_42"; |
| 1615 expected_audio.packets_received = 2; | 1712 expected_audio.packets_received = 2; |
| 1616 expected_audio.bytes_received = 3; | 1713 expected_audio.bytes_received = 3; |
| 1617 expected_audio.packets_lost = 42; | 1714 expected_audio.packets_lost = 42; |
| 1618 expected_audio.jitter = 4.5; | 1715 expected_audio.jitter = 4.5; |
| 1619 expected_audio.fraction_lost = 5.5; | 1716 expected_audio.fraction_lost = 5.5; |
| 1620 | 1717 |
| 1621 ASSERT(report->Get(expected_audio.id())); | 1718 ASSERT(report->Get(expected_audio.id())); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1683 .WillRepeatedly(Return(&video_channel)); | 1780 .WillRepeatedly(Return(&video_channel)); |
| 1684 | 1781 |
| 1685 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); | 1782 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); |
| 1686 | 1783 |
| 1687 RTCInboundRTPStreamStats expected_video( | 1784 RTCInboundRTPStreamStats expected_video( |
| 1688 "RTCInboundRTPVideoStream_1", report->timestamp_us()); | 1785 "RTCInboundRTPVideoStream_1", report->timestamp_us()); |
| 1689 expected_video.ssrc = "1"; | 1786 expected_video.ssrc = "1"; |
| 1690 expected_video.is_remote = false; | 1787 expected_video.is_remote = false; |
| 1691 expected_video.media_type = "video"; | 1788 expected_video.media_type = "video"; |
| 1692 expected_video.media_track_id = | 1789 expected_video.media_track_id = |
| 1693 "RTCMediaStreamTrack_remote_RemoteVideoTrackID"; | 1790 "RTCMediaStreamTrack_remote_video_RemoteVideoTrackID_1"; |
| 1694 expected_video.transport_id = "RTCTransport_TransportName_" + | 1791 expected_video.transport_id = "RTCTransport_TransportName_" + |
| 1695 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); | 1792 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); |
| 1696 expected_video.codec_id = "RTCCodec_InboundVideo_42"; | 1793 expected_video.codec_id = "RTCCodec_InboundVideo_42"; |
| 1697 expected_video.fir_count = 5; | 1794 expected_video.fir_count = 5; |
| 1698 expected_video.pli_count = 6; | 1795 expected_video.pli_count = 6; |
| 1699 expected_video.nack_count = 7; | 1796 expected_video.nack_count = 7; |
| 1700 expected_video.packets_received = 2; | 1797 expected_video.packets_received = 2; |
| 1701 expected_video.bytes_received = 3; | 1798 expected_video.bytes_received = 3; |
| 1702 expected_video.packets_lost = 42; | 1799 expected_video.packets_lost = 42; |
| 1703 expected_video.fraction_lost = 4.5; | 1800 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()) | 1858 EXPECT_CALL(test_->session(), voice_channel()) |
| 1762 .WillRepeatedly(Return(&voice_channel)); | 1859 .WillRepeatedly(Return(&voice_channel)); |
| 1763 | 1860 |
| 1764 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); | 1861 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); |
| 1765 | 1862 |
| 1766 RTCOutboundRTPStreamStats expected_audio( | 1863 RTCOutboundRTPStreamStats expected_audio( |
| 1767 "RTCOutboundRTPAudioStream_1", report->timestamp_us()); | 1864 "RTCOutboundRTPAudioStream_1", report->timestamp_us()); |
| 1768 expected_audio.ssrc = "1"; | 1865 expected_audio.ssrc = "1"; |
| 1769 expected_audio.is_remote = false; | 1866 expected_audio.is_remote = false; |
| 1770 expected_audio.media_type = "audio"; | 1867 expected_audio.media_type = "audio"; |
| 1771 expected_audio.media_track_id = "RTCMediaStreamTrack_local_LocalAudioTrackID"; | 1868 expected_audio.media_track_id = |
| 1869 "RTCMediaStreamTrack_local_audio_LocalAudioTrackID_1"; |
| 1772 expected_audio.transport_id = "RTCTransport_TransportName_" + | 1870 expected_audio.transport_id = "RTCTransport_TransportName_" + |
| 1773 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); | 1871 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); |
| 1774 expected_audio.codec_id = "RTCCodec_OutboundAudio_42"; | 1872 expected_audio.codec_id = "RTCCodec_OutboundAudio_42"; |
| 1775 expected_audio.packets_sent = 2; | 1873 expected_audio.packets_sent = 2; |
| 1776 expected_audio.bytes_sent = 3; | 1874 expected_audio.bytes_sent = 3; |
| 1777 expected_audio.round_trip_time = 4.5; | 1875 expected_audio.round_trip_time = 4.5; |
| 1778 | 1876 |
| 1779 ASSERT(report->Get(expected_audio.id())); | 1877 ASSERT(report->Get(expected_audio.id())); |
| 1780 const RTCOutboundRTPStreamStats& audio = report->Get( | 1878 const RTCOutboundRTPStreamStats& audio = report->Get( |
| 1781 expected_audio.id())->cast_to<RTCOutboundRTPStreamStats>(); | 1879 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()) | 1937 EXPECT_CALL(test_->session(), video_channel()) |
| 1840 .WillRepeatedly(Return(&video_channel)); | 1938 .WillRepeatedly(Return(&video_channel)); |
| 1841 | 1939 |
| 1842 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); | 1940 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); |
| 1843 | 1941 |
| 1844 RTCOutboundRTPStreamStats expected_video( | 1942 RTCOutboundRTPStreamStats expected_video( |
| 1845 "RTCOutboundRTPVideoStream_1", report->timestamp_us()); | 1943 "RTCOutboundRTPVideoStream_1", report->timestamp_us()); |
| 1846 expected_video.ssrc = "1"; | 1944 expected_video.ssrc = "1"; |
| 1847 expected_video.is_remote = false; | 1945 expected_video.is_remote = false; |
| 1848 expected_video.media_type = "video"; | 1946 expected_video.media_type = "video"; |
| 1849 expected_video.media_track_id = "RTCMediaStreamTrack_local_LocalVideoTrackID"; | 1947 expected_video.media_track_id = |
| 1948 "RTCMediaStreamTrack_local_video_LocalVideoTrackID_1"; |
| 1850 expected_video.transport_id = "RTCTransport_TransportName_" + | 1949 expected_video.transport_id = "RTCTransport_TransportName_" + |
| 1851 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); | 1950 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); |
| 1852 expected_video.codec_id = "RTCCodec_OutboundVideo_42"; | 1951 expected_video.codec_id = "RTCCodec_OutboundVideo_42"; |
| 1853 expected_video.fir_count = 2; | 1952 expected_video.fir_count = 2; |
| 1854 expected_video.pli_count = 3; | 1953 expected_video.pli_count = 3; |
| 1855 expected_video.nack_count = 4; | 1954 expected_video.nack_count = 4; |
| 1856 expected_video.packets_sent = 5; | 1955 expected_video.packets_sent = 5; |
| 1857 expected_video.bytes_sent = 6; | 1956 expected_video.bytes_sent = 6; |
| 1858 expected_video.round_trip_time = 7.5; | 1957 expected_video.round_trip_time = 7.5; |
| 1859 expected_video.frames_encoded = 8; | 1958 expected_video.frames_encoded = 8; |
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2142 rtc::scoped_refptr<FakeRTCStatsCollector> collector_; | 2241 rtc::scoped_refptr<FakeRTCStatsCollector> collector_; |
| 2143 }; | 2242 }; |
| 2144 | 2243 |
| 2145 TEST_F(RTCStatsCollectorTestWithFakeCollector, ThreadUsageAndResultsMerging) { | 2244 TEST_F(RTCStatsCollectorTestWithFakeCollector, ThreadUsageAndResultsMerging) { |
| 2146 collector_->VerifyThreadUsageAndResultsMerging(); | 2245 collector_->VerifyThreadUsageAndResultsMerging(); |
| 2147 } | 2246 } |
| 2148 | 2247 |
| 2149 } // namespace | 2248 } // namespace |
| 2150 | 2249 |
| 2151 } // namespace webrtc | 2250 } // namespace webrtc |
| OLD | NEW |