| Index: webrtc/call/bitrate_estimator_tests.cc | 
| diff --git a/webrtc/call/bitrate_estimator_tests.cc b/webrtc/call/bitrate_estimator_tests.cc | 
| index 3ce96f614ae13d34006526ea15e605d68aa58069..5b07c547449a109de1571c1aecb3d1fbf6bab9a5 100644 | 
| --- a/webrtc/call/bitrate_estimator_tests.cc | 
| +++ b/webrtc/call/bitrate_estimator_tests.cc | 
| @@ -15,6 +15,7 @@ | 
|  | 
| #include "webrtc/audio_state.h" | 
| #include "webrtc/base/checks.h" | 
| +#include "webrtc/base/logging.h" | 
| #include "webrtc/base/scoped_ptr.h" | 
| #include "webrtc/base/thread_annotations.h" | 
| #include "webrtc/call.h" | 
| @@ -32,26 +33,12 @@ | 
| namespace webrtc { | 
| namespace { | 
| // Note: If you consider to re-use this class, think twice and instead consider | 
| -// writing tests that don't depend on the trace system. | 
| -class TraceObserver { | 
| +// writing tests that don't depend on the logging system. | 
| +class LogObserver { | 
| public: | 
| -  TraceObserver() { | 
| -    Trace::set_level_filter(kTraceTerseInfo); | 
| +  LogObserver() { rtc::LogMessage::AddLogToStream(&callback_, rtc::LS_INFO); } | 
|  | 
| -    Trace::CreateTrace(); | 
| -    Trace::SetTraceCallback(&callback_); | 
| - | 
| -    // Call webrtc trace to initialize the tracer that would otherwise trigger a | 
| -    // data-race if left to be initialized by multiple threads (i.e. threads | 
| -    // spawned by test::DirectTransport members in BitrateEstimatorTest). | 
| -    WEBRTC_TRACE(kTraceStateInfo, kTraceUtility, -1, | 
| -                 "Instantiate without data races."); | 
| -  } | 
| - | 
| -  ~TraceObserver() { | 
| -    Trace::SetTraceCallback(nullptr); | 
| -    Trace::ReturnTrace(); | 
| -  } | 
| +  ~LogObserver() { rtc::LogMessage::RemoveLogToStream(&callback_); } | 
|  | 
| void PushExpectedLogLine(const std::string& expected_log_line) { | 
| callback_.PushExpectedLogLine(expected_log_line); | 
| @@ -60,16 +47,20 @@ class TraceObserver { | 
| EventTypeWrapper Wait() { return callback_.Wait(); } | 
|  | 
| private: | 
| -  class Callback : public TraceCallback { | 
| +  class Callback : public rtc::LogSink { | 
| public: | 
| Callback() : done_(EventWrapper::Create()) {} | 
|  | 
| -    void Print(TraceLevel level, const char* message, int length) override { | 
| +    void OnLogMessage(const std::string& message) override { | 
| rtc::CritScope lock(&crit_sect_); | 
| -      std::string msg(message); | 
| -      if (msg.find("BitrateEstimator") != std::string::npos) { | 
| -        received_log_lines_.push_back(msg); | 
| +      // Ignore log lines that are due to missing AST extensions, these are | 
| +      // logged when we switch back from AST to TOF until the wrapping bitrate | 
| +      // estimator gives up on using AST. | 
| +      if (message.find("BitrateEstimator") != std::string::npos && | 
| +          message.find("packet is missing") == std::string::npos) { | 
| +        received_log_lines_.push_back(message); | 
| } | 
| + | 
| int num_popped = 0; | 
| while (!received_log_lines_.empty() && !expected_log_lines_.empty()) { | 
| std::string a = received_log_lines_.front(); | 
| @@ -77,7 +68,7 @@ class TraceObserver { | 
| received_log_lines_.pop_front(); | 
| expected_log_lines_.pop_front(); | 
| num_popped++; | 
| -        EXPECT_TRUE(a.find(b) != std::string::npos); | 
| +        EXPECT_TRUE(a.find(b) != std::string::npos) << a << " != " << b; | 
| } | 
| if (expected_log_lines_.size() <= 0) { | 
| if (num_popped > 0) { | 
| @@ -260,7 +251,7 @@ class BitrateEstimatorTest : public test::CallTest { | 
| }; | 
|  | 
| testing::NiceMock<test::MockVoiceEngine> mock_voice_engine_; | 
| -  TraceObserver receiver_trace_; | 
| +  LogObserver receiver_log_; | 
| rtc::scoped_ptr<test::DirectTransport> send_transport_; | 
| rtc::scoped_ptr<test::DirectTransport> receive_transport_; | 
| rtc::scoped_ptr<Call> sender_call_; | 
| @@ -277,87 +268,87 @@ static const char* kSingleStreamLog = | 
| TEST_F(BitrateEstimatorTest, InstantiatesTOFPerDefaultForVideo) { | 
| send_config_.rtp.extensions.push_back( | 
| RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); | 
| -  receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 
| -  receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 
| +  receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 
| +  receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 
| streams_.push_back(new Stream(this, false)); | 
| -  EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); | 
| +  EXPECT_EQ(kEventSignaled, receiver_log_.Wait()); | 
| } | 
|  | 
| TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForAudio) { | 
| send_config_.rtp.extensions.push_back( | 
| RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); | 
| -  receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 
| -  receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 
| -  receiver_trace_.PushExpectedLogLine("Switching to absolute send time RBE."); | 
| -  receiver_trace_.PushExpectedLogLine(kAbsSendTimeLog); | 
| +  receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 
| +  receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 
| +  receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); | 
| +  receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 
| streams_.push_back(new Stream(this, true)); | 
| -  EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); | 
| +  EXPECT_EQ(kEventSignaled, receiver_log_.Wait()); | 
| } | 
|  | 
| TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForVideo) { | 
| send_config_.rtp.extensions.push_back( | 
| RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); | 
| -  receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 
| -  receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 
| -  receiver_trace_.PushExpectedLogLine("Switching to absolute send time RBE."); | 
| -  receiver_trace_.PushExpectedLogLine(kAbsSendTimeLog); | 
| +  receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 
| +  receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 
| +  receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); | 
| +  receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 
| streams_.push_back(new Stream(this, false)); | 
| -  EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); | 
| +  EXPECT_EQ(kEventSignaled, receiver_log_.Wait()); | 
| } | 
|  | 
| TEST_F(BitrateEstimatorTest, SwitchesToASTForAudio) { | 
| -  receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 
| -  receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 
| +  receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 
| +  receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 
| streams_.push_back(new Stream(this, true)); | 
| -  EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); | 
| +  EXPECT_EQ(kEventSignaled, receiver_log_.Wait()); | 
|  | 
| send_config_.rtp.extensions.push_back( | 
| RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); | 
| -  receiver_trace_.PushExpectedLogLine("Switching to absolute send time RBE."); | 
| -  receiver_trace_.PushExpectedLogLine(kAbsSendTimeLog); | 
| +  receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); | 
| +  receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 
| streams_.push_back(new Stream(this, true)); | 
| -  EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); | 
| +  EXPECT_EQ(kEventSignaled, receiver_log_.Wait()); | 
| } | 
|  | 
| TEST_F(BitrateEstimatorTest, SwitchesToASTForVideo) { | 
| send_config_.rtp.extensions.push_back( | 
| RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); | 
| -  receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 
| -  receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 
| +  receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 
| +  receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 
| streams_.push_back(new Stream(this, false)); | 
| -  EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); | 
| +  EXPECT_EQ(kEventSignaled, receiver_log_.Wait()); | 
|  | 
| send_config_.rtp.extensions[0] = | 
| RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId); | 
| -  receiver_trace_.PushExpectedLogLine("Switching to absolute send time RBE."); | 
| -  receiver_trace_.PushExpectedLogLine(kAbsSendTimeLog); | 
| +  receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); | 
| +  receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 
| streams_.push_back(new Stream(this, false)); | 
| -  EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); | 
| +  EXPECT_EQ(kEventSignaled, receiver_log_.Wait()); | 
| } | 
|  | 
| TEST_F(BitrateEstimatorTest, SwitchesToASTThenBackToTOFForVideo) { | 
| send_config_.rtp.extensions.push_back( | 
| RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); | 
| -  receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 
| -  receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 
| +  receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 
| +  receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 
| streams_.push_back(new Stream(this, false)); | 
| -  EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); | 
| +  EXPECT_EQ(kEventSignaled, receiver_log_.Wait()); | 
|  | 
| send_config_.rtp.extensions[0] = | 
| RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId); | 
| -  receiver_trace_.PushExpectedLogLine("Switching to absolute send time RBE."); | 
| -  receiver_trace_.PushExpectedLogLine(kAbsSendTimeLog); | 
| +  receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); | 
| +  receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 
| streams_.push_back(new Stream(this, false)); | 
| -  EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); | 
| +  EXPECT_EQ(kEventSignaled, receiver_log_.Wait()); | 
|  | 
| send_config_.rtp.extensions[0] = | 
| RtpExtension(RtpExtension::kTOffset, kTOFExtensionId); | 
| -  receiver_trace_.PushExpectedLogLine( | 
| +  receiver_log_.PushExpectedLogLine( | 
| "WrappingBitrateEstimator: Switching to transmission time offset RBE."); | 
| -  receiver_trace_.PushExpectedLogLine(kSingleStreamLog); | 
| +  receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 
| streams_.push_back(new Stream(this, false)); | 
| streams_[0]->StopSending(); | 
| streams_[1]->StopSending(); | 
| -  EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); | 
| +  EXPECT_EQ(kEventSignaled, receiver_log_.Wait()); | 
| } | 
| }  // namespace webrtc | 
|  |