OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 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 <utility> | 11 #include <utility> |
12 #include <vector> | 12 #include <vector> |
13 | 13 |
| 14 #include "webrtc/base/fakeclock.h" |
14 #include "webrtc/logging/rtc_event_log/mock/mock_rtc_event_log.h" | 15 #include "webrtc/logging/rtc_event_log/mock/mock_rtc_event_log.h" |
15 #include "webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adapto
r_impl.h" | 16 #include "webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adapto
r_impl.h" |
16 #include "webrtc/modules/audio_coding/audio_network_adaptor/mock/mock_controller
.h" | 17 #include "webrtc/modules/audio_coding/audio_network_adaptor/mock/mock_controller
.h" |
17 #include "webrtc/modules/audio_coding/audio_network_adaptor/mock/mock_controller
_manager.h" | 18 #include "webrtc/modules/audio_coding/audio_network_adaptor/mock/mock_controller
_manager.h" |
18 #include "webrtc/modules/audio_coding/audio_network_adaptor/mock/mock_debug_dump
_writer.h" | 19 #include "webrtc/modules/audio_coding/audio_network_adaptor/mock/mock_debug_dump
_writer.h" |
19 #include "webrtc/test/gtest.h" | 20 #include "webrtc/test/gtest.h" |
20 | 21 |
21 namespace webrtc { | 22 namespace webrtc { |
22 | 23 |
23 using ::testing::_; | 24 using ::testing::_; |
(...skipping 24 matching lines...) Expand all Loading... |
48 arg.uplink_packet_loss_fraction == | 49 arg.uplink_packet_loss_fraction == |
49 config.uplink_packet_loss_fraction && | 50 config.uplink_packet_loss_fraction && |
50 arg.enable_fec == config.enable_fec && | 51 arg.enable_fec == config.enable_fec && |
51 arg.enable_dtx == config.enable_dtx && | 52 arg.enable_dtx == config.enable_dtx && |
52 arg.num_channels == config.num_channels; | 53 arg.num_channels == config.num_channels; |
53 } | 54 } |
54 | 55 |
55 struct AudioNetworkAdaptorStates { | 56 struct AudioNetworkAdaptorStates { |
56 std::unique_ptr<AudioNetworkAdaptorImpl> audio_network_adaptor; | 57 std::unique_ptr<AudioNetworkAdaptorImpl> audio_network_adaptor; |
57 std::vector<std::unique_ptr<MockController>> mock_controllers; | 58 std::vector<std::unique_ptr<MockController>> mock_controllers; |
58 std::unique_ptr<SimulatedClock> simulated_clock; | |
59 std::unique_ptr<MockRtcEventLog> event_log; | 59 std::unique_ptr<MockRtcEventLog> event_log; |
60 MockDebugDumpWriter* mock_debug_dump_writer; | 60 MockDebugDumpWriter* mock_debug_dump_writer; |
61 }; | 61 }; |
62 | 62 |
63 AudioNetworkAdaptorStates CreateAudioNetworkAdaptor() { | 63 AudioNetworkAdaptorStates CreateAudioNetworkAdaptor() { |
64 AudioNetworkAdaptorStates states; | 64 AudioNetworkAdaptorStates states; |
65 std::vector<Controller*> controllers; | 65 std::vector<Controller*> controllers; |
66 for (size_t i = 0; i < kNumControllers; ++i) { | 66 for (size_t i = 0; i < kNumControllers; ++i) { |
67 auto controller = | 67 auto controller = |
68 std::unique_ptr<MockController>(new NiceMock<MockController>()); | 68 std::unique_ptr<MockController>(new NiceMock<MockController>()); |
69 EXPECT_CALL(*controller, Die()); | 69 EXPECT_CALL(*controller, Die()); |
70 controllers.push_back(controller.get()); | 70 controllers.push_back(controller.get()); |
71 states.mock_controllers.push_back(std::move(controller)); | 71 states.mock_controllers.push_back(std::move(controller)); |
72 } | 72 } |
73 | 73 |
74 auto controller_manager = std::unique_ptr<MockControllerManager>( | 74 auto controller_manager = std::unique_ptr<MockControllerManager>( |
75 new NiceMock<MockControllerManager>()); | 75 new NiceMock<MockControllerManager>()); |
76 | 76 |
77 EXPECT_CALL(*controller_manager, Die()); | 77 EXPECT_CALL(*controller_manager, Die()); |
78 EXPECT_CALL(*controller_manager, GetControllers()) | 78 EXPECT_CALL(*controller_manager, GetControllers()) |
79 .WillRepeatedly(Return(controllers)); | 79 .WillRepeatedly(Return(controllers)); |
80 EXPECT_CALL(*controller_manager, GetSortedControllers(_)) | 80 EXPECT_CALL(*controller_manager, GetSortedControllers(_)) |
81 .WillRepeatedly(Return(controllers)); | 81 .WillRepeatedly(Return(controllers)); |
82 | 82 |
83 states.simulated_clock.reset(new SimulatedClock(kClockInitialTimeMs * 1000)); | |
84 states.event_log.reset(new NiceMock<MockRtcEventLog>()); | 83 states.event_log.reset(new NiceMock<MockRtcEventLog>()); |
85 | 84 |
86 auto debug_dump_writer = | 85 auto debug_dump_writer = |
87 std::unique_ptr<MockDebugDumpWriter>(new NiceMock<MockDebugDumpWriter>()); | 86 std::unique_ptr<MockDebugDumpWriter>(new NiceMock<MockDebugDumpWriter>()); |
88 EXPECT_CALL(*debug_dump_writer, Die()); | 87 EXPECT_CALL(*debug_dump_writer, Die()); |
89 states.mock_debug_dump_writer = debug_dump_writer.get(); | 88 states.mock_debug_dump_writer = debug_dump_writer.get(); |
90 | 89 |
91 AudioNetworkAdaptorImpl::Config config; | 90 AudioNetworkAdaptorImpl::Config config; |
92 config.clock = states.simulated_clock.get(); | |
93 config.event_log = states.event_log.get(); | 91 config.event_log = states.event_log.get(); |
94 // AudioNetworkAdaptorImpl governs the lifetime of controller manager. | 92 // AudioNetworkAdaptorImpl governs the lifetime of controller manager. |
95 states.audio_network_adaptor.reset(new AudioNetworkAdaptorImpl( | 93 states.audio_network_adaptor.reset(new AudioNetworkAdaptorImpl( |
96 config, | 94 config, |
97 std::move(controller_manager), std::move(debug_dump_writer))); | 95 std::move(controller_manager), std::move(debug_dump_writer))); |
98 | 96 |
99 return states; | 97 return states; |
100 } | 98 } |
101 | 99 |
102 void SetExpectCallToUpdateNetworkMetrics( | 100 void SetExpectCallToUpdateNetworkMetrics( |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
173 TEST(AudioNetworkAdaptorImplTest, | 171 TEST(AudioNetworkAdaptorImplTest, |
174 MakeDecisionIsCalledOnGetEncoderRuntimeConfig) { | 172 MakeDecisionIsCalledOnGetEncoderRuntimeConfig) { |
175 auto states = CreateAudioNetworkAdaptor(); | 173 auto states = CreateAudioNetworkAdaptor(); |
176 for (auto& mock_controller : states.mock_controllers) | 174 for (auto& mock_controller : states.mock_controllers) |
177 EXPECT_CALL(*mock_controller, MakeDecision(_)); | 175 EXPECT_CALL(*mock_controller, MakeDecision(_)); |
178 states.audio_network_adaptor->GetEncoderRuntimeConfig(); | 176 states.audio_network_adaptor->GetEncoderRuntimeConfig(); |
179 } | 177 } |
180 | 178 |
181 TEST(AudioNetworkAdaptorImplTest, | 179 TEST(AudioNetworkAdaptorImplTest, |
182 DumpEncoderRuntimeConfigIsCalledOnGetEncoderRuntimeConfig) { | 180 DumpEncoderRuntimeConfigIsCalledOnGetEncoderRuntimeConfig) { |
| 181 rtc::ScopedFakeClock fake_clock; |
| 182 fake_clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(kClockInitialTimeMs)); |
183 auto states = CreateAudioNetworkAdaptor(); | 183 auto states = CreateAudioNetworkAdaptor(); |
184 | |
185 AudioEncoderRuntimeConfig config; | 184 AudioEncoderRuntimeConfig config; |
186 config.bitrate_bps = rtc::Optional<int>(32000); | 185 config.bitrate_bps = rtc::Optional<int>(32000); |
187 config.enable_fec = rtc::Optional<bool>(true); | 186 config.enable_fec = rtc::Optional<bool>(true); |
188 | 187 |
189 EXPECT_CALL(*states.mock_controllers[0], MakeDecision(_)) | 188 EXPECT_CALL(*states.mock_controllers[0], MakeDecision(_)) |
190 .WillOnce(SetArgPointee<0>(config)); | 189 .WillOnce(SetArgPointee<0>(config)); |
191 | 190 |
192 EXPECT_CALL(*states.mock_debug_dump_writer, | 191 EXPECT_CALL(*states.mock_debug_dump_writer, |
193 DumpEncoderRuntimeConfig(EncoderRuntimeConfigIs(config), | 192 DumpEncoderRuntimeConfig(EncoderRuntimeConfigIs(config), |
194 kClockInitialTimeMs)); | 193 kClockInitialTimeMs)); |
195 states.audio_network_adaptor->GetEncoderRuntimeConfig(); | 194 states.audio_network_adaptor->GetEncoderRuntimeConfig(); |
196 } | 195 } |
197 | 196 |
198 TEST(AudioNetworkAdaptorImplTest, | 197 TEST(AudioNetworkAdaptorImplTest, |
199 DumpNetworkMetricsIsCalledOnSetNetworkMetrics) { | 198 DumpNetworkMetricsIsCalledOnSetNetworkMetrics) { |
| 199 rtc::ScopedFakeClock fake_clock; |
| 200 fake_clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(kClockInitialTimeMs)); |
| 201 |
200 auto states = CreateAudioNetworkAdaptor(); | 202 auto states = CreateAudioNetworkAdaptor(); |
201 | 203 |
202 constexpr int kBandwidth = 16000; | 204 constexpr int kBandwidth = 16000; |
203 constexpr float kPacketLoss = 0.7f; | 205 constexpr float kPacketLoss = 0.7f; |
204 const auto kRecoverablePacketLoss = 0.2f; | 206 const auto kRecoverablePacketLoss = 0.2f; |
205 constexpr int kRtt = 100; | 207 constexpr int kRtt = 100; |
206 constexpr int kTargetAudioBitrate = 15000; | 208 constexpr int kTargetAudioBitrate = 15000; |
207 constexpr size_t kOverhead = 64; | 209 constexpr size_t kOverhead = 64; |
208 | 210 |
209 Controller::NetworkMetrics check; | 211 Controller::NetworkMetrics check; |
210 check.uplink_bandwidth_bps = rtc::Optional<int>(kBandwidth); | 212 check.uplink_bandwidth_bps = rtc::Optional<int>(kBandwidth); |
211 int64_t timestamp_check = kClockInitialTimeMs; | 213 int64_t timestamp_check = kClockInitialTimeMs; |
212 | 214 |
213 EXPECT_CALL(*states.mock_debug_dump_writer, | 215 EXPECT_CALL(*states.mock_debug_dump_writer, |
214 DumpNetworkMetrics(NetworkMetricsIs(check), timestamp_check)); | 216 DumpNetworkMetrics(NetworkMetricsIs(check), timestamp_check)); |
215 states.audio_network_adaptor->SetUplinkBandwidth(kBandwidth); | 217 states.audio_network_adaptor->SetUplinkBandwidth(kBandwidth); |
216 | 218 |
217 states.simulated_clock->AdvanceTimeMilliseconds(100); | 219 fake_clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(100)); |
218 timestamp_check += 100; | 220 timestamp_check += 100; |
219 check.uplink_packet_loss_fraction = rtc::Optional<float>(kPacketLoss); | 221 check.uplink_packet_loss_fraction = rtc::Optional<float>(kPacketLoss); |
220 EXPECT_CALL(*states.mock_debug_dump_writer, | 222 EXPECT_CALL(*states.mock_debug_dump_writer, |
221 DumpNetworkMetrics(NetworkMetricsIs(check), timestamp_check)); | 223 DumpNetworkMetrics(NetworkMetricsIs(check), timestamp_check)); |
222 states.audio_network_adaptor->SetUplinkPacketLossFraction(kPacketLoss); | 224 states.audio_network_adaptor->SetUplinkPacketLossFraction(kPacketLoss); |
223 | 225 |
224 states.simulated_clock->AdvanceTimeMilliseconds(50); | 226 fake_clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(50)); |
225 timestamp_check += 50; | 227 timestamp_check += 50; |
226 check.uplink_recoverable_packet_loss_fraction = | 228 check.uplink_recoverable_packet_loss_fraction = |
227 rtc::Optional<float>(kRecoverablePacketLoss); | 229 rtc::Optional<float>(kRecoverablePacketLoss); |
228 EXPECT_CALL(*states.mock_debug_dump_writer, | 230 EXPECT_CALL(*states.mock_debug_dump_writer, |
229 DumpNetworkMetrics(NetworkMetricsIs(check), timestamp_check)); | 231 DumpNetworkMetrics(NetworkMetricsIs(check), timestamp_check)); |
230 states.audio_network_adaptor->SetUplinkRecoverablePacketLossFraction( | 232 states.audio_network_adaptor->SetUplinkRecoverablePacketLossFraction( |
231 kRecoverablePacketLoss); | 233 kRecoverablePacketLoss); |
232 | 234 |
233 states.simulated_clock->AdvanceTimeMilliseconds(200); | 235 fake_clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(200)); |
234 timestamp_check += 200; | 236 timestamp_check += 200; |
235 check.rtt_ms = rtc::Optional<int>(kRtt); | 237 check.rtt_ms = rtc::Optional<int>(kRtt); |
236 EXPECT_CALL(*states.mock_debug_dump_writer, | 238 EXPECT_CALL(*states.mock_debug_dump_writer, |
237 DumpNetworkMetrics(NetworkMetricsIs(check), timestamp_check)); | 239 DumpNetworkMetrics(NetworkMetricsIs(check), timestamp_check)); |
238 states.audio_network_adaptor->SetRtt(kRtt); | 240 states.audio_network_adaptor->SetRtt(kRtt); |
239 | 241 |
240 states.simulated_clock->AdvanceTimeMilliseconds(150); | 242 fake_clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(150)); |
241 timestamp_check += 150; | 243 timestamp_check += 150; |
242 check.target_audio_bitrate_bps = rtc::Optional<int>(kTargetAudioBitrate); | 244 check.target_audio_bitrate_bps = rtc::Optional<int>(kTargetAudioBitrate); |
243 EXPECT_CALL(*states.mock_debug_dump_writer, | 245 EXPECT_CALL(*states.mock_debug_dump_writer, |
244 DumpNetworkMetrics(NetworkMetricsIs(check), timestamp_check)); | 246 DumpNetworkMetrics(NetworkMetricsIs(check), timestamp_check)); |
245 states.audio_network_adaptor->SetTargetAudioBitrate(kTargetAudioBitrate); | 247 states.audio_network_adaptor->SetTargetAudioBitrate(kTargetAudioBitrate); |
246 | 248 |
247 states.simulated_clock->AdvanceTimeMilliseconds(50); | 249 fake_clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(50)); |
248 timestamp_check += 50; | 250 timestamp_check += 50; |
249 check.overhead_bytes_per_packet = rtc::Optional<size_t>(kOverhead); | 251 check.overhead_bytes_per_packet = rtc::Optional<size_t>(kOverhead); |
250 EXPECT_CALL(*states.mock_debug_dump_writer, | 252 EXPECT_CALL(*states.mock_debug_dump_writer, |
251 DumpNetworkMetrics(NetworkMetricsIs(check), timestamp_check)); | 253 DumpNetworkMetrics(NetworkMetricsIs(check), timestamp_check)); |
252 states.audio_network_adaptor->SetOverhead(kOverhead); | 254 states.audio_network_adaptor->SetOverhead(kOverhead); |
253 } | 255 } |
254 | 256 |
255 TEST(AudioNetworkAdaptorImplTest, LogRuntimeConfigOnGetEncoderRuntimeConfig) { | 257 TEST(AudioNetworkAdaptorImplTest, LogRuntimeConfigOnGetEncoderRuntimeConfig) { |
256 auto states = CreateAudioNetworkAdaptor(); | 258 auto states = CreateAudioNetworkAdaptor(); |
257 | 259 |
258 AudioEncoderRuntimeConfig config; | 260 AudioEncoderRuntimeConfig config; |
259 config.bitrate_bps = rtc::Optional<int>(32000); | 261 config.bitrate_bps = rtc::Optional<int>(32000); |
260 config.enable_fec = rtc::Optional<bool>(true); | 262 config.enable_fec = rtc::Optional<bool>(true); |
261 | 263 |
262 EXPECT_CALL(*states.mock_controllers[0], MakeDecision(_)) | 264 EXPECT_CALL(*states.mock_controllers[0], MakeDecision(_)) |
263 .WillOnce(SetArgPointee<0>(config)); | 265 .WillOnce(SetArgPointee<0>(config)); |
264 | 266 |
265 EXPECT_CALL(*states.event_log, | 267 EXPECT_CALL(*states.event_log, |
266 LogAudioNetworkAdaptation(EncoderRuntimeConfigIs(config))) | 268 LogAudioNetworkAdaptation(EncoderRuntimeConfigIs(config))) |
267 .Times(1); | 269 .Times(1); |
268 states.audio_network_adaptor->GetEncoderRuntimeConfig(); | 270 states.audio_network_adaptor->GetEncoderRuntimeConfig(); |
269 } | 271 } |
270 | 272 |
271 } // namespace webrtc | 273 } // namespace webrtc |
OLD | NEW |