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

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

Issue 1875873002: Filter out undesired initial -1 values. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fix the unit test after merge. Created 4 years, 7 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/statscollector.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 2014 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2014 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 } 158 }
159 rtc::scoped_refptr<webrtc::AudioProcessorInterface> GetAudioProcessor() 159 rtc::scoped_refptr<webrtc::AudioProcessorInterface> GetAudioProcessor()
160 override { 160 override {
161 return processor_; 161 return processor_;
162 } 162 }
163 163
164 private: 164 private:
165 rtc::scoped_refptr<FakeAudioProcessor> processor_; 165 rtc::scoped_refptr<FakeAudioProcessor> processor_;
166 }; 166 };
167 167
168 // This fake audio processor is used to verify that the undesired initial values
169 // (-1) will be filtered out.
170 class FakeAudioProcessorWithInitValue : public webrtc::AudioProcessorInterface {
171 public:
172 FakeAudioProcessorWithInitValue() {}
173 ~FakeAudioProcessorWithInitValue() {}
174
175 private:
176 void GetStats(AudioProcessorInterface::AudioProcessorStats* stats) override {
177 stats->typing_noise_detected = false;
178 stats->echo_return_loss = -100;
179 stats->echo_return_loss_enhancement = -100;
180 stats->echo_delay_median_ms = -1;
181 stats->aec_quality_min = -1.0f;
182 stats->echo_delay_std_ms = -1;
183 }
184 };
185
186 class FakeAudioTrackWithInitValue
187 : public webrtc::MediaStreamTrack<webrtc::AudioTrackInterface> {
188 public:
189 explicit FakeAudioTrackWithInitValue(const std::string& id)
190 : webrtc::MediaStreamTrack<webrtc::AudioTrackInterface>(id),
191 processor_(
192 new rtc::RefCountedObject<FakeAudioProcessorWithInitValue>()) {}
193 std::string kind() const override { return "audio"; }
194 webrtc::AudioSourceInterface* GetSource() const override { return NULL; }
195 void AddSink(webrtc::AudioTrackSinkInterface* sink) override {}
196 void RemoveSink(webrtc::AudioTrackSinkInterface* sink) override {}
197 bool GetSignalLevel(int* level) override {
198 *level = 1;
199 return true;
200 }
201 rtc::scoped_refptr<webrtc::AudioProcessorInterface> GetAudioProcessor()
202 override {
203 return processor_;
204 }
205
206 private:
207 rtc::scoped_refptr<FakeAudioProcessorWithInitValue> processor_;
208 };
209
168 bool GetValue(const StatsReport* report, 210 bool GetValue(const StatsReport* report,
169 StatsReport::StatsValueName name, 211 StatsReport::StatsValueName name,
170 std::string* value) { 212 std::string* value) {
171 const StatsReport::Value* v = report->FindValue(name); 213 const StatsReport::Value* v = report->FindValue(name);
172 if (!v) 214 if (!v)
173 return false; 215 return false;
174 *value = v->ToString(); 216 *value = v->ToString();
175 return true; 217 return true;
176 } 218 }
177 219
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 voice_sender_info->audio_level = 107; 479 voice_sender_info->audio_level = 107;
438 voice_sender_info->echo_return_loss = 108; 480 voice_sender_info->echo_return_loss = 108;
439 voice_sender_info->echo_return_loss_enhancement = 109; 481 voice_sender_info->echo_return_loss_enhancement = 109;
440 voice_sender_info->echo_delay_median_ms = 110; 482 voice_sender_info->echo_delay_median_ms = 110;
441 voice_sender_info->echo_delay_std_ms = 111; 483 voice_sender_info->echo_delay_std_ms = 111;
442 voice_sender_info->aec_quality_min = 112.0f; 484 voice_sender_info->aec_quality_min = 112.0f;
443 voice_sender_info->typing_noise_detected = false; 485 voice_sender_info->typing_noise_detected = false;
444 } 486 }
445 487
446 void UpdateVoiceSenderInfoFromAudioTrack( 488 void UpdateVoiceSenderInfoFromAudioTrack(
447 FakeAudioTrack* audio_track, cricket::VoiceSenderInfo* voice_sender_info) { 489 AudioTrackInterface* audio_track,
490 cricket::VoiceSenderInfo* voice_sender_info) {
448 audio_track->GetSignalLevel(&voice_sender_info->audio_level); 491 audio_track->GetSignalLevel(&voice_sender_info->audio_level);
449 webrtc::AudioProcessorInterface::AudioProcessorStats audio_processor_stats; 492 webrtc::AudioProcessorInterface::AudioProcessorStats audio_processor_stats;
450 audio_track->GetAudioProcessor()->GetStats(&audio_processor_stats); 493 audio_track->GetAudioProcessor()->GetStats(&audio_processor_stats);
451 voice_sender_info->typing_noise_detected = 494 voice_sender_info->typing_noise_detected =
452 audio_processor_stats.typing_noise_detected; 495 audio_processor_stats.typing_noise_detected;
453 voice_sender_info->echo_return_loss = audio_processor_stats.echo_return_loss; 496 voice_sender_info->echo_return_loss = audio_processor_stats.echo_return_loss;
454 voice_sender_info->echo_return_loss_enhancement = 497 voice_sender_info->echo_return_loss_enhancement =
455 audio_processor_stats.echo_return_loss_enhancement; 498 audio_processor_stats.echo_return_loss_enhancement;
456 voice_sender_info->echo_delay_median_ms = 499 voice_sender_info->echo_delay_median_ms =
457 audio_processor_stats.echo_delay_median_ms; 500 audio_processor_stats.echo_delay_median_ms;
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
771 MockWebRtcSession session_; 814 MockWebRtcSession session_;
772 MockPeerConnection pc_; 815 MockPeerConnection pc_;
773 FakeDataChannelProvider data_channel_provider_; 816 FakeDataChannelProvider data_channel_provider_;
774 SessionStats session_stats_; 817 SessionStats session_stats_;
775 rtc::scoped_refptr<webrtc::MediaStream> stream_; 818 rtc::scoped_refptr<webrtc::MediaStream> stream_;
776 rtc::scoped_refptr<webrtc::VideoTrack> track_; 819 rtc::scoped_refptr<webrtc::VideoTrack> track_;
777 rtc::scoped_refptr<FakeAudioTrack> audio_track_; 820 rtc::scoped_refptr<FakeAudioTrack> audio_track_;
778 std::vector<rtc::scoped_refptr<DataChannel>> data_channels_; 821 std::vector<rtc::scoped_refptr<DataChannel>> data_channels_;
779 }; 822 };
780 823
824 TEST_F(StatsCollectorTest, FilterOutNegativeDataChannelId) {
825 const std::string label = "hacks";
826 // The data channel id is from the Config which is -1 initially.
827 const int id = -1;
828 const std::string state = DataChannelInterface::DataStateString(
829 DataChannelInterface::DataState::kConnecting);
830
831 AddDataChannel(cricket::DCT_SCTP, label, id);
832 StatsCollectorForTest stats(&pc_);
833
834 stats.UpdateStats(PeerConnectionInterface::kStatsOutputLevelStandard);
835
836 StatsReports reports;
837 stats.GetStats(NULL, &reports);
838
839 const StatsReport* report =
840 FindNthReportByType(reports, StatsReport::kStatsReportTypeDataChannel, 1);
841
842 std::string value_in_report;
843 EXPECT_FALSE(GetValue(report, StatsReport::kStatsValueNameDataChannelId,
844 &value_in_report));
845 }
846
781 // Verify that ExtractDataInfo populates reports. 847 // Verify that ExtractDataInfo populates reports.
782 TEST_F(StatsCollectorTest, ExtractDataInfo) { 848 TEST_F(StatsCollectorTest, ExtractDataInfo) {
783 const std::string label = "hacks"; 849 const std::string label = "hacks";
784 const int id = 31337; 850 const int id = 31337;
785 const std::string state = DataChannelInterface::DataStateString( 851 const std::string state = DataChannelInterface::DataStateString(
786 DataChannelInterface::DataState::kConnecting); 852 DataChannelInterface::DataState::kConnecting);
787 853
788 AddDataChannel(cricket::DCT_SCTP, label, id); 854 AddDataChannel(cricket::DCT_SCTP, label, id);
789 StatsCollectorForTest stats(&pc_); 855 StatsCollectorForTest stats(&pc_);
790 856
(...skipping 702 matching lines...) Expand 10 before | Expand all | Expand 10 after
1493 // Build a remote certificate with an unsupported digest algorithm. 1559 // Build a remote certificate with an unsupported digest algorithm.
1494 std::string remote_der = "This is somebody else's der."; 1560 std::string remote_der = "This is somebody else's der.";
1495 std::unique_ptr<rtc::FakeSSLCertificate> remote_cert( 1561 std::unique_ptr<rtc::FakeSSLCertificate> remote_cert(
1496 new rtc::FakeSSLCertificate(DerToPem(remote_der))); 1562 new rtc::FakeSSLCertificate(DerToPem(remote_der)));
1497 remote_cert->set_digest_algorithm("foobar"); 1563 remote_cert->set_digest_algorithm("foobar");
1498 1564
1499 TestCertificateReports(local_cert, std::vector<std::string>(1, local_der), 1565 TestCertificateReports(local_cert, std::vector<std::string>(1, local_der),
1500 std::move(remote_cert), std::vector<std::string>()); 1566 std::move(remote_cert), std::vector<std::string>());
1501 } 1567 }
1502 1568
1569 // This test verifies that the audio/video related stats which are -1 initially
1570 // will be filtered out.
1571 TEST_F(StatsCollectorTest, FilterOutNegativeInitialValues) {
1572 StatsCollectorForTest stats(&pc_);
1573
1574 EXPECT_CALL(session_, GetLocalCertificate(_, _))
1575 .WillRepeatedly(Return(false));
1576 EXPECT_CALL(session_, GetRemoteSSLCertificate_ReturnsRawPointer(_))
1577 .WillRepeatedly(Return(nullptr));
1578
1579 MockVoiceMediaChannel* media_channel = new MockVoiceMediaChannel();
1580 // The transport_name known by the voice channel.
1581 const std::string kVcName("vcname");
1582 cricket::VoiceChannel voice_channel(worker_thread_, network_thread_,
1583 media_engine_, media_channel, nullptr,
1584 kVcName, false);
1585
1586 // Create a local stream with a local audio track and adds it to the stats.
1587 if (stream_ == NULL)
1588 stream_ = webrtc::MediaStream::Create("streamlabel");
1589
1590 rtc::scoped_refptr<FakeAudioTrackWithInitValue> local_track(
1591 new rtc::RefCountedObject<FakeAudioTrackWithInitValue>(kLocalTrackId));
1592 stream_->AddTrack(local_track);
1593 EXPECT_CALL(session_, GetLocalTrackIdBySsrc(kSsrcOfTrack, _))
1594 .WillOnce(DoAll(SetArgPointee<1>(kLocalTrackId), Return(true)));
1595 stats.AddStream(stream_);
1596 stats.AddLocalAudioTrack(local_track.get(), kSsrcOfTrack);
1597
1598 // Create a remote stream with a remote audio track and adds it to the stats.
1599 rtc::scoped_refptr<webrtc::MediaStream> remote_stream(
1600 webrtc::MediaStream::Create("remotestreamlabel"));
1601 rtc::scoped_refptr<FakeAudioTrackWithInitValue> remote_track(
1602 new rtc::RefCountedObject<FakeAudioTrackWithInitValue>(kRemoteTrackId));
1603 EXPECT_CALL(session_, GetRemoteTrackIdBySsrc(kSsrcOfTrack, _))
1604 .WillOnce(DoAll(SetArgPointee<1>(kRemoteTrackId), Return(true)));
1605 remote_stream->AddTrack(remote_track);
1606 stats.AddStream(remote_stream);
1607
1608 // Instruct the session to return stats containing the transport channel.
1609 InitSessionStats(kVcName);
1610 EXPECT_CALL(session_, GetTransportStats(_))
1611 .WillRepeatedly(DoAll(SetArgPointee<0>(session_stats_), Return(true)));
1612
1613 cricket::VoiceSenderInfo voice_sender_info;
1614 voice_sender_info.add_ssrc(kSsrcOfTrack);
1615 // These values are set to -1 initially in audio_send_stream.
1616 // The voice_sender_info will read the values from audio_send_stream.
1617 voice_sender_info.rtt_ms = -1;
1618 voice_sender_info.packets_lost = -1;
1619 voice_sender_info.jitter_ms = -1;
1620
1621 // Some of the contents in |voice_sender_info| needs to be updated from the
1622 // |audio_track_|.
1623 UpdateVoiceSenderInfoFromAudioTrack(local_track.get(), &voice_sender_info);
1624
1625 cricket::VoiceReceiverInfo voice_receiver_info;
1626 voice_receiver_info.add_ssrc(kSsrcOfTrack);
1627 voice_receiver_info.capture_start_ntp_time_ms = -1;
1628 voice_receiver_info.audio_level = -1;
1629
1630 // Constructs an ssrc stats update.
1631 cricket::VoiceMediaInfo stats_read;
1632 stats_read.senders.push_back(voice_sender_info);
1633 stats_read.receivers.push_back(voice_receiver_info);
1634
1635 EXPECT_CALL(session_, voice_channel()).WillRepeatedly(Return(&voice_channel));
1636 EXPECT_CALL(session_, video_channel()).WillRepeatedly(ReturnNull());
1637 EXPECT_CALL(*media_channel, GetStats(_))
1638 .WillRepeatedly(DoAll(SetArgPointee<0>(stats_read), Return(true)));
1639
1640 StatsReports reports;
1641 stats.UpdateStats(PeerConnectionInterface::kStatsOutputLevelStandard);
1642
1643 // Get stats for the local track.
1644 stats.GetStats(local_track.get(), &reports);
1645 const StatsReport* report =
1646 FindNthReportByType(reports, StatsReport::kStatsReportTypeSsrc, 1);
1647 EXPECT_TRUE(report);
1648 // The -1 will not be added to the stats report.
1649 std::string value_in_report;
1650 EXPECT_FALSE(
1651 GetValue(report, StatsReport::kStatsValueNameRtt, &value_in_report));
1652 EXPECT_FALSE(GetValue(report, StatsReport::kStatsValueNamePacketsLost,
1653 &value_in_report));
1654 EXPECT_FALSE(GetValue(report, StatsReport::kStatsValueNameJitterReceived,
1655 &value_in_report));
1656 EXPECT_FALSE(GetValue(report,
1657 StatsReport::kStatsValueNameEchoCancellationQualityMin,
1658 &value_in_report));
1659 EXPECT_FALSE(GetValue(report, StatsReport::kStatsValueNameEchoDelayMedian,
1660 &value_in_report));
1661 EXPECT_FALSE(GetValue(report, StatsReport::kStatsValueNameEchoDelayStdDev,
1662 &value_in_report));
1663
1664 // Get stats for the remote track.
1665 reports.clear();
1666 stats.GetStats(remote_track.get(), &reports);
1667 report = FindNthReportByType(reports, StatsReport::kStatsReportTypeSsrc, 1);
1668 EXPECT_TRUE(report);
1669 EXPECT_FALSE(GetValue(report,
1670 StatsReport::kStatsValueNameCaptureStartNtpTimeMs,
1671 &value_in_report));
1672 EXPECT_FALSE(GetValue(report, StatsReport::kStatsValueNameAudioInputLevel,
1673 &value_in_report));
1674 }
1675
1503 // This test verifies that a local stats object can get statistics via 1676 // This test verifies that a local stats object can get statistics via
1504 // AudioTrackInterface::GetStats() method. 1677 // AudioTrackInterface::GetStats() method.
1505 TEST_F(StatsCollectorTest, GetStatsFromLocalAudioTrack) { 1678 TEST_F(StatsCollectorTest, GetStatsFromLocalAudioTrack) {
1506 StatsCollectorForTest stats(&pc_); 1679 StatsCollectorForTest stats(&pc_);
1507 1680
1508 EXPECT_CALL(session_, GetLocalCertificate(_, _)) 1681 EXPECT_CALL(session_, GetLocalCertificate(_, _))
1509 .WillRepeatedly(Return(false)); 1682 .WillRepeatedly(Return(false));
1510 EXPECT_CALL(session_, GetRemoteSSLCertificate_ReturnsRawPointer(_)) 1683 EXPECT_CALL(session_, GetRemoteSSLCertificate_ReturnsRawPointer(_))
1511 .WillRepeatedly(Return(nullptr)); 1684 .WillRepeatedly(Return(nullptr));
1512 1685
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
1764 cricket::VoiceSenderInfo new_voice_sender_info; 1937 cricket::VoiceSenderInfo new_voice_sender_info;
1765 InitVoiceSenderInfo(&new_voice_sender_info); 1938 InitVoiceSenderInfo(&new_voice_sender_info);
1766 cricket::VoiceMediaInfo new_stats_read; 1939 cricket::VoiceMediaInfo new_stats_read;
1767 reports.clear(); 1940 reports.clear();
1768 SetupAndVerifyAudioTrackStats( 1941 SetupAndVerifyAudioTrackStats(
1769 new_audio_track.get(), stream_.get(), &stats, &voice_channel, kVcName, 1942 new_audio_track.get(), stream_.get(), &stats, &voice_channel, kVcName,
1770 media_channel, &new_voice_sender_info, NULL, &new_stats_read, &reports); 1943 media_channel, &new_voice_sender_info, NULL, &new_stats_read, &reports);
1771 } 1944 }
1772 1945
1773 } // namespace webrtc 1946 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/api/statscollector.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698