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

Side by Side Diff: webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl_unittest.cc

Issue 2365723002: Relanding of "Adding debug dump to audio network adaptor." (Closed)
Patch Set: fixing Created 4 years, 2 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
OLDNEW
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 "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 #include "webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adapto r_impl.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/mock/mock_controller .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 _manager.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_debug_dump _writer.h"
18 19
19 namespace webrtc { 20 namespace webrtc {
20 21
21 using ::testing::_; 22 using ::testing::_;
22 using ::testing::NiceMock; 23 using ::testing::NiceMock;
23 using ::testing::Return; 24 using ::testing::Return;
25 using ::testing::SetArgPointee;
24 26
25 namespace { 27 namespace {
26 28
27 constexpr size_t kNumControllers = 2; 29 constexpr size_t kNumControllers = 2;
28 30
31 constexpr int64_t kClockInitialTimeMs = 12345678;
32
29 MATCHER_P(NetworkMetricsIs, metric, "") { 33 MATCHER_P(NetworkMetricsIs, metric, "") {
30 return arg.uplink_bandwidth_bps == metric.uplink_bandwidth_bps && 34 return arg.uplink_bandwidth_bps == metric.uplink_bandwidth_bps &&
31 arg.target_audio_bitrate_bps == metric.target_audio_bitrate_bps && 35 arg.target_audio_bitrate_bps == metric.target_audio_bitrate_bps &&
36 arg.rtt_ms == metric.rtt_ms &&
32 arg.uplink_packet_loss_fraction == metric.uplink_packet_loss_fraction; 37 arg.uplink_packet_loss_fraction == metric.uplink_packet_loss_fraction;
33 } 38 }
34 39
35 MATCHER_P(ConstraintsReceiverFrameLengthRangeIs, frame_length_range, "") { 40 MATCHER_P(ConstraintsReceiverFrameLengthRangeIs, frame_length_range, "") {
36 return arg.receiver_frame_length_range->min_frame_length_ms == 41 return arg.receiver_frame_length_range->min_frame_length_ms ==
37 frame_length_range.min_frame_length_ms && 42 frame_length_range.min_frame_length_ms &&
38 arg.receiver_frame_length_range->max_frame_length_ms == 43 arg.receiver_frame_length_range->max_frame_length_ms ==
39 frame_length_range.max_frame_length_ms; 44 frame_length_range.max_frame_length_ms;
40 } 45 }
41 46
47 MATCHER_P(EncoderRuntimeConfigIs, config, "") {
48 return arg.bitrate_bps == config.bitrate_bps &&
49 arg.frame_length_ms == config.frame_length_ms &&
50 arg.uplink_packet_loss_fraction ==
51 config.uplink_packet_loss_fraction &&
52 arg.enable_fec == config.enable_fec &&
53 arg.enable_dtx == config.enable_dtx &&
54 arg.num_channels == config.num_channels;
55 }
56
42 struct AudioNetworkAdaptorStates { 57 struct AudioNetworkAdaptorStates {
43 std::unique_ptr<AudioNetworkAdaptorImpl> audio_network_adaptor; 58 std::unique_ptr<AudioNetworkAdaptorImpl> audio_network_adaptor;
44 std::vector<std::unique_ptr<MockController>> mock_controllers; 59 std::vector<std::unique_ptr<MockController>> mock_controllers;
60 std::unique_ptr<SimulatedClock> simulated_clock;
61 MockDebugDumpWriter* mock_debug_dump_writer;
45 }; 62 };
46 63
47 AudioNetworkAdaptorStates CreateAudioNetworkAdaptor() { 64 AudioNetworkAdaptorStates CreateAudioNetworkAdaptor() {
48 AudioNetworkAdaptorStates states; 65 AudioNetworkAdaptorStates states;
49 std::vector<Controller*> controllers; 66 std::vector<Controller*> controllers;
50 for (size_t i = 0; i < kNumControllers; ++i) { 67 for (size_t i = 0; i < kNumControllers; ++i) {
51 auto controller = 68 auto controller =
52 std::unique_ptr<MockController>(new NiceMock<MockController>()); 69 std::unique_ptr<MockController>(new NiceMock<MockController>());
53 EXPECT_CALL(*controller, Die()); 70 EXPECT_CALL(*controller, Die());
54 controllers.push_back(controller.get()); 71 controllers.push_back(controller.get());
55 states.mock_controllers.push_back(std::move(controller)); 72 states.mock_controllers.push_back(std::move(controller));
56 } 73 }
57 74
58 auto controller_manager = std::unique_ptr<MockControllerManager>( 75 auto controller_manager = std::unique_ptr<MockControllerManager>(
59 new NiceMock<MockControllerManager>()); 76 new NiceMock<MockControllerManager>());
60 77
61 EXPECT_CALL(*controller_manager, Die()); 78 EXPECT_CALL(*controller_manager, Die());
62 EXPECT_CALL(*controller_manager, GetControllers()) 79 EXPECT_CALL(*controller_manager, GetControllers())
63 .WillRepeatedly(Return(controllers)); 80 .WillRepeatedly(Return(controllers));
64 EXPECT_CALL(*controller_manager, GetSortedControllers(_)) 81 EXPECT_CALL(*controller_manager, GetSortedControllers(_))
65 .WillRepeatedly(Return(controllers)); 82 .WillRepeatedly(Return(controllers));
66 83
84 states.simulated_clock.reset(new SimulatedClock(kClockInitialTimeMs * 1000));
85
86 auto debug_dump_writer =
87 std::unique_ptr<MockDebugDumpWriter>(new NiceMock<MockDebugDumpWriter>());
88 EXPECT_CALL(*debug_dump_writer, Die());
89 states.mock_debug_dump_writer = debug_dump_writer.get();
90
91 AudioNetworkAdaptorImpl::Config config;
92 config.clock = states.simulated_clock.get();
67 // AudioNetworkAdaptorImpl governs the lifetime of controller manager. 93 // AudioNetworkAdaptorImpl governs the lifetime of controller manager.
68 states.audio_network_adaptor.reset(new AudioNetworkAdaptorImpl( 94 states.audio_network_adaptor.reset(new AudioNetworkAdaptorImpl(
69 AudioNetworkAdaptorImpl::Config(), std::move(controller_manager))); 95 config,
96 std::move(controller_manager), std::move(debug_dump_writer)));
70 97
71 return states; 98 return states;
72 } 99 }
73 100
74 } // namespace 101 } // namespace
75 102
76 TEST(AudioNetworkAdaptorImplTest, 103 TEST(AudioNetworkAdaptorImplTest,
77 MakeDecisionIsCalledOnGetEncoderRuntimeConfig) { 104 MakeDecisionIsCalledOnGetEncoderRuntimeConfig) {
78 auto states = CreateAudioNetworkAdaptor(); 105 auto states = CreateAudioNetworkAdaptor();
79 106
(...skipping 21 matching lines...) Expand all
101 auto states = CreateAudioNetworkAdaptor(); 128 auto states = CreateAudioNetworkAdaptor();
102 129
103 for (auto& mock_controller : states.mock_controllers) { 130 for (auto& mock_controller : states.mock_controllers) {
104 EXPECT_CALL(*mock_controller, 131 EXPECT_CALL(*mock_controller,
105 SetConstraints(ConstraintsReceiverFrameLengthRangeIs( 132 SetConstraints(ConstraintsReceiverFrameLengthRangeIs(
106 Controller::Constraints::FrameLengthRange(20, 120)))); 133 Controller::Constraints::FrameLengthRange(20, 120))));
107 } 134 }
108 states.audio_network_adaptor->SetReceiverFrameLengthRange(20, 120); 135 states.audio_network_adaptor->SetReceiverFrameLengthRange(20, 120);
109 } 136 }
110 137
138 TEST(AudioNetworkAdaptorImplTest,
139 DumpEncoderRuntimeConfigIsCalledOnGetEncoderRuntimeConfig) {
140 auto states = CreateAudioNetworkAdaptor();
141
142 AudioNetworkAdaptor::EncoderRuntimeConfig config;
143 config.bitrate_bps = rtc::Optional<int>(32000);
144 config.enable_fec = rtc::Optional<bool>(true);
145
146 EXPECT_CALL(*states.mock_controllers[0], MakeDecision(_, _))
147 .WillOnce(SetArgPointee<1>(config));
148
149 EXPECT_CALL(*states.mock_debug_dump_writer,
150 DumpEncoderRuntimeConfig(EncoderRuntimeConfigIs(config),
151 kClockInitialTimeMs));
152 states.audio_network_adaptor->GetEncoderRuntimeConfig();
153 }
154
155 TEST(AudioNetworkAdaptorImplTest,
156 DumpNetworkMetricsIsCalledOnSetNetworkMetrics) {
157 auto states = CreateAudioNetworkAdaptor();
158
159 constexpr int kBandwidth = 16000;
160 constexpr float kPacketLoss = 0.7f;
161 constexpr int kRtt = 100;
162
163 Controller::NetworkMetrics check;
164 check.uplink_bandwidth_bps = rtc::Optional<int>(kBandwidth);
165 int64_t timestamp_check = kClockInitialTimeMs;
166
167 EXPECT_CALL(*states.mock_debug_dump_writer,
168 DumpNetworkMetrics(NetworkMetricsIs(check), timestamp_check));
169 states.audio_network_adaptor->SetUplinkBandwidth(kBandwidth);
170
171 states.simulated_clock->AdvanceTimeMilliseconds(100);
172 timestamp_check += 100;
173 check.uplink_packet_loss_fraction = rtc::Optional<float>(kPacketLoss);
174 EXPECT_CALL(*states.mock_debug_dump_writer,
175 DumpNetworkMetrics(NetworkMetricsIs(check), timestamp_check));
176 states.audio_network_adaptor->SetUplinkPacketLossFraction(kPacketLoss);
177
178 states.simulated_clock->AdvanceTimeMilliseconds(200);
179 timestamp_check += 200;
180 check.rtt_ms = rtc::Optional<int>(kRtt);
181 EXPECT_CALL(*states.mock_debug_dump_writer,
182 DumpNetworkMetrics(NetworkMetricsIs(check), timestamp_check));
183 states.audio_network_adaptor->SetRtt(kRtt);
184 }
185
111 } // namespace webrtc 186 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698