OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 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 #include <functional> | 10 #include <functional> |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
95 static const int kTOFExtensionId = 4; | 95 static const int kTOFExtensionId = 4; |
96 static const int kASTExtensionId = 5; | 96 static const int kASTExtensionId = 5; |
97 | 97 |
98 class BitrateEstimatorTest : public test::CallTest { | 98 class BitrateEstimatorTest : public test::CallTest { |
99 public: | 99 public: |
100 BitrateEstimatorTest() : receive_config_(nullptr) {} | 100 BitrateEstimatorTest() : receive_config_(nullptr) {} |
101 | 101 |
102 virtual ~BitrateEstimatorTest() { EXPECT_TRUE(streams_.empty()); } | 102 virtual ~BitrateEstimatorTest() { EXPECT_TRUE(streams_.empty()); } |
103 | 103 |
104 virtual void SetUp() { | 104 virtual void SetUp() { |
105 Call::Config config(event_log_.get()); | 105 task_queue_.SendTask([this]() { |
106 receiver_call_.reset(Call::Create(config)); | 106 Call::Config config(event_log_.get()); |
107 sender_call_.reset(Call::Create(config)); | 107 receiver_call_.reset(Call::Create(config)); |
108 sender_call_.reset(Call::Create(config)); | |
108 | 109 |
109 send_transport_.reset( | 110 send_transport_.reset(new test::DirectTransport( |
110 new test::DirectTransport(sender_call_.get(), payload_type_map_)); | 111 &task_queue_, sender_call_.get(), payload_type_map_)); |
111 send_transport_->SetReceiver(receiver_call_->Receiver()); | 112 send_transport_->SetReceiver(receiver_call_->Receiver()); |
112 receive_transport_.reset( | 113 receive_transport_.reset(new test::DirectTransport( |
113 new test::DirectTransport(receiver_call_.get(), payload_type_map_)); | 114 &task_queue_, receiver_call_.get(), payload_type_map_)); |
114 receive_transport_->SetReceiver(sender_call_->Receiver()); | 115 receive_transport_->SetReceiver(sender_call_->Receiver()); |
115 | 116 |
116 video_send_config_ = VideoSendStream::Config(send_transport_.get()); | 117 video_send_config_ = VideoSendStream::Config(send_transport_.get()); |
117 video_send_config_.rtp.ssrcs.push_back(kVideoSendSsrcs[0]); | 118 video_send_config_.rtp.ssrcs.push_back(kVideoSendSsrcs[0]); |
118 // Encoders will be set separately per stream. | 119 // Encoders will be set separately per stream. |
119 video_send_config_.encoder_settings.encoder = nullptr; | 120 video_send_config_.encoder_settings.encoder = nullptr; |
120 video_send_config_.encoder_settings.payload_name = "FAKE"; | 121 video_send_config_.encoder_settings.payload_name = "FAKE"; |
121 video_send_config_.encoder_settings.payload_type = | 122 video_send_config_.encoder_settings.payload_type = |
122 kFakeVideoSendPayloadType; | 123 kFakeVideoSendPayloadType; |
123 test::FillEncoderConfiguration(1, &video_encoder_config_); | 124 test::FillEncoderConfiguration(1, &video_encoder_config_); |
124 | 125 |
125 receive_config_ = VideoReceiveStream::Config(receive_transport_.get()); | 126 receive_config_ = VideoReceiveStream::Config(receive_transport_.get()); |
126 // receive_config_.decoders will be set by every stream separately. | 127 // receive_config_.decoders will be set by every stream separately. |
127 receive_config_.rtp.remote_ssrc = video_send_config_.rtp.ssrcs[0]; | 128 receive_config_.rtp.remote_ssrc = video_send_config_.rtp.ssrcs[0]; |
128 receive_config_.rtp.local_ssrc = kReceiverLocalVideoSsrc; | 129 receive_config_.rtp.local_ssrc = kReceiverLocalVideoSsrc; |
129 receive_config_.rtp.remb = true; | 130 receive_config_.rtp.remb = true; |
130 receive_config_.rtp.extensions.push_back( | 131 receive_config_.rtp.extensions.push_back( |
131 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId)); | 132 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId)); |
132 receive_config_.rtp.extensions.push_back( | 133 receive_config_.rtp.extensions.push_back( |
133 RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId)); | 134 RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId)); |
135 }); | |
134 } | 136 } |
135 | 137 |
136 virtual void TearDown() { | 138 virtual void TearDown() { |
137 std::for_each(streams_.begin(), streams_.end(), | 139 task_queue_.SendTask([this]() { |
138 std::mem_fun(&Stream::StopSending)); | 140 std::for_each(streams_.begin(), streams_.end(), |
141 std::mem_fun(&Stream::StopSending)); | |
139 | 142 |
140 send_transport_->StopSending(); | 143 while (!streams_.empty()) { |
nisse-webrtc
2017/08/21 09:07:07
Why is StopSending no longer needed?
Also dropped
eladalon
2017/08/21 10:56:53
reset() both stops as well as deallocates, so Stop
| |
141 receive_transport_->StopSending(); | 144 delete streams_.back(); |
145 streams_.pop_back(); | |
146 } | |
142 | 147 |
143 while (!streams_.empty()) { | 148 send_transport_.reset(); |
144 delete streams_.back(); | 149 receive_transport_.reset(); |
145 streams_.pop_back(); | |
146 } | |
147 | 150 |
148 receiver_call_.reset(); | 151 receiver_call_.reset(); |
149 sender_call_.reset(); | 152 sender_call_.reset(); |
153 }); | |
150 } | 154 } |
151 | 155 |
152 protected: | 156 protected: |
153 friend class Stream; | 157 friend class Stream; |
154 | 158 |
155 class Stream { | 159 class Stream { |
156 public: | 160 public: |
157 explicit Stream(BitrateEstimatorTest* test) | 161 explicit Stream(BitrateEstimatorTest* test) |
158 : test_(test), | 162 : test_(test), |
159 is_sending_receiving_(false), | 163 is_sending_receiving_(false), |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
234 VideoReceiveStream::Config receive_config_; | 238 VideoReceiveStream::Config receive_config_; |
235 std::vector<Stream*> streams_; | 239 std::vector<Stream*> streams_; |
236 }; | 240 }; |
237 | 241 |
238 static const char* kAbsSendTimeLog = | 242 static const char* kAbsSendTimeLog = |
239 "RemoteBitrateEstimatorAbsSendTime: Instantiating."; | 243 "RemoteBitrateEstimatorAbsSendTime: Instantiating."; |
240 static const char* kSingleStreamLog = | 244 static const char* kSingleStreamLog = |
241 "RemoteBitrateEstimatorSingleStream: Instantiating."; | 245 "RemoteBitrateEstimatorSingleStream: Instantiating."; |
242 | 246 |
243 TEST_F(BitrateEstimatorTest, InstantiatesTOFPerDefaultForVideo) { | 247 TEST_F(BitrateEstimatorTest, InstantiatesTOFPerDefaultForVideo) { |
244 video_send_config_.rtp.extensions.push_back( | 248 task_queue_.SendTask([this]() { |
245 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId)); | 249 video_send_config_.rtp.extensions.push_back( |
246 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 250 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId)); |
247 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 251 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
248 streams_.push_back(new Stream(this)); | 252 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
253 streams_.push_back(new Stream(this)); | |
254 }); | |
249 EXPECT_TRUE(receiver_log_.Wait()); | 255 EXPECT_TRUE(receiver_log_.Wait()); |
250 } | 256 } |
251 | 257 |
252 TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForVideo) { | 258 TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForVideo) { |
253 video_send_config_.rtp.extensions.push_back( | 259 task_queue_.SendTask([this]() { |
254 RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId)); | 260 video_send_config_.rtp.extensions.push_back( |
255 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 261 RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId)); |
256 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 262 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
257 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); | 263 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
258 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 264 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); |
259 streams_.push_back(new Stream(this)); | 265 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); |
266 streams_.push_back(new Stream(this)); | |
267 }); | |
260 EXPECT_TRUE(receiver_log_.Wait()); | 268 EXPECT_TRUE(receiver_log_.Wait()); |
261 } | 269 } |
262 | 270 |
263 TEST_F(BitrateEstimatorTest, SwitchesToASTForVideo) { | 271 TEST_F(BitrateEstimatorTest, SwitchesToASTForVideo) { |
264 video_send_config_.rtp.extensions.push_back( | 272 task_queue_.SendTask([this]() { |
265 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId)); | 273 video_send_config_.rtp.extensions.push_back( |
266 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 274 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId)); |
267 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 275 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
268 streams_.push_back(new Stream(this)); | 276 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
277 streams_.push_back(new Stream(this)); | |
278 }); | |
269 EXPECT_TRUE(receiver_log_.Wait()); | 279 EXPECT_TRUE(receiver_log_.Wait()); |
270 | 280 |
271 video_send_config_.rtp.extensions[0] = | 281 task_queue_.SendTask([this]() { |
272 RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId); | 282 video_send_config_.rtp.extensions[0] = |
273 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); | 283 RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId); |
274 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 284 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); |
275 streams_.push_back(new Stream(this)); | 285 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); |
286 streams_.push_back(new Stream(this)); | |
287 }); | |
276 EXPECT_TRUE(receiver_log_.Wait()); | 288 EXPECT_TRUE(receiver_log_.Wait()); |
277 } | 289 } |
278 | 290 |
279 // This test is flaky. See webrtc:5790. | 291 // This test is flaky. See webrtc:5790. |
280 TEST_F(BitrateEstimatorTest, DISABLED_SwitchesToASTThenBackToTOFForVideo) { | 292 TEST_F(BitrateEstimatorTest, DISABLED_SwitchesToASTThenBackToTOFForVideo) { |
281 video_send_config_.rtp.extensions.push_back( | 293 task_queue_.SendTask([this]() { |
282 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId)); | 294 video_send_config_.rtp.extensions.push_back( |
283 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 295 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId)); |
284 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 296 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
285 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 297 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); |
286 streams_.push_back(new Stream(this)); | 298 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
299 streams_.push_back(new Stream(this)); | |
300 }); | |
287 EXPECT_TRUE(receiver_log_.Wait()); | 301 EXPECT_TRUE(receiver_log_.Wait()); |
288 | 302 |
289 video_send_config_.rtp.extensions[0] = | 303 task_queue_.SendTask([this]() { |
290 RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId); | 304 video_send_config_.rtp.extensions[0] = |
291 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 305 RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId); |
292 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); | 306 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); |
293 streams_.push_back(new Stream(this)); | 307 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); |
308 streams_.push_back(new Stream(this)); | |
309 }); | |
294 EXPECT_TRUE(receiver_log_.Wait()); | 310 EXPECT_TRUE(receiver_log_.Wait()); |
295 | 311 |
296 video_send_config_.rtp.extensions[0] = | 312 task_queue_.SendTask([this]() { |
297 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId); | 313 video_send_config_.rtp.extensions[0] = |
298 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 314 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId); |
299 receiver_log_.PushExpectedLogLine( | 315 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); |
300 "WrappingBitrateEstimator: Switching to transmission time offset RBE."); | 316 receiver_log_.PushExpectedLogLine( |
301 streams_.push_back(new Stream(this)); | 317 "WrappingBitrateEstimator: Switching to transmission time offset RBE."); |
302 streams_[0]->StopSending(); | 318 streams_.push_back(new Stream(this)); |
303 streams_[1]->StopSending(); | 319 streams_[0]->StopSending(); |
320 streams_[1]->StopSending(); | |
321 }); | |
304 EXPECT_TRUE(receiver_log_.Wait()); | 322 EXPECT_TRUE(receiver_log_.Wait()); |
305 } | 323 } |
306 } // namespace webrtc | 324 } // namespace webrtc |
OLD | NEW |