 Chromium Code Reviews
 Chromium Code Reviews Issue 1414743004:
  Implement AudioSendStream::GetStats().  (Closed) 
  Base URL: https://chromium.googlesource.com/external/webrtc.git@master
    
  
    Issue 1414743004:
  Implement AudioSendStream::GetStats().  (Closed) 
  Base URL: https://chromium.googlesource.com/external/webrtc.git@master| Index: webrtc/test/fake_voice_engine.h | 
| diff --git a/webrtc/test/fake_voice_engine.h b/webrtc/test/fake_voice_engine.h | 
| index 72f6b27dd2e3c6d995427e4aa4ae9c53ee238926..2ef3d058f7d9ba83572c8e81e65983983c0b1f98 100644 | 
| --- a/webrtc/test/fake_voice_engine.h | 
| +++ b/webrtc/test/fake_voice_engine.h | 
| @@ -25,10 +25,16 @@ namespace test { | 
| class FakeVoiceEngine final : public VoiceEngineImpl { | 
| public: | 
| const int kSendChannelId = 1; | 
| - const int kReceiveChannelId = 2; | 
| - | 
| + const int kRecvChannelId = 2; | 
| 
tommi
2015/10/23 12:50:37
I think these should all be static and be referenc
 
the sun
2015/10/23 15:14:17
Ok, you get the .cc :)
 | 
| + const uint32_t kSendSsrc = 665; | 
| + const uint32_t kRecvSsrc = 667; | 
| + const int kSendEchoDelayMedian = 254; | 
| + const int kSendEchoDelayStdDev = -3; | 
| + const int kSendEchoReturnLoss = -65; | 
| + const int kSendEchoReturnLossEnhancement = 101; | 
| const int kRecvJitterBufferDelay = -7; | 
| const int kRecvPlayoutBufferDelay = 302; | 
| + const unsigned int kSendSpeechInputLevel = 96; | 
| const unsigned int kRecvSpeechOutputLevel = 99; | 
| FakeVoiceEngine() : VoiceEngineImpl(new Config(), true) { | 
| @@ -42,16 +48,37 @@ class FakeVoiceEngine final : public VoiceEngineImpl { | 
| --_ref_count; | 
| } | 
| + const CallStatistics& GetSendCallStats() const { | 
| + static const CallStatistics kStats = { | 
| 
tommi
2015/10/23 12:50:37
I'm a bit on the fence whether using statics like
 
the sun
2015/10/23 15:14:17
I've made this static const structs and moved them
 
kwiberg-webrtc
2015/10/25 02:07:43
CallStatistics looks like a POD to me (if I'm look
 
the sun
2015/10/26 09:11:02
So now that the structs are static const members o
 | 
| + 1345, 1678, 1901, 1234, 112, 13456, 17890, 1567, -1890, -1123 | 
| + }; | 
| + return kStats; | 
| + } | 
| + | 
| + const CodecInst& GetSendCodecInst() const { | 
| + static const CodecInst kStats = { | 
| + -121, "codec_name_send", 48000, -231, -451, -671 | 
| + }; | 
| + return kStats; | 
| + } | 
| + | 
| + const ReportBlock& GetSendReportBlock() const { | 
| + static const ReportBlock kBlock = { | 
| + 456, 780, 123, 567, 890, 132, 143, 13354 | 
| + }; | 
| + return kBlock; | 
| + } | 
| + | 
| const CallStatistics& GetRecvCallStats() const { | 
| static const CallStatistics kStats = { | 
| - 345, 678, 901, 234, -1, 0, 0, 567, 890, 123 | 
| + 345, 678, 901, 234, -12, 3456, 7890, 567, 890, 123 | 
| }; | 
| return kStats; | 
| } | 
| - const CodecInst& GetRecvRecCodecInst() const { | 
| + const CodecInst& GetRecvCodecInst() const { | 
| static const CodecInst kStats = { | 
| - 123, "codec_name", 96000, -1, -1, -1 | 
| + 123, "codec_name_recv", 96000, -187, -198, -103 | 
| }; | 
| return kStats; | 
| } | 
| @@ -76,6 +103,84 @@ class FakeVoiceEngine final : public VoiceEngineImpl { | 
| return stats; | 
| } | 
| + // VoEAudioProcessing | 
| + int SetNsStatus(bool enable, NsModes mode = kNsUnchanged) override { | 
| + return -1; | 
| + } | 
| + int GetNsStatus(bool& enabled, NsModes& mode) override { return -1; } | 
| + int SetAgcStatus(bool enable, AgcModes mode = kAgcUnchanged) override { | 
| + return -1; | 
| + } | 
| + int GetAgcStatus(bool& enabled, AgcModes& mode) override { return -1; } | 
| + int SetAgcConfig(AgcConfig config) override { return -1; } | 
| + int GetAgcConfig(AgcConfig& config) override { return -1; } | 
| + int SetEcStatus(bool enable, EcModes mode = kEcUnchanged) override { | 
| + return -1; | 
| + } | 
| + int GetEcStatus(bool& enabled, EcModes& mode) override { return -1; } | 
| + int EnableDriftCompensation(bool enable) override { return -1; } | 
| + bool DriftCompensationEnabled() override { return false; } | 
| + void SetDelayOffsetMs(int offset) override {} | 
| + int DelayOffsetMs() override { return -1; } | 
| + int SetAecmMode(AecmModes mode = kAecmSpeakerphone, | 
| + bool enableCNG = true) override { return -1; } | 
| + int GetAecmMode(AecmModes& mode, bool& enabledCNG) override { return -1; } | 
| + int EnableHighPassFilter(bool enable) override { return -1; } | 
| + bool IsHighPassFilterEnabled() override { return false; } | 
| + int SetRxNsStatus(int channel, | 
| + bool enable, | 
| + NsModes mode = kNsUnchanged) override { return -1; } | 
| + int GetRxNsStatus(int channel, bool& enabled, NsModes& mode) override { | 
| + return -1; | 
| + } | 
| + int SetRxAgcStatus(int channel, | 
| + bool enable, | 
| + AgcModes mode = kAgcUnchanged) override { return -1; } | 
| + int GetRxAgcStatus(int channel, bool& enabled, AgcModes& mode) override { | 
| + return -1; | 
| + } | 
| + int SetRxAgcConfig(int channel, AgcConfig config) override { return -1; } | 
| + int GetRxAgcConfig(int channel, AgcConfig& config) override { return -1; } | 
| + int RegisterRxVadObserver(int channel, | 
| + VoERxVadCallback& observer) override { return -1; } | 
| + int DeRegisterRxVadObserver(int channel) override { return -1; } | 
| + int VoiceActivityIndicator(int channel) override { return -1; } | 
| + int SetEcMetricsStatus(bool enable) override { return -1; } | 
| + int GetEcMetricsStatus(bool& enabled) override { | 
| + enabled = true; | 
| + return 0; | 
| + } | 
| + int GetEchoMetrics(int& ERL, int& ERLE, int& RERL, int& A_NLP) override { | 
| + ERL = kSendEchoReturnLoss; | 
| + ERLE = kSendEchoReturnLossEnhancement; | 
| + RERL = -123456789; | 
| + A_NLP = 123456789; | 
| + return 0; | 
| + } | 
| + int GetEcDelayMetrics(int& delay_median, | 
| + int& delay_std, | 
| + float& fraction_poor_delays) override { | 
| + delay_median = kSendEchoDelayMedian; | 
| + delay_std = kSendEchoDelayStdDev; | 
| + fraction_poor_delays = -12345.7890; | 
| + return 0; | 
| + } | 
| + int StartDebugRecording(const char* fileNameUTF8) override { return -1; } | 
| + int StartDebugRecording(FILE* file_handle) override { return -1; } | 
| + int StopDebugRecording() override { return -1; } | 
| + int SetTypingDetectionStatus(bool enable) override { return -1; } | 
| + int GetTypingDetectionStatus(bool& enabled) override { return -1; } | 
| + int TimeSinceLastTyping(int& seconds) override { return -1; } | 
| + int SetTypingDetectionParameters(int timeWindow, | 
| + int costPerTyping, | 
| + int reportingThreshold, | 
| + int penaltyDecay, | 
| + int typeEventDelay = 0) override { | 
| + return -1; | 
| + } | 
| + void EnableStereoChannelSwapping(bool enable) override {} | 
| + bool IsStereoChannelSwappingEnabled() override { return false; } | 
| + | 
| // VoEBase | 
| int RegisterVoiceEngineObserver(VoiceEngineObserver& observer) override { | 
| return -1; | 
| @@ -105,11 +210,15 @@ class FakeVoiceEngine final : public VoiceEngineImpl { | 
| int NumOfCodecs() override { return -1; } | 
| int GetCodec(int index, CodecInst& codec) override { return -1; } | 
| int SetSendCodec(int channel, const CodecInst& codec) override { return -1; } | 
| - int GetSendCodec(int channel, CodecInst& codec) override { return -1; } | 
| + int GetSendCodec(int channel, CodecInst& codec) override { | 
| + EXPECT_EQ(channel, kSendChannelId); | 
| + codec = GetSendCodecInst(); | 
| + return 0; | 
| + } | 
| int SetBitRate(int channel, int bitrate_bps) override { return -1; } | 
| int GetRecCodec(int channel, CodecInst& codec) override { | 
| - EXPECT_EQ(channel, kReceiveChannelId); | 
| - codec = GetRecvRecCodecInst(); | 
| + EXPECT_EQ(channel, kRecvChannelId); | 
| + codec = GetRecvCodecInst(); | 
| return 0; | 
| } | 
| int SetRecPayloadType(int channel, const CodecInst& codec) override { | 
| @@ -295,13 +404,13 @@ class FakeVoiceEngine final : public VoiceEngineImpl { | 
| // VoENetEqStats | 
| int GetNetworkStatistics(int channel, NetworkStatistics& stats) override { | 
| - EXPECT_EQ(channel, kReceiveChannelId); | 
| + EXPECT_EQ(channel, kRecvChannelId); | 
| stats = GetRecvNetworkStats(); | 
| return 0; | 
| } | 
| int GetDecodingCallStatistics(int channel, | 
| AudioDecodingCallStats* stats) const override { | 
| - EXPECT_EQ(channel, kReceiveChannelId); | 
| + EXPECT_EQ(channel, kRecvChannelId); | 
| EXPECT_NE(nullptr, stats); | 
| *stats = GetRecvAudioDecodingCallStats(); | 
| return 0; | 
| @@ -309,9 +418,13 @@ class FakeVoiceEngine final : public VoiceEngineImpl { | 
| // VoERTP_RTCP | 
| int SetLocalSSRC(int channel, unsigned int ssrc) override { return -1; } | 
| - int GetLocalSSRC(int channel, unsigned int& ssrc) override { return -1; } | 
| + int GetLocalSSRC(int channel, unsigned int& ssrc) override { | 
| + EXPECT_EQ(channel, kSendChannelId); | 
| + ssrc = 0; | 
| + return 0; | 
| + } | 
| int GetRemoteSSRC(int channel, unsigned int& ssrc) override { | 
| - EXPECT_EQ(channel, kReceiveChannelId); | 
| + EXPECT_EQ(channel, kRecvChannelId); | 
| ssrc = 0; | 
| return 0; | 
| } | 
| @@ -347,13 +460,28 @@ class FakeVoiceEngine final : public VoiceEngineImpl { | 
| unsigned int& maxJitterMs, | 
| unsigned int& discardedPackets) override { return -1; } | 
| int GetRTCPStatistics(int channel, CallStatistics& stats) override { | 
| - EXPECT_EQ(channel, kReceiveChannelId); | 
| - stats = GetRecvCallStats(); | 
| + if (channel == kSendChannelId) { | 
| + stats = GetSendCallStats(); | 
| + } else { | 
| + EXPECT_EQ(channel, kRecvChannelId); | 
| + stats = GetRecvCallStats(); | 
| + } | 
| return 0; | 
| } | 
| int GetRemoteRTCPReportBlocks( | 
| int channel, | 
| - std::vector<ReportBlock>* receive_blocks) override { return -1; } | 
| + std::vector<ReportBlock>* receive_blocks) override { | 
| + EXPECT_EQ(channel, kSendChannelId); | 
| + EXPECT_NE(receive_blocks, nullptr); | 
| + EXPECT_EQ(receive_blocks->size(), 0u); | 
| + webrtc::ReportBlock block = GetSendReportBlock(); | 
| + receive_blocks->push_back(block); // Has wrong SSRC. | 
| + block.source_SSRC = kSendSsrc; | 
| + receive_blocks->push_back(block); // Correct block. | 
| + block.fraction_lost = 0; | 
| + receive_blocks->push_back(block); // Duplicate SSRC, bad fraction_lost. | 
| + return 0; | 
| + } | 
| int SetNACKStatus(int channel, bool enable, int maxNoPackets) override { | 
| return -1; | 
| } | 
| @@ -365,7 +493,7 @@ class FakeVoiceEngine final : public VoiceEngineImpl { | 
| int GetDelayEstimate(int channel, | 
| int* jitter_buffer_delay_ms, | 
| int* playout_buffer_delay_ms) override { | 
| - EXPECT_EQ(channel, kReceiveChannelId); | 
| + EXPECT_EQ(channel, kRecvChannelId); | 
| *jitter_buffer_delay_ms = kRecvJitterBufferDelay; | 
| *playout_buffer_delay_ms = kRecvPlayoutBufferDelay; | 
| return 0; | 
| @@ -395,10 +523,13 @@ class FakeVoiceEngine final : public VoiceEngineImpl { | 
| int GetSpeechOutputLevel(int channel, unsigned int& level) override { | 
| return -1; | 
| } | 
| - int GetSpeechInputLevelFullRange(unsigned int& level) override { return -1; } | 
| + int GetSpeechInputLevelFullRange(unsigned int& level) override { | 
| + level = kSendSpeechInputLevel; | 
| + return 0; | 
| + } | 
| int GetSpeechOutputLevelFullRange(int channel, | 
| unsigned int& level) override { | 
| - EXPECT_EQ(channel, kReceiveChannelId); | 
| + EXPECT_EQ(channel, kRecvChannelId); | 
| level = kRecvSpeechOutputLevel; | 
| return 0; | 
| } |