1 /*
2 * Copyright (C) 2024 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include "RefreshRateCalculatorFactory.h"
18
19 namespace android::hardware::graphics::composer {
20
21 // Build InstantRefreshRateCalculator.
BuildRefreshRateCalculator(EventQueue * eventQueue,int64_t maxValidPeriodNs)22 std::shared_ptr<RefreshRateCalculator> RefreshRateCalculatorFactory::BuildRefreshRateCalculator(
23 EventQueue* eventQueue, int64_t maxValidPeriodNs) {
24 return std::make_shared<InstantRefreshRateCalculator>(eventQueue, maxValidPeriodNs);
25 }
26
27 // Build ExitIdleRefreshRateCalculator.
BuildRefreshRateCalculator(EventQueue * eventQueue,const ExitIdleRefreshRateCalculatorParameters & params)28 std::unique_ptr<RefreshRateCalculator> RefreshRateCalculatorFactory::BuildRefreshRateCalculator(
29 EventQueue* eventQueue, const ExitIdleRefreshRateCalculatorParameters& params) {
30 return std::make_unique<ExitIdleRefreshRateCalculator>(eventQueue, params);
31 }
32
33 // Build VideoFrameRateCalculator
BuildRefreshRateCalculator(EventQueue * eventQueue,const VideoFrameRateCalculatorParameters & params)34 std::shared_ptr<RefreshRateCalculator> RefreshRateCalculatorFactory::BuildRefreshRateCalculator(
35 EventQueue* eventQueue, const VideoFrameRateCalculatorParameters& params) {
36 return std::make_shared<VideoFrameRateCalculator>(eventQueue, params);
37 }
38
39 // Build PeriodRefreshRateCalculator.
BuildRefreshRateCalculator(EventQueue * eventQueue,const PeriodRefreshRateCalculatorParameters & params)40 std::shared_ptr<RefreshRateCalculator> RefreshRateCalculatorFactory::BuildRefreshRateCalculator(
41 EventQueue* eventQueue, const PeriodRefreshRateCalculatorParameters& params) {
42 return std::make_shared<PeriodRefreshRateCalculator>(eventQueue, params);
43 }
44
45 // Build CombinedRefreshRateCalculator.
BuildRefreshRateCalculator(EventQueue * eventQueue,const std::vector<RefreshRateCalculatorType> & types)46 std::shared_ptr<RefreshRateCalculator> RefreshRateCalculatorFactory::BuildRefreshRateCalculator(
47 EventQueue* eventQueue, const std::vector<RefreshRateCalculatorType>& types) {
48 std::vector<std::shared_ptr<RefreshRateCalculator>> refreshRateCalculators;
49 for (const auto& type : types) {
50 refreshRateCalculators.emplace_back(BuildRefreshRateCalculator(eventQueue, type));
51 }
52 return std::make_shared<CombinedRefreshRateCalculator>(std::move(refreshRateCalculators));
53 }
54
55 // Build CombinedRefreshRateCalculator.
BuildRefreshRateCalculator(std::vector<std::shared_ptr<RefreshRateCalculator>> refreshRateCalculators,int minValidRefreshRate,int maxValidRefreshRate)56 std::shared_ptr<RefreshRateCalculator> RefreshRateCalculatorFactory::BuildRefreshRateCalculator(
57 std::vector<std::shared_ptr<RefreshRateCalculator>> refreshRateCalculators,
58 int minValidRefreshRate, int maxValidRefreshRate) {
59 return std::make_shared<CombinedRefreshRateCalculator>(std::move(refreshRateCalculators),
60 minValidRefreshRate,
61 maxValidRefreshRate);
62 }
63
64 // Build various RefreshRateCalculator with default settings.
BuildRefreshRateCalculator(EventQueue * eventQueue,RefreshRateCalculatorType type)65 std::shared_ptr<RefreshRateCalculator> RefreshRateCalculatorFactory::BuildRefreshRateCalculator(
66 EventQueue* eventQueue, RefreshRateCalculatorType type) {
67 switch (type) {
68 case RefreshRateCalculatorType::kAod: {
69 return std::make_shared<AODRefreshRateCalculator>(eventQueue);
70 }
71 case RefreshRateCalculatorType::kInstant: {
72 return std::make_shared<InstantRefreshRateCalculator>(eventQueue);
73 }
74 case RefreshRateCalculatorType::kExitIdle: {
75 return std::make_unique<ExitIdleRefreshRateCalculator>(eventQueue);
76 }
77 case RefreshRateCalculatorType::kPeriodical: {
78 return std::make_shared<PeriodRefreshRateCalculator>(eventQueue);
79 }
80 case RefreshRateCalculatorType::kVideoPlayback: {
81 return std::make_shared<VideoFrameRateCalculator>(eventQueue);
82 }
83 case RefreshRateCalculatorType::kCombined: {
84 std::vector<RefreshRateCalculatorType> types{RefreshRateCalculatorType::kVideoPlayback,
85 RefreshRateCalculatorType::kPeriodical};
86 return BuildRefreshRateCalculator(eventQueue, types);
87 }
88 default:
89 return nullptr;
90 };
91 }
92
93 } // namespace android::hardware::graphics::composer
94