1 /* 2 * Copyright 2020 The WebRTC Project Authors. All rights reserved. 3 * 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 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #include "video/adaptation/quality_scaler_resource.h" 12 13 #include <memory> 14 15 #include "absl/types/optional.h" 16 #include "api/task_queue/task_queue_base.h" 17 #include "api/video_codecs/video_encoder.h" 18 #include "call/adaptation/test/mock_resource_listener.h" 19 #include "rtc_base/thread.h" 20 #include "test/gmock.h" 21 #include "test/gtest.h" 22 23 namespace webrtc { 24 25 using testing::_; 26 using testing::Eq; 27 using testing::StrictMock; 28 29 namespace { 30 31 class FakeDegradationPreferenceProvider : public DegradationPreferenceProvider { 32 public: 33 ~FakeDegradationPreferenceProvider() override = default; 34 degradation_preference() const35 DegradationPreference degradation_preference() const override { 36 return DegradationPreference::MAINTAIN_FRAMERATE; 37 } 38 }; 39 40 } // namespace 41 42 class QualityScalerResourceTest : public ::testing::Test { 43 public: QualityScalerResourceTest()44 QualityScalerResourceTest() 45 : quality_scaler_resource_(QualityScalerResource::Create()) { 46 quality_scaler_resource_->RegisterEncoderTaskQueue( 47 TaskQueueBase::Current()); 48 quality_scaler_resource_->SetResourceListener(&fake_resource_listener_); 49 } 50 ~QualityScalerResourceTest()51 ~QualityScalerResourceTest() override { 52 quality_scaler_resource_->SetResourceListener(nullptr); 53 } 54 55 protected: 56 rtc::AutoThread main_thread_; 57 StrictMock<MockResourceListener> fake_resource_listener_; 58 FakeDegradationPreferenceProvider degradation_preference_provider_; 59 rtc::scoped_refptr<QualityScalerResource> quality_scaler_resource_; 60 }; 61 TEST_F(QualityScalerResourceTest,ReportQpHigh)62TEST_F(QualityScalerResourceTest, ReportQpHigh) { 63 EXPECT_CALL(fake_resource_listener_, 64 OnResourceUsageStateMeasured(Eq(quality_scaler_resource_), 65 Eq(ResourceUsageState::kOveruse))); 66 quality_scaler_resource_->OnReportQpUsageHigh(); 67 } 68 TEST_F(QualityScalerResourceTest,ReportQpLow)69TEST_F(QualityScalerResourceTest, ReportQpLow) { 70 EXPECT_CALL(fake_resource_listener_, 71 OnResourceUsageStateMeasured(Eq(quality_scaler_resource_), 72 Eq(ResourceUsageState::kUnderuse))); 73 quality_scaler_resource_->OnReportQpUsageLow(); 74 } 75 76 } // namespace webrtc 77