blob: 3b9c52331c9668c33a09645c1fc2b976b6f37ee6 [file] [log] [blame]
Henrik Boström9438ddc2020-05-11 14:32:411/*
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>
Florent Castelli8037fc62024-08-29 13:00:4014#include <optional>
Henrik Boström9438ddc2020-05-11 14:32:4115
Evan Shrubsolec1d34b02020-08-10 09:01:4316#include "api/task_queue/task_queue_base.h"
Henrik Boström9438ddc2020-05-11 14:32:4117#include "api/video_codecs/video_encoder.h"
Evan Shrubsolea1c77f62020-08-10 09:01:0618#include "call/adaptation/test/mock_resource_listener.h"
Niels Möller83830f32022-05-20 07:12:5719#include "rtc_base/thread.h"
Evan Shrubsolea1c77f62020-08-10 09:01:0620#include "test/gmock.h"
Henrik Boström9438ddc2020-05-11 14:32:4121#include "test/gtest.h"
22
23namespace webrtc {
24
Evan Shrubsolea1c77f62020-08-10 09:01:0625using testing::_;
26using testing::Eq;
27using testing::StrictMock;
28
Henrik Boström9438ddc2020-05-11 14:32:4129namespace {
30
Evan Shrubsole9492d502020-07-03 11:51:4831class FakeDegradationPreferenceProvider : public DegradationPreferenceProvider {
32 public:
Evan Shrubsolea1c77f62020-08-10 09:01:0633 ~FakeDegradationPreferenceProvider() override = default;
Evan Shrubsole9492d502020-07-03 11:51:4834
35 DegradationPreference degradation_preference() const override {
36 return DegradationPreference::MAINTAIN_FRAMERATE;
37 }
38};
39
Henrik Boström9438ddc2020-05-11 14:32:4140} // namespace
41
42class QualityScalerResourceTest : public ::testing::Test {
43 public:
44 QualityScalerResourceTest()
Evan Shrubsole99b0f8d2020-08-25 11:12:2845 : quality_scaler_resource_(QualityScalerResource::Create()) {
Evan Shrubsolec1d34b02020-08-10 09:01:4346 quality_scaler_resource_->RegisterEncoderTaskQueue(
47 TaskQueueBase::Current());
48 quality_scaler_resource_->SetResourceListener(&fake_resource_listener_);
Henrik Boström9438ddc2020-05-11 14:32:4149 }
50
Evan Shrubsolea1c77f62020-08-10 09:01:0651 ~QualityScalerResourceTest() override {
Evan Shrubsolec1d34b02020-08-10 09:01:4352 quality_scaler_resource_->SetResourceListener(nullptr);
Henrik Boström9438ddc2020-05-11 14:32:4153 }
54
55 protected:
Niels Möller83830f32022-05-20 07:12:5756 rtc::AutoThread main_thread_;
Evan Shrubsolea1c77f62020-08-10 09:01:0657 StrictMock<MockResourceListener> fake_resource_listener_;
Evan Shrubsole9492d502020-07-03 11:51:4858 FakeDegradationPreferenceProvider degradation_preference_provider_;
Henrik Boström9438ddc2020-05-11 14:32:4159 rtc::scoped_refptr<QualityScalerResource> quality_scaler_resource_;
60};
61
62TEST_F(QualityScalerResourceTest, ReportQpHigh) {
Evan Shrubsolea1c77f62020-08-10 09:01:0663 EXPECT_CALL(fake_resource_listener_,
64 OnResourceUsageStateMeasured(Eq(quality_scaler_resource_),
65 Eq(ResourceUsageState::kOveruse)));
Evan Shrubsolec1d34b02020-08-10 09:01:4366 quality_scaler_resource_->OnReportQpUsageHigh();
Henrik Boström9438ddc2020-05-11 14:32:4167}
68
69TEST_F(QualityScalerResourceTest, ReportQpLow) {
Evan Shrubsolea1c77f62020-08-10 09:01:0670 EXPECT_CALL(fake_resource_listener_,
71 OnResourceUsageStateMeasured(Eq(quality_scaler_resource_),
72 Eq(ResourceUsageState::kUnderuse)));
Evan Shrubsolec1d34b02020-08-10 09:01:4373 quality_scaler_resource_->OnReportQpUsageLow();
Henrik Boström9438ddc2020-05-11 14:32:4174}
75
76} // namespace webrtc