Chromium Code Reviews| 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> |
| 11 #include <list> | 11 #include <list> |
| 12 #include <string> | 12 #include <string> |
| 13 | 13 |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 15 | 15 |
| 16 #include "webrtc/audio_state.h" | 16 #include "webrtc/audio_state.h" |
| 17 #include "webrtc/base/checks.h" | 17 #include "webrtc/base/checks.h" |
| 18 #include "webrtc/base/scoped_ptr.h" | 18 #include "webrtc/base/scoped_ptr.h" |
| 19 #include "webrtc/base/thread_annotations.h" | 19 #include "webrtc/base/thread_annotations.h" |
| 20 #include "webrtc/call.h" | 20 #include "webrtc/call.h" |
| 21 #include "webrtc/system_wrappers/include/critical_section_wrapper.h" | 21 #include "webrtc/system_wrappers/include/critical_section_wrapper.h" |
| 22 #include "webrtc/system_wrappers/include/event_wrapper.h" | 22 #include "webrtc/system_wrappers/include/event_wrapper.h" |
|
mflodman
2015/12/10 08:11:34
Remove.
pbos-webrtc
2015/12/10 11:44:55
Done.
| |
| 23 #include "webrtc/system_wrappers/include/trace.h" | 23 #include "webrtc/system_wrappers/include/trace.h" |
| 24 #include "webrtc/test/call_test.h" | 24 #include "webrtc/test/call_test.h" |
| 25 #include "webrtc/test/direct_transport.h" | 25 #include "webrtc/test/direct_transport.h" |
| 26 #include "webrtc/test/encoder_settings.h" | 26 #include "webrtc/test/encoder_settings.h" |
| 27 #include "webrtc/test/fake_decoder.h" | 27 #include "webrtc/test/fake_decoder.h" |
| 28 #include "webrtc/test/fake_encoder.h" | 28 #include "webrtc/test/fake_encoder.h" |
| 29 #include "webrtc/test/mock_voice_engine.h" | 29 #include "webrtc/test/mock_voice_engine.h" |
| 30 #include "webrtc/test/frame_generator_capturer.h" | 30 #include "webrtc/test/frame_generator_capturer.h" |
| 31 | 31 |
| 32 namespace webrtc { | 32 namespace webrtc { |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 50 | 50 |
| 51 ~TraceObserver() { | 51 ~TraceObserver() { |
| 52 Trace::SetTraceCallback(nullptr); | 52 Trace::SetTraceCallback(nullptr); |
| 53 Trace::ReturnTrace(); | 53 Trace::ReturnTrace(); |
| 54 } | 54 } |
| 55 | 55 |
| 56 void PushExpectedLogLine(const std::string& expected_log_line) { | 56 void PushExpectedLogLine(const std::string& expected_log_line) { |
| 57 callback_.PushExpectedLogLine(expected_log_line); | 57 callback_.PushExpectedLogLine(expected_log_line); |
| 58 } | 58 } |
| 59 | 59 |
| 60 EventTypeWrapper Wait() { return callback_.Wait(); } | 60 bool Wait() { return callback_.Wait(); } |
| 61 | 61 |
| 62 private: | 62 private: |
| 63 class Callback : public TraceCallback { | 63 class Callback : public TraceCallback { |
| 64 public: | 64 public: |
| 65 Callback() : done_(EventWrapper::Create()) {} | 65 Callback() : done_(false, false) {} |
| 66 | 66 |
| 67 void Print(TraceLevel level, const char* message, int length) override { | 67 void Print(TraceLevel level, const char* message, int length) override { |
| 68 rtc::CritScope lock(&crit_sect_); | 68 rtc::CritScope lock(&crit_sect_); |
| 69 std::string msg(message); | 69 std::string msg(message); |
| 70 if (msg.find("BitrateEstimator") != std::string::npos) { | 70 if (msg.find("BitrateEstimator") != std::string::npos) { |
| 71 received_log_lines_.push_back(msg); | 71 received_log_lines_.push_back(msg); |
| 72 } | 72 } |
| 73 int num_popped = 0; | 73 int num_popped = 0; |
| 74 while (!received_log_lines_.empty() && !expected_log_lines_.empty()) { | 74 while (!received_log_lines_.empty() && !expected_log_lines_.empty()) { |
| 75 std::string a = received_log_lines_.front(); | 75 std::string a = received_log_lines_.front(); |
| 76 std::string b = expected_log_lines_.front(); | 76 std::string b = expected_log_lines_.front(); |
| 77 received_log_lines_.pop_front(); | 77 received_log_lines_.pop_front(); |
| 78 expected_log_lines_.pop_front(); | 78 expected_log_lines_.pop_front(); |
| 79 num_popped++; | 79 num_popped++; |
| 80 EXPECT_TRUE(a.find(b) != std::string::npos); | 80 EXPECT_TRUE(a.find(b) != std::string::npos); |
| 81 } | 81 } |
| 82 if (expected_log_lines_.size() <= 0) { | 82 if (expected_log_lines_.size() <= 0) { |
| 83 if (num_popped > 0) { | 83 if (num_popped > 0) { |
| 84 done_->Set(); | 84 done_.Set(); |
| 85 } | 85 } |
| 86 return; | 86 return; |
| 87 } | 87 } |
| 88 } | 88 } |
| 89 | 89 |
| 90 EventTypeWrapper Wait() { | 90 bool Wait() { return done_.Wait(test::CallTest::kDefaultTimeoutMs); } |
| 91 return done_->Wait(test::CallTest::kDefaultTimeoutMs); | |
| 92 } | |
| 93 | 91 |
| 94 void PushExpectedLogLine(const std::string& expected_log_line) { | 92 void PushExpectedLogLine(const std::string& expected_log_line) { |
| 95 rtc::CritScope lock(&crit_sect_); | 93 rtc::CritScope lock(&crit_sect_); |
| 96 expected_log_lines_.push_back(expected_log_line); | 94 expected_log_lines_.push_back(expected_log_line); |
| 97 } | 95 } |
| 98 | 96 |
| 99 private: | 97 private: |
| 100 typedef std::list<std::string> Strings; | 98 typedef std::list<std::string> Strings; |
| 101 rtc::CriticalSection crit_sect_; | 99 rtc::CriticalSection crit_sect_; |
| 102 Strings received_log_lines_ GUARDED_BY(crit_sect_); | 100 Strings received_log_lines_ GUARDED_BY(crit_sect_); |
| 103 Strings expected_log_lines_ GUARDED_BY(crit_sect_); | 101 Strings expected_log_lines_ GUARDED_BY(crit_sect_); |
| 104 rtc::scoped_ptr<EventWrapper> done_; | 102 rtc::Event done_; |
| 105 }; | 103 }; |
| 106 | 104 |
| 107 Callback callback_; | 105 Callback callback_; |
| 108 }; | 106 }; |
| 109 } // namespace | 107 } // namespace |
| 110 | 108 |
| 111 static const int kTOFExtensionId = 4; | 109 static const int kTOFExtensionId = 4; |
| 112 static const int kASTExtensionId = 5; | 110 static const int kASTExtensionId = 5; |
| 113 | 111 |
| 114 class BitrateEstimatorTest : public test::CallTest { | 112 class BitrateEstimatorTest : public test::CallTest { |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 273 "RemoteBitrateEstimatorAbsSendTime: Instantiating."; | 271 "RemoteBitrateEstimatorAbsSendTime: Instantiating."; |
| 274 static const char* kSingleStreamLog = | 272 static const char* kSingleStreamLog = |
| 275 "RemoteBitrateEstimatorSingleStream: Instantiating."; | 273 "RemoteBitrateEstimatorSingleStream: Instantiating."; |
| 276 | 274 |
| 277 TEST_F(BitrateEstimatorTest, InstantiatesTOFPerDefaultForVideo) { | 275 TEST_F(BitrateEstimatorTest, InstantiatesTOFPerDefaultForVideo) { |
| 278 send_config_.rtp.extensions.push_back( | 276 send_config_.rtp.extensions.push_back( |
| 279 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); | 277 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); |
| 280 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 278 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); |
| 281 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 279 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); |
| 282 streams_.push_back(new Stream(this, false)); | 280 streams_.push_back(new Stream(this, false)); |
| 283 EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); | 281 EXPECT_TRUE(receiver_trace_.Wait()); |
| 284 } | 282 } |
| 285 | 283 |
| 286 TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForAudio) { | 284 TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForAudio) { |
| 287 send_config_.rtp.extensions.push_back( | 285 send_config_.rtp.extensions.push_back( |
| 288 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); | 286 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); |
| 289 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 287 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); |
| 290 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 288 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); |
| 291 receiver_trace_.PushExpectedLogLine("Switching to absolute send time RBE."); | 289 receiver_trace_.PushExpectedLogLine("Switching to absolute send time RBE."); |
| 292 receiver_trace_.PushExpectedLogLine(kAbsSendTimeLog); | 290 receiver_trace_.PushExpectedLogLine(kAbsSendTimeLog); |
| 293 streams_.push_back(new Stream(this, true)); | 291 streams_.push_back(new Stream(this, true)); |
| 294 EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); | 292 EXPECT_TRUE(receiver_trace_.Wait()); |
| 295 } | 293 } |
| 296 | 294 |
| 297 TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForVideo) { | 295 TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForVideo) { |
| 298 send_config_.rtp.extensions.push_back( | 296 send_config_.rtp.extensions.push_back( |
| 299 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); | 297 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); |
| 300 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 298 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); |
| 301 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 299 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); |
| 302 receiver_trace_.PushExpectedLogLine("Switching to absolute send time RBE."); | 300 receiver_trace_.PushExpectedLogLine("Switching to absolute send time RBE."); |
| 303 receiver_trace_.PushExpectedLogLine(kAbsSendTimeLog); | 301 receiver_trace_.PushExpectedLogLine(kAbsSendTimeLog); |
| 304 streams_.push_back(new Stream(this, false)); | 302 streams_.push_back(new Stream(this, false)); |
| 305 EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); | 303 EXPECT_TRUE(receiver_trace_.Wait()); |
| 306 } | 304 } |
| 307 | 305 |
| 308 TEST_F(BitrateEstimatorTest, SwitchesToASTForAudio) { | 306 TEST_F(BitrateEstimatorTest, SwitchesToASTForAudio) { |
| 309 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 307 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); |
| 310 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 308 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); |
| 311 streams_.push_back(new Stream(this, true)); | 309 streams_.push_back(new Stream(this, true)); |
| 312 EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); | 310 EXPECT_TRUE(receiver_trace_.Wait()); |
| 313 | 311 |
| 314 send_config_.rtp.extensions.push_back( | 312 send_config_.rtp.extensions.push_back( |
| 315 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); | 313 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); |
| 316 receiver_trace_.PushExpectedLogLine("Switching to absolute send time RBE."); | 314 receiver_trace_.PushExpectedLogLine("Switching to absolute send time RBE."); |
| 317 receiver_trace_.PushExpectedLogLine(kAbsSendTimeLog); | 315 receiver_trace_.PushExpectedLogLine(kAbsSendTimeLog); |
| 318 streams_.push_back(new Stream(this, true)); | 316 streams_.push_back(new Stream(this, true)); |
| 319 EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); | 317 EXPECT_TRUE(receiver_trace_.Wait()); |
| 320 } | 318 } |
| 321 | 319 |
| 322 TEST_F(BitrateEstimatorTest, SwitchesToASTForVideo) { | 320 TEST_F(BitrateEstimatorTest, SwitchesToASTForVideo) { |
| 323 send_config_.rtp.extensions.push_back( | 321 send_config_.rtp.extensions.push_back( |
| 324 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); | 322 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); |
| 325 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 323 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); |
| 326 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 324 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); |
| 327 streams_.push_back(new Stream(this, false)); | 325 streams_.push_back(new Stream(this, false)); |
| 328 EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); | 326 EXPECT_TRUE(receiver_trace_.Wait()); |
| 329 | 327 |
| 330 send_config_.rtp.extensions[0] = | 328 send_config_.rtp.extensions[0] = |
| 331 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId); | 329 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId); |
| 332 receiver_trace_.PushExpectedLogLine("Switching to absolute send time RBE."); | 330 receiver_trace_.PushExpectedLogLine("Switching to absolute send time RBE."); |
| 333 receiver_trace_.PushExpectedLogLine(kAbsSendTimeLog); | 331 receiver_trace_.PushExpectedLogLine(kAbsSendTimeLog); |
| 334 streams_.push_back(new Stream(this, false)); | 332 streams_.push_back(new Stream(this, false)); |
| 335 EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); | 333 EXPECT_TRUE(receiver_trace_.Wait()); |
| 336 } | 334 } |
| 337 | 335 |
| 338 TEST_F(BitrateEstimatorTest, SwitchesToASTThenBackToTOFForVideo) { | 336 TEST_F(BitrateEstimatorTest, SwitchesToASTThenBackToTOFForVideo) { |
| 339 send_config_.rtp.extensions.push_back( | 337 send_config_.rtp.extensions.push_back( |
| 340 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); | 338 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); |
| 341 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 339 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); |
| 342 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 340 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); |
| 343 streams_.push_back(new Stream(this, false)); | 341 streams_.push_back(new Stream(this, false)); |
| 344 EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); | 342 EXPECT_TRUE(receiver_trace_.Wait()); |
| 345 | 343 |
| 346 send_config_.rtp.extensions[0] = | 344 send_config_.rtp.extensions[0] = |
| 347 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId); | 345 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId); |
| 348 receiver_trace_.PushExpectedLogLine("Switching to absolute send time RBE."); | 346 receiver_trace_.PushExpectedLogLine("Switching to absolute send time RBE."); |
| 349 receiver_trace_.PushExpectedLogLine(kAbsSendTimeLog); | 347 receiver_trace_.PushExpectedLogLine(kAbsSendTimeLog); |
| 350 streams_.push_back(new Stream(this, false)); | 348 streams_.push_back(new Stream(this, false)); |
| 351 EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); | 349 EXPECT_TRUE(receiver_trace_.Wait()); |
| 352 | 350 |
| 353 send_config_.rtp.extensions[0] = | 351 send_config_.rtp.extensions[0] = |
| 354 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId); | 352 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId); |
| 355 receiver_trace_.PushExpectedLogLine( | 353 receiver_trace_.PushExpectedLogLine( |
| 356 "WrappingBitrateEstimator: Switching to transmission time offset RBE."); | 354 "WrappingBitrateEstimator: Switching to transmission time offset RBE."); |
| 357 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 355 receiver_trace_.PushExpectedLogLine(kSingleStreamLog); |
| 358 streams_.push_back(new Stream(this, false)); | 356 streams_.push_back(new Stream(this, false)); |
| 359 streams_[0]->StopSending(); | 357 streams_[0]->StopSending(); |
| 360 streams_[1]->StopSending(); | 358 streams_[1]->StopSending(); |
| 361 EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); | 359 EXPECT_TRUE(receiver_trace_.Wait()); |
| 362 } | 360 } |
| 363 } // namespace webrtc | 361 } // namespace webrtc |
| OLD | NEW |