| Index: webrtc/video/overuse_frame_detector_unittest.cc
 | 
| diff --git a/webrtc/video/overuse_frame_detector_unittest.cc b/webrtc/video/overuse_frame_detector_unittest.cc
 | 
| index f00b32df6e147dccabe145f90090964ef18d7e7b..6768591f01742ab494de085d2f2eab2ac6d76a25 100644
 | 
| --- a/webrtc/video/overuse_frame_detector_unittest.cc
 | 
| +++ b/webrtc/video/overuse_frame_detector_unittest.cc
 | 
| @@ -16,10 +16,11 @@
 | 
|  #include "webrtc/test/gtest.h"
 | 
|  #include "webrtc/video/overuse_frame_detector.h"
 | 
|  #include "webrtc/video_frame.h"
 | 
| +#include "webrtc/modules/video_coding/utility/quality_scaler.h"
 | 
|  
 | 
|  namespace webrtc {
 | 
|  
 | 
| -using ::testing::Invoke;
 | 
| +using ::testing::InvokeWithoutArgs;
 | 
|  
 | 
|  namespace {
 | 
|    const int kWidth = 640;
 | 
| @@ -29,24 +30,24 @@ namespace {
 | 
|    const int kProcessTime5ms = 5;
 | 
|  }  // namespace
 | 
|  
 | 
| -class MockCpuOveruseObserver : public CpuOveruseObserver {
 | 
| +class MockCpuOveruseObserver : public ScalingObserverInterface {
 | 
|   public:
 | 
|    MockCpuOveruseObserver() {}
 | 
|    virtual ~MockCpuOveruseObserver() {}
 | 
|  
 | 
| -  MOCK_METHOD0(OveruseDetected, void());
 | 
| -  MOCK_METHOD0(NormalUsage, void());
 | 
| +  MOCK_METHOD1(ScaleUp, void(ScaleReason));
 | 
| +  MOCK_METHOD1(ScaleDown, void(ScaleReason));
 | 
|  };
 | 
|  
 | 
| -class CpuOveruseObserverImpl : public CpuOveruseObserver {
 | 
| +class CpuOveruseObserverImpl : public ScalingObserverInterface {
 | 
|   public:
 | 
|    CpuOveruseObserverImpl() :
 | 
|      overuse_(0),
 | 
|      normaluse_(0) {}
 | 
|    virtual ~CpuOveruseObserverImpl() {}
 | 
|  
 | 
| -  void OveruseDetected() { ++overuse_; }
 | 
| -  void NormalUsage() { ++normaluse_; }
 | 
| +  void ScaleDown(ScaleReason) { ++overuse_; }
 | 
| +  void ScaleUp(ScaleReason) { ++normaluse_; }
 | 
|  
 | 
|    int overuse_;
 | 
|    int normaluse_;
 | 
| @@ -56,7 +57,7 @@ class OveruseFrameDetectorUnderTest : public OveruseFrameDetector {
 | 
|   public:
 | 
|    OveruseFrameDetectorUnderTest(Clock* clock,
 | 
|                                  const CpuOveruseOptions& options,
 | 
| -                                CpuOveruseObserver* overuse_observer,
 | 
| +                                ScalingObserverInterface* overuse_observer,
 | 
|                                  EncodedFrameObserver* encoder_timing,
 | 
|                                  CpuOveruseMetricsObserver* metrics_observer)
 | 
|        : OveruseFrameDetector(clock,
 | 
| @@ -145,6 +146,8 @@ class OveruseFrameDetectorTest : public ::testing::Test,
 | 
|    std::unique_ptr<MockCpuOveruseObserver> observer_;
 | 
|    std::unique_ptr<OveruseFrameDetectorUnderTest> overuse_detector_;
 | 
|    CpuOveruseMetrics metrics_;
 | 
| +
 | 
| +  static const auto reason_ = ScalingObserverInterface::ScaleReason::kCpu;
 | 
|  };
 | 
|  
 | 
|  
 | 
| @@ -152,33 +155,33 @@ class OveruseFrameDetectorTest : public ::testing::Test,
 | 
|  // UsagePercent() < low_encode_usage_threshold_percent => underuse.
 | 
|  TEST_F(OveruseFrameDetectorTest, TriggerOveruse) {
 | 
|    // usage > high => overuse
 | 
| -  EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(1);
 | 
| +  EXPECT_CALL(*(observer_.get()), ScaleDown(reason_)).Times(1);
 | 
|    TriggerOveruse(options_.high_threshold_consecutive_count);
 | 
|  }
 | 
|  
 | 
|  TEST_F(OveruseFrameDetectorTest, OveruseAndRecover) {
 | 
|    // usage > high => overuse
 | 
| -  EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(1);
 | 
| +  EXPECT_CALL(*(observer_.get()), ScaleDown(reason_)).Times(1);
 | 
|    TriggerOveruse(options_.high_threshold_consecutive_count);
 | 
|    // usage < low => underuse
 | 
| -  EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(testing::AtLeast(1));
 | 
| +  EXPECT_CALL(*(observer_.get()), ScaleUp(reason_)).Times(testing::AtLeast(1));
 | 
|    TriggerUnderuse();
 | 
|  }
 | 
|  
 | 
|  TEST_F(OveruseFrameDetectorTest, OveruseAndRecoverWithNoObserver) {
 | 
|    overuse_detector_.reset(new OveruseFrameDetectorUnderTest(
 | 
|        clock_.get(), options_, nullptr, nullptr, this));
 | 
| -  EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(0);
 | 
| +  EXPECT_CALL(*(observer_.get()), ScaleDown(reason_)).Times(0);
 | 
|    TriggerOveruse(options_.high_threshold_consecutive_count);
 | 
| -  EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(0);
 | 
| +  EXPECT_CALL(*(observer_.get()), ScaleUp(reason_)).Times(0);
 | 
|    TriggerUnderuse();
 | 
|  }
 | 
|  
 | 
|  TEST_F(OveruseFrameDetectorTest, DoubleOveruseAndRecover) {
 | 
| -  EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(2);
 | 
| +  EXPECT_CALL(*(observer_.get()), ScaleDown(reason_)).Times(2);
 | 
|    TriggerOveruse(options_.high_threshold_consecutive_count);
 | 
|    TriggerOveruse(options_.high_threshold_consecutive_count);
 | 
| -  EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(testing::AtLeast(1));
 | 
| +  EXPECT_CALL(*(observer_.get()), ScaleUp(reason_)).Times(testing::AtLeast(1));
 | 
|    TriggerUnderuse();
 | 
|  }
 | 
|  
 | 
| @@ -197,22 +200,22 @@ TEST_F(OveruseFrameDetectorTest, TriggerUnderuseWithMinProcessCount) {
 | 
|  }
 | 
|  
 | 
|  TEST_F(OveruseFrameDetectorTest, ConstantOveruseGivesNoNormalUsage) {
 | 
| -  EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(0);
 | 
| -  EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(64);
 | 
| +  EXPECT_CALL(*(observer_.get()), ScaleUp(reason_)).Times(0);
 | 
| +  EXPECT_CALL(*(observer_.get()), ScaleDown(reason_)).Times(64);
 | 
|    for (size_t i = 0; i < 64; ++i) {
 | 
|      TriggerOveruse(options_.high_threshold_consecutive_count);
 | 
|    }
 | 
|  }
 | 
|  
 | 
|  TEST_F(OveruseFrameDetectorTest, ConsecutiveCountTriggersOveruse) {
 | 
| -  EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(1);
 | 
| +  EXPECT_CALL(*(observer_.get()), ScaleDown(reason_)).Times(1);
 | 
|    options_.high_threshold_consecutive_count = 2;
 | 
|    ReinitializeOveruseDetector();
 | 
|    TriggerOveruse(2);
 | 
|  }
 | 
|  
 | 
|  TEST_F(OveruseFrameDetectorTest, IncorrectConsecutiveCountTriggersNoOveruse) {
 | 
| -  EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(0);
 | 
| +  EXPECT_CALL(*(observer_.get()), ScaleDown(reason_)).Times(0);
 | 
|    options_.high_threshold_consecutive_count = 2;
 | 
|    ReinitializeOveruseDetector();
 | 
|    TriggerOveruse(1);
 | 
| @@ -278,7 +281,8 @@ TEST_F(OveruseFrameDetectorTest, InitialProcessingUsage) {
 | 
|  }
 | 
|  
 | 
|  TEST_F(OveruseFrameDetectorTest, MeasuresMultipleConcurrentSamples) {
 | 
| -  EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(testing::AtLeast(1));
 | 
| +  EXPECT_CALL(*(observer_.get()), ScaleDown(reason_))
 | 
| +      .Times(testing::AtLeast(1));
 | 
|    static const int kIntervalMs = 33;
 | 
|    static const size_t kNumFramesEncodingDelay = 3;
 | 
|    VideoFrame frame(I420Buffer::Create(kWidth, kHeight),
 | 
| @@ -299,7 +303,8 @@ TEST_F(OveruseFrameDetectorTest, MeasuresMultipleConcurrentSamples) {
 | 
|  
 | 
|  TEST_F(OveruseFrameDetectorTest, UpdatesExistingSamples) {
 | 
|    // >85% encoding time should trigger overuse.
 | 
| -  EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(testing::AtLeast(1));
 | 
| +  EXPECT_CALL(*(observer_.get()), ScaleDown(reason_))
 | 
| +      .Times(testing::AtLeast(1));
 | 
|    static const int kIntervalMs = 33;
 | 
|    static const int kDelayMs = 30;
 | 
|    VideoFrame frame(I420Buffer::Create(kWidth, kHeight),
 | 
| @@ -332,8 +337,8 @@ TEST_F(OveruseFrameDetectorTest, RunOnTqNormalUsage) {
 | 
|  
 | 
|    // Expect NormalUsage(). When called, stop the |overuse_detector_| and then
 | 
|    // set |event| to end the test.
 | 
| -  EXPECT_CALL(*(observer_.get()), NormalUsage())
 | 
| -      .WillOnce(Invoke([this, &event] {
 | 
| +  EXPECT_CALL(*(observer_.get()), ScaleUp(reason_))
 | 
| +      .WillOnce(InvokeWithoutArgs([this, &event] {
 | 
|          overuse_detector_->StopCheckForOveruse();
 | 
|          event.Set();
 | 
|        }));
 | 
| 
 |