blob: 4a179b6d0f2799e2f4e7a6ab6e43ca00ae8ab1dd [file] [log] [blame]
Alec Mouri0a1cc962019-03-14 12:33:02 -07001/*
2 * Copyright 2019 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#undef LOG_TAG
18#define LOG_TAG "SchedulerUnittests"
19
20#include <gmock/gmock.h>
21#include <log/log.h>
22#include <thread>
23
24#include "DisplayHardware/HWC2.h"
25#include "Scheduler/RefreshRateConfigs.h"
Alec Mouri0a1cc962019-03-14 12:33:02 -070026
27using namespace std::chrono_literals;
28using testing::_;
29
30namespace android {
31namespace scheduler {
32
Alec Mouri0a1cc962019-03-14 12:33:02 -070033using RefreshRate = RefreshRateConfigs::RefreshRate;
Ady Abraham8a82ba62020-01-17 12:43:17 -080034using LayerVoteType = RefreshRateConfigs::LayerVoteType;
35using LayerRequirement = RefreshRateConfigs::LayerRequirement;
Alec Mouri0a1cc962019-03-14 12:33:02 -070036
37class RefreshRateConfigsTest : public testing::Test {
38protected:
Ady Abraham2139f732019-11-13 18:56:40 -080039 static inline const HwcConfigIndexType HWC_CONFIG_ID_60 = HwcConfigIndexType(0);
Ady Abraham8a82ba62020-01-17 12:43:17 -080040 static inline const HwcConfigIndexType HWC_CONFIG_ID_72 = HwcConfigIndexType(1);
41 static inline const HwcConfigIndexType HWC_CONFIG_ID_90 = HwcConfigIndexType(2);
42 static inline const HwcConfigIndexType HWC_CONFIG_ID_120 = HwcConfigIndexType(3);
43 static inline const HwcConfigIndexType HWC_CONFIG_ID_30 = HwcConfigIndexType(4);
Ady Abraham2139f732019-11-13 18:56:40 -080044 static inline const HwcConfigGroupType HWC_GROUP_ID_0 = HwcConfigGroupType(0);
45 static inline const HwcConfigGroupType HWC_GROUP_ID_1 = HwcConfigGroupType(1);
Ady Abraham8a82ba62020-01-17 12:43:17 -080046 static constexpr auto VSYNC_30 = static_cast<int64_t>(1e9f / 30);
47 static constexpr auto VSYNC_60 = static_cast<int64_t>(1e9f / 60);
48 static constexpr auto VSYNC_72 = static_cast<int64_t>(1e9f / 72);
49 static constexpr auto VSYNC_90 = static_cast<int64_t>(1e9f / 90);
50 static constexpr auto VSYNC_120 = static_cast<int64_t>(1e9f / 120);
Ana Krulec72f0d6e2020-01-06 15:24:47 -080051 static constexpr int64_t VSYNC_60_POINT_4 = 16666665;
Alec Mouri0a1cc962019-03-14 12:33:02 -070052
53 RefreshRateConfigsTest();
54 ~RefreshRateConfigsTest();
Alec Mouri0a1cc962019-03-14 12:33:02 -070055};
56
57RefreshRateConfigsTest::RefreshRateConfigsTest() {
58 const ::testing::TestInfo* const test_info =
59 ::testing::UnitTest::GetInstance()->current_test_info();
60 ALOGD("**** Setting up for %s.%s\n", test_info->test_case_name(), test_info->name());
61}
62
63RefreshRateConfigsTest::~RefreshRateConfigsTest() {
64 const ::testing::TestInfo* const test_info =
65 ::testing::UnitTest::GetInstance()->current_test_info();
66 ALOGD("**** Tearing down after %s.%s\n", test_info->test_case_name(), test_info->name());
67}
68
69namespace {
70/* ------------------------------------------------------------------------
71 * Test cases
72 */
Ady Abraham2139f732019-11-13 18:56:40 -080073TEST_F(RefreshRateConfigsTest, oneDeviceConfig_SwitchingSupported) {
74 std::vector<RefreshRateConfigs::InputConfig> configs{
75 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60}}};
Steven Thomas2bbaabe2019-08-28 16:08:35 -070076 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -080077 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Alec Mouri0a1cc962019-03-14 12:33:02 -070078}
79
Ana Kruleced3a8cc2019-11-14 00:55:07 +010080TEST_F(RefreshRateConfigsTest, invalidPolicy) {
81 std::vector<RefreshRateConfigs::InputConfig> configs{
82 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60}}};
83 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -080084 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ana Kruleced3a8cc2019-11-14 00:55:07 +010085 ASSERT_LT(refreshRateConfigs->setPolicy(HwcConfigIndexType(10), 60, 60, nullptr), 0);
86 ASSERT_LT(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_60, 20, 40, nullptr), 0);
87}
88
Steven Thomas2bbaabe2019-08-28 16:08:35 -070089TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_storesFullRefreshRateMap) {
Ady Abraham2139f732019-11-13 18:56:40 -080090 std::vector<RefreshRateConfigs::InputConfig> configs{
91 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
92 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
Steven Thomas2bbaabe2019-08-28 16:08:35 -070093 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -080094 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Alec Mouri0a1cc962019-03-14 12:33:02 -070095
Ady Abraham2e1dd892020-03-05 13:48:36 -080096 const auto& minRate = refreshRateConfigs->getMinRefreshRate();
97 const auto& performanceRate = refreshRateConfigs->getMaxRefreshRate();
Alec Mouri0a1cc962019-03-14 12:33:02 -070098
Ady Abraham2139f732019-11-13 18:56:40 -080099 RefreshRate expectedDefaultConfig = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
100 ASSERT_EQ(expectedDefaultConfig, minRate);
101 RefreshRate expectedPerformanceConfig = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps",
102 90};
103 ASSERT_EQ(expectedPerformanceConfig, performanceRate);
104
Ady Abraham2e1dd892020-03-05 13:48:36 -0800105 const auto& minRateByPolicy = refreshRateConfigs->getMinRefreshRateByPolicy();
106 const auto& performanceRateByPolicy = refreshRateConfigs->getMaxRefreshRateByPolicy();
Ady Abraham2139f732019-11-13 18:56:40 -0800107 ASSERT_EQ(minRateByPolicy, minRate);
108 ASSERT_EQ(performanceRateByPolicy, performanceRate);
Alec Mouri0a1cc962019-03-14 12:33:02 -0700109}
Ady Abraham2139f732019-11-13 18:56:40 -0800110
111TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_storesFullRefreshRateMap_differentGroups) {
112 std::vector<RefreshRateConfigs::InputConfig> configs{
113 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
114 {HWC_CONFIG_ID_90, HWC_GROUP_ID_1, VSYNC_90}}};
115 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800116 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham2139f732019-11-13 18:56:40 -0800117
Ady Abraham2e1dd892020-03-05 13:48:36 -0800118 const auto& minRate = refreshRateConfigs->getMinRefreshRateByPolicy();
119 const auto& performanceRate = refreshRateConfigs->getMaxRefreshRate();
120 const auto& minRate60 = refreshRateConfigs->getMinRefreshRateByPolicy();
121 const auto& performanceRate60 = refreshRateConfigs->getMaxRefreshRateByPolicy();
Ady Abraham2139f732019-11-13 18:56:40 -0800122
123 RefreshRate expectedDefaultConfig = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
124 ASSERT_EQ(expectedDefaultConfig, minRate);
125 ASSERT_EQ(expectedDefaultConfig, minRate60);
126 ASSERT_EQ(expectedDefaultConfig, performanceRate60);
127
Ana Kruleced3a8cc2019-11-14 00:55:07 +0100128 ASSERT_GE(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_90, 60, 90, nullptr), 0);
Ady Abraham2139f732019-11-13 18:56:40 -0800129 refreshRateConfigs->setCurrentConfigId(HWC_CONFIG_ID_90);
130
Ady Abraham2e1dd892020-03-05 13:48:36 -0800131 const auto& minRate90 = refreshRateConfigs->getMinRefreshRateByPolicy();
132 const auto& performanceRate90 = refreshRateConfigs->getMaxRefreshRateByPolicy();
Ady Abraham2139f732019-11-13 18:56:40 -0800133
134 RefreshRate expectedPerformanceConfig = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_1, "90fps",
135 90};
136 ASSERT_EQ(expectedPerformanceConfig, performanceRate);
137 ASSERT_EQ(expectedPerformanceConfig, minRate90);
138 ASSERT_EQ(expectedPerformanceConfig, performanceRate90);
139}
140
141TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_policyChange) {
142 std::vector<RefreshRateConfigs::InputConfig> configs{
143 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
144 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
145 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800146 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
147
Ady Abraham2e1dd892020-03-05 13:48:36 -0800148 auto& minRate = refreshRateConfigs->getMinRefreshRateByPolicy();
149 auto& performanceRate = refreshRateConfigs->getMaxRefreshRateByPolicy();
Ady Abraham2139f732019-11-13 18:56:40 -0800150
151 RefreshRate expectedDefaultConfig = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
152 ASSERT_EQ(expectedDefaultConfig, minRate);
153 RefreshRate expectedPerformanceConfig = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps",
154 90};
155 ASSERT_EQ(expectedPerformanceConfig, performanceRate);
156
Ana Kruleced3a8cc2019-11-14 00:55:07 +0100157 ASSERT_GE(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_60, 60, 60, nullptr), 0);
Ady Abraham2139f732019-11-13 18:56:40 -0800158
Ady Abraham2e1dd892020-03-05 13:48:36 -0800159 auto& minRate60 = refreshRateConfigs->getMinRefreshRateByPolicy();
160 auto& performanceRate60 = refreshRateConfigs->getMaxRefreshRateByPolicy();
Ady Abraham2139f732019-11-13 18:56:40 -0800161 ASSERT_EQ(expectedDefaultConfig, minRate60);
162 ASSERT_EQ(expectedDefaultConfig, performanceRate60);
163}
164
165TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getCurrentRefreshRate) {
166 std::vector<RefreshRateConfigs::InputConfig> configs{
167 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
168 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
169 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800170 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham2139f732019-11-13 18:56:40 -0800171 {
Ady Abraham2e1dd892020-03-05 13:48:36 -0800172 auto& current = refreshRateConfigs->getCurrentRefreshRate();
Ady Abraham2139f732019-11-13 18:56:40 -0800173 EXPECT_EQ(current.configId, HWC_CONFIG_ID_60);
174 }
175
176 refreshRateConfigs->setCurrentConfigId(HWC_CONFIG_ID_90);
177 {
Ady Abraham2e1dd892020-03-05 13:48:36 -0800178 auto& current = refreshRateConfigs->getCurrentRefreshRate();
Ady Abraham2139f732019-11-13 18:56:40 -0800179 EXPECT_EQ(current.configId, HWC_CONFIG_ID_90);
180 }
181
Ana Kruleced3a8cc2019-11-14 00:55:07 +0100182 ASSERT_GE(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_90, 90, 90, nullptr), 0);
Ady Abraham2139f732019-11-13 18:56:40 -0800183 {
Ady Abraham2e1dd892020-03-05 13:48:36 -0800184 auto& current = refreshRateConfigs->getCurrentRefreshRate();
Ady Abraham2139f732019-11-13 18:56:40 -0800185 EXPECT_EQ(current.configId, HWC_CONFIG_ID_90);
186 }
187}
188
189TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContent) {
190 std::vector<RefreshRateConfigs::InputConfig> configs{
191 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
192 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
193 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800194 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham2139f732019-11-13 18:56:40 -0800195
196 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
197 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
198
Ady Abraham8a82ba62020-01-17 12:43:17 -0800199 const auto makeLayerRequirements = [](float refreshRate) -> std::vector<LayerRequirement> {
200 return {{"testLayer", LayerVoteType::Heuristic, refreshRate, 1.0f}};
201 };
202
203 EXPECT_EQ(expected90Config,
204 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(90.0f)));
205 EXPECT_EQ(expected60Config,
206 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(60.0f)));
207 EXPECT_EQ(expected90Config,
208 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(45.0f)));
209 EXPECT_EQ(expected60Config,
210 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(30.0f)));
211 EXPECT_EQ(expected60Config,
212 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(24.0f)));
Ady Abraham2139f732019-11-13 18:56:40 -0800213
Ana Kruleced3a8cc2019-11-14 00:55:07 +0100214 ASSERT_GE(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_60, 60, 60, nullptr), 0);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800215 EXPECT_EQ(expected60Config,
216 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(90.0f)));
217 EXPECT_EQ(expected60Config,
218 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(60.0f)));
219 EXPECT_EQ(expected60Config,
220 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(45.0f)));
221 EXPECT_EQ(expected60Config,
222 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(30.0f)));
223 EXPECT_EQ(expected60Config,
224 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(24.0f)));
Ady Abraham2139f732019-11-13 18:56:40 -0800225
Ana Kruleced3a8cc2019-11-14 00:55:07 +0100226 ASSERT_GE(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_90, 90, 90, nullptr), 0);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800227 EXPECT_EQ(expected90Config,
228 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(90.0f)));
229 EXPECT_EQ(expected90Config,
230 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(60.0f)));
231 EXPECT_EQ(expected90Config,
232 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(45.0f)));
233 EXPECT_EQ(expected90Config,
234 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(30.0f)));
235 EXPECT_EQ(expected90Config,
236 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(24.0f)));
Ana Kruleced3a8cc2019-11-14 00:55:07 +0100237 ASSERT_GE(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_60, 0, 120, nullptr), 0);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800238 EXPECT_EQ(expected90Config,
239 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(90.0f)));
240 EXPECT_EQ(expected60Config,
241 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(60.0f)));
242 EXPECT_EQ(expected90Config,
243 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(45.0f)));
244 EXPECT_EQ(expected60Config,
245 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(30.0f)));
246 EXPECT_EQ(expected60Config,
247 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(24.0f)));
248}
249
Ana Krulec3d367c82020-02-25 15:02:01 -0800250TEST_F(RefreshRateConfigsTest, getRefreshRateForContentV2_noLayers) {
251 std::vector<RefreshRateConfigs::InputConfig> configs{
252 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
253 {HWC_CONFIG_ID_72, HWC_GROUP_ID_0, VSYNC_72},
254 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
255 auto refreshRateConfigs = std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/
256 HWC_CONFIG_ID_72);
257
258 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
259 RefreshRate expected72Config = {HWC_CONFIG_ID_72, VSYNC_72, HWC_GROUP_ID_0, "72fps", 72};
260
261 // If there are not layers, there is not content detection, so return the current
262 // refresh rate.
263 auto layers = std::vector<LayerRequirement>{};
264 EXPECT_EQ(expected72Config,
265 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/
266 false));
267
268 // Current refresh rate can always be changed.
269 refreshRateConfigs->setCurrentConfigId(HWC_CONFIG_ID_60);
270 EXPECT_EQ(expected60Config,
271 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/
272 false));
273}
274
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800275TEST_F(RefreshRateConfigsTest, getRefreshRateForContentV2_60_90) {
Ady Abraham8a82ba62020-01-17 12:43:17 -0800276 std::vector<RefreshRateConfigs::InputConfig> configs{
277 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
278 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
279 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800280 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800281
282 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
283 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
284
285 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
286 auto& lr = layers[0];
287
288 lr.vote = LayerVoteType::Min;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800289 lr.name = "Min";
290 EXPECT_EQ(expected60Config,
291 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800292
293 lr.vote = LayerVoteType::Max;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800294 lr.name = "Max";
295 EXPECT_EQ(expected90Config,
296 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800297
298 lr.desiredRefreshRate = 90.0f;
299 lr.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800300 lr.name = "90Hz Heuristic";
301 EXPECT_EQ(expected90Config,
302 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800303
304 lr.desiredRefreshRate = 60.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800305 lr.name = "60Hz Heuristic";
306 EXPECT_EQ(expected60Config,
307 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800308
309 lr.desiredRefreshRate = 45.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800310 lr.name = "45Hz Heuristic";
311 EXPECT_EQ(expected90Config,
312 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800313
314 lr.desiredRefreshRate = 30.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800315 lr.name = "30Hz Heuristic";
316 EXPECT_EQ(expected60Config,
317 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800318
319 lr.desiredRefreshRate = 24.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800320 lr.name = "24Hz Heuristic";
321 EXPECT_EQ(expected60Config,
322 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800323
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800324 lr.name = "";
Ady Abraham8a82ba62020-01-17 12:43:17 -0800325 ASSERT_GE(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_60, 60, 60, nullptr), 0);
326
327 lr.vote = LayerVoteType::Min;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800328 EXPECT_EQ(expected60Config,
329 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800330
331 lr.vote = LayerVoteType::Max;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800332 EXPECT_EQ(expected60Config,
333 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800334
335 lr.desiredRefreshRate = 90.0f;
336 lr.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800337 EXPECT_EQ(expected60Config,
338 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800339
340 lr.desiredRefreshRate = 60.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800341 EXPECT_EQ(expected60Config,
342 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800343
344 lr.desiredRefreshRate = 45.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800345 EXPECT_EQ(expected60Config,
346 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800347
348 lr.desiredRefreshRate = 30.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800349 EXPECT_EQ(expected60Config,
350 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800351
352 lr.desiredRefreshRate = 24.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800353 EXPECT_EQ(expected60Config,
354 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800355
356 ASSERT_GE(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_90, 90, 90, nullptr), 0);
357
358 lr.vote = LayerVoteType::Min;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800359 EXPECT_EQ(expected90Config,
360 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800361
362 lr.vote = LayerVoteType::Max;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800363 EXPECT_EQ(expected90Config,
364 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800365
366 lr.desiredRefreshRate = 90.0f;
367 lr.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800368 EXPECT_EQ(expected90Config,
369 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800370
371 lr.desiredRefreshRate = 60.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800372 EXPECT_EQ(expected90Config,
373 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800374
375 lr.desiredRefreshRate = 45.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800376 EXPECT_EQ(expected90Config,
377 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800378
379 lr.desiredRefreshRate = 30.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800380 EXPECT_EQ(expected90Config,
381 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800382
383 lr.desiredRefreshRate = 24.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800384 EXPECT_EQ(expected90Config,
385 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800386
387 ASSERT_GE(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_60, 0, 120, nullptr), 0);
388 lr.vote = LayerVoteType::Min;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800389 EXPECT_EQ(expected60Config,
390 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800391
392 lr.vote = LayerVoteType::Max;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800393 EXPECT_EQ(expected90Config,
394 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800395
396 lr.desiredRefreshRate = 90.0f;
397 lr.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800398 EXPECT_EQ(expected90Config,
399 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800400
401 lr.desiredRefreshRate = 60.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800402 EXPECT_EQ(expected60Config,
403 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800404
405 lr.desiredRefreshRate = 45.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800406 EXPECT_EQ(expected90Config,
407 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800408
409 lr.desiredRefreshRate = 30.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800410 EXPECT_EQ(expected60Config,
411 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800412
413 lr.desiredRefreshRate = 24.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800414 EXPECT_EQ(expected60Config,
415 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800416}
417
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800418TEST_F(RefreshRateConfigsTest, getRefreshRateForContentV2_60_72_90) {
Ady Abraham8a82ba62020-01-17 12:43:17 -0800419 std::vector<RefreshRateConfigs::InputConfig> configs{
420 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
421 {HWC_CONFIG_ID_72, HWC_GROUP_ID_0, VSYNC_72},
422 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
423 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800424 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800425
426 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
427 RefreshRate expected72Config = {HWC_CONFIG_ID_72, VSYNC_72, HWC_GROUP_ID_0, "72fps", 70};
428 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
429
430 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
431 auto& lr = layers[0];
432
433 lr.vote = LayerVoteType::Min;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800434 EXPECT_EQ(expected60Config,
435 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800436
437 lr.vote = LayerVoteType::Max;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800438 EXPECT_EQ(expected90Config,
439 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800440
441 lr.desiredRefreshRate = 90.0f;
442 lr.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800443 EXPECT_EQ(expected90Config,
444 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800445
446 lr.desiredRefreshRate = 60.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800447 EXPECT_EQ(expected60Config,
448 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800449
450 lr.desiredRefreshRate = 45.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800451 EXPECT_EQ(expected90Config,
452 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800453
454 lr.desiredRefreshRate = 30.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800455 EXPECT_EQ(expected60Config,
456 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800457
458 lr.desiredRefreshRate = 24.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800459 EXPECT_EQ(expected72Config,
460 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800461}
462
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800463TEST_F(RefreshRateConfigsTest, getRefreshRateForContentV2_30_60_72_90_120) {
Ady Abraham8a82ba62020-01-17 12:43:17 -0800464 std::vector<RefreshRateConfigs::InputConfig> configs{
465 {{HWC_CONFIG_ID_30, HWC_GROUP_ID_0, VSYNC_30},
466 {HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
467 {HWC_CONFIG_ID_72, HWC_GROUP_ID_0, VSYNC_72},
468 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90},
469 {HWC_CONFIG_ID_120, HWC_GROUP_ID_0, VSYNC_120}}};
470 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800471 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800472
473 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
474 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
475 RefreshRate expected72Config = {HWC_CONFIG_ID_72, VSYNC_72, HWC_GROUP_ID_0, "72fps", 70};
476 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
477 RefreshRate expected120Config = {HWC_CONFIG_ID_120, VSYNC_120, HWC_GROUP_ID_0, "120fps", 120};
478
479 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
480 LayerRequirement{.weight = 1.0f}};
481 auto& lr1 = layers[0];
482 auto& lr2 = layers[1];
483
484 lr1.desiredRefreshRate = 24.0f;
485 lr1.vote = LayerVoteType::Heuristic;
486 lr2.desiredRefreshRate = 60.0f;
487 lr2.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800488 EXPECT_EQ(expected120Config,
489 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800490
491 lr1.desiredRefreshRate = 24.0f;
492 lr1.vote = LayerVoteType::Heuristic;
493 lr2.desiredRefreshRate = 48.0f;
494 lr2.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800495 EXPECT_EQ(expected72Config,
496 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800497
498 lr1.desiredRefreshRate = 24.0f;
499 lr1.vote = LayerVoteType::Heuristic;
500 lr2.desiredRefreshRate = 48.0f;
501 lr2.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800502 EXPECT_EQ(expected72Config,
503 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800504}
505
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800506TEST_F(RefreshRateConfigsTest, getRefreshRateForContentV2_30_60_90_120_DifferentTypes) {
Ady Abraham71c437d2020-01-31 15:56:57 -0800507 std::vector<RefreshRateConfigs::InputConfig> configs{
508 {{HWC_CONFIG_ID_30, HWC_GROUP_ID_0, VSYNC_30},
509 {HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
510 {HWC_CONFIG_ID_72, HWC_GROUP_ID_0, VSYNC_72},
511 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90},
512 {HWC_CONFIG_ID_120, HWC_GROUP_ID_0, VSYNC_120}}};
513 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800514 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham71c437d2020-01-31 15:56:57 -0800515
516 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
517 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
518 RefreshRate expected72Config = {HWC_CONFIG_ID_72, VSYNC_72, HWC_GROUP_ID_0, "72fps", 72};
519 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
520 RefreshRate expected120Config = {HWC_CONFIG_ID_120, VSYNC_120, HWC_GROUP_ID_0, "120fps", 120};
521
522 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
523 LayerRequirement{.weight = 1.0f}};
524 auto& lr1 = layers[0];
525 auto& lr2 = layers[1];
526
527 lr1.desiredRefreshRate = 24.0f;
528 lr1.vote = LayerVoteType::ExplicitDefault;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800529 lr1.name = "24Hz ExplicitDefault";
Ady Abraham71c437d2020-01-31 15:56:57 -0800530 lr2.desiredRefreshRate = 60.0f;
531 lr2.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800532 lr2.name = "60Hz Heuristic";
533 EXPECT_EQ(expected120Config,
534 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham71c437d2020-01-31 15:56:57 -0800535
536 lr1.desiredRefreshRate = 24.0f;
537 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800538 lr1.name = "24Hz ExplicitExactOrMultiple";
Ady Abraham71c437d2020-01-31 15:56:57 -0800539 lr2.desiredRefreshRate = 60.0f;
540 lr2.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800541 lr2.name = "60Hz Heuristic";
542 EXPECT_EQ(expected120Config,
543 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham71c437d2020-01-31 15:56:57 -0800544
545 lr1.desiredRefreshRate = 24.0f;
546 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800547 lr1.name = "24Hz ExplicitExactOrMultiple";
Ady Abraham71c437d2020-01-31 15:56:57 -0800548 lr2.desiredRefreshRate = 60.0f;
549 lr2.vote = LayerVoteType::ExplicitDefault;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800550 lr2.name = "60Hz ExplicitDefault";
551 EXPECT_EQ(expected120Config,
552 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham71c437d2020-01-31 15:56:57 -0800553
554 lr1.desiredRefreshRate = 24.0f;
555 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800556 lr1.name = "24Hz ExplicitExactOrMultiple";
Ady Abraham71c437d2020-01-31 15:56:57 -0800557 lr2.desiredRefreshRate = 90.0f;
558 lr2.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800559 lr2.name = "90Hz Heuristic";
560 EXPECT_EQ(expected90Config,
561 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
562
563 lr1.desiredRefreshRate = 24.0f;
564 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
565 lr1.name = "24Hz ExplicitExactOrMultiple";
566 lr2.desiredRefreshRate = 90.0f;
567 lr2.vote = LayerVoteType::ExplicitDefault;
568 lr2.name = "90Hz Heuristic";
569 EXPECT_EQ(expected72Config,
570 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham71c437d2020-01-31 15:56:57 -0800571
572 lr1.desiredRefreshRate = 24.0f;
573 lr1.vote = LayerVoteType::ExplicitDefault;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800574 lr1.name = "24Hz ExplicitDefault";
Ady Abraham71c437d2020-01-31 15:56:57 -0800575 lr2.desiredRefreshRate = 90.0f;
576 lr2.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800577 lr2.name = "90Hz Heuristic";
578 EXPECT_EQ(expected90Config,
579 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham71c437d2020-01-31 15:56:57 -0800580
581 lr1.desiredRefreshRate = 24.0f;
582 lr1.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800583 lr1.name = "24Hz Heuristic";
Ady Abraham71c437d2020-01-31 15:56:57 -0800584 lr2.desiredRefreshRate = 90.0f;
585 lr2.vote = LayerVoteType::ExplicitDefault;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800586 lr2.name = "90Hz ExplicitDefault";
587 EXPECT_EQ(expected72Config,
588 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham71c437d2020-01-31 15:56:57 -0800589
590 lr1.desiredRefreshRate = 24.0f;
591 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800592 lr1.name = "24Hz ExplicitExactOrMultiple";
Ady Abraham71c437d2020-01-31 15:56:57 -0800593 lr2.desiredRefreshRate = 90.0f;
594 lr2.vote = LayerVoteType::ExplicitDefault;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800595 lr2.name = "90Hz ExplicitDefault";
596 EXPECT_EQ(expected72Config,
597 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham71c437d2020-01-31 15:56:57 -0800598
599 lr1.desiredRefreshRate = 24.0f;
600 lr1.vote = LayerVoteType::ExplicitDefault;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800601 lr1.name = "24Hz ExplicitDefault";
Ady Abraham71c437d2020-01-31 15:56:57 -0800602 lr2.desiredRefreshRate = 90.0f;
603 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800604 lr2.name = "90Hz ExplicitExactOrMultiple";
605 EXPECT_EQ(expected90Config,
606 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham71c437d2020-01-31 15:56:57 -0800607}
608
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800609TEST_F(RefreshRateConfigsTest, getRefreshRateForContentV2_30_60) {
Ady Abraham8a82ba62020-01-17 12:43:17 -0800610 std::vector<RefreshRateConfigs::InputConfig> configs{
611 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
612 {HWC_CONFIG_ID_30, HWC_GROUP_ID_0, VSYNC_30}}};
613 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800614 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800615
616 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
617 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
618
619 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
620 auto& lr = layers[0];
621
622 lr.vote = LayerVoteType::Min;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800623 EXPECT_EQ(expected30Config,
624 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800625
626 lr.vote = LayerVoteType::Max;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800627 EXPECT_EQ(expected60Config,
628 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800629
630 lr.desiredRefreshRate = 90.0f;
631 lr.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800632 EXPECT_EQ(expected60Config,
633 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800634
635 lr.desiredRefreshRate = 60.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800636 EXPECT_EQ(expected60Config,
637 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800638
639 lr.desiredRefreshRate = 45.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800640 EXPECT_EQ(expected60Config,
641 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800642
643 lr.desiredRefreshRate = 30.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800644 EXPECT_EQ(expected30Config,
645 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800646
647 lr.desiredRefreshRate = 24.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800648 EXPECT_EQ(expected60Config,
649 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800650}
651
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800652TEST_F(RefreshRateConfigsTest, getRefreshRateForContentV2_30_60_72_90) {
Ady Abraham8a82ba62020-01-17 12:43:17 -0800653 std::vector<RefreshRateConfigs::InputConfig> configs{
654 {{HWC_CONFIG_ID_30, HWC_GROUP_ID_0, VSYNC_30},
655 {HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
656 {HWC_CONFIG_ID_72, HWC_GROUP_ID_0, VSYNC_72},
657 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
658 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800659 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800660
661 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
662 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
663 RefreshRate expected72Config = {HWC_CONFIG_ID_72, VSYNC_72, HWC_GROUP_ID_0, "72fps", 70};
664 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
665
666 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
667 auto& lr = layers[0];
668
669 lr.vote = LayerVoteType::Min;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800670 lr.name = "Min";
671 EXPECT_EQ(expected30Config,
672 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800673
674 lr.vote = LayerVoteType::Max;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800675 lr.name = "Max";
676 EXPECT_EQ(expected90Config,
677 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800678
679 lr.desiredRefreshRate = 90.0f;
680 lr.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800681 lr.name = "90Hz Heuristic";
682 EXPECT_EQ(expected90Config,
683 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800684
685 lr.desiredRefreshRate = 60.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800686 lr.name = "60Hz Heuristic";
687 EXPECT_EQ(expected60Config,
688 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
689 EXPECT_EQ(expected90Config,
690 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ true));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800691
692 lr.desiredRefreshRate = 45.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800693 lr.name = "45Hz Heuristic";
694 EXPECT_EQ(expected90Config,
695 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
696 EXPECT_EQ(expected90Config,
697 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ true));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800698
699 lr.desiredRefreshRate = 30.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800700 lr.name = "30Hz Heuristic";
701 EXPECT_EQ(expected30Config,
702 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
703 EXPECT_EQ(expected90Config,
704 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ true));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800705
706 lr.desiredRefreshRate = 24.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800707 lr.name = "24Hz Heuristic";
708 EXPECT_EQ(expected72Config,
709 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
710 EXPECT_EQ(expected90Config,
711 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ true));
712
713 lr.desiredRefreshRate = 24.0f;
714 lr.vote = LayerVoteType::ExplicitExactOrMultiple;
715 lr.name = "24Hz ExplicitExactOrMultiple";
716 EXPECT_EQ(expected72Config,
717 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
718 EXPECT_EQ(expected90Config,
719 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ true));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800720}
721
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800722TEST_F(RefreshRateConfigsTest, getRefreshRateForContentV2_PriorityTest) {
Ady Abraham8a82ba62020-01-17 12:43:17 -0800723 std::vector<RefreshRateConfigs::InputConfig> configs{
724 {{HWC_CONFIG_ID_30, HWC_GROUP_ID_0, VSYNC_30},
725 {HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
726 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
727 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800728 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800729
730 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
731 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
732 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
733
734 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
735 LayerRequirement{.weight = 1.0f}};
736 auto& lr1 = layers[0];
737 auto& lr2 = layers[1];
738
739 lr1.vote = LayerVoteType::Min;
740 lr2.vote = LayerVoteType::Max;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800741 EXPECT_EQ(expected90Config,
742 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800743
744 lr1.vote = LayerVoteType::Min;
745 lr2.vote = LayerVoteType::Heuristic;
746 lr2.desiredRefreshRate = 24.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800747 EXPECT_EQ(expected60Config,
748 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800749
750 lr1.vote = LayerVoteType::Min;
Ady Abraham71c437d2020-01-31 15:56:57 -0800751 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800752 lr2.desiredRefreshRate = 24.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800753 EXPECT_EQ(expected60Config,
754 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800755
756 lr1.vote = LayerVoteType::Max;
757 lr2.vote = LayerVoteType::Heuristic;
758 lr2.desiredRefreshRate = 60.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800759 EXPECT_EQ(expected90Config,
760 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800761
762 lr1.vote = LayerVoteType::Max;
Ady Abraham71c437d2020-01-31 15:56:57 -0800763 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800764 lr2.desiredRefreshRate = 60.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800765 EXPECT_EQ(expected90Config,
766 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800767
768 lr1.vote = LayerVoteType::Heuristic;
769 lr1.desiredRefreshRate = 15.0f;
770 lr2.vote = LayerVoteType::Heuristic;
771 lr2.desiredRefreshRate = 45.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800772 EXPECT_EQ(expected90Config,
773 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800774
775 lr1.vote = LayerVoteType::Heuristic;
776 lr1.desiredRefreshRate = 30.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800777 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800778 lr2.desiredRefreshRate = 45.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800779 EXPECT_EQ(expected90Config,
780 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800781}
782
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800783TEST_F(RefreshRateConfigsTest, getRefreshRateForContentV2_24FpsVideo) {
Ady Abraham8a82ba62020-01-17 12:43:17 -0800784 std::vector<RefreshRateConfigs::InputConfig> configs{
785 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
786 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
787 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800788 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800789
790 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
791 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
792 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
793
794 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
795 auto& lr = layers[0];
796
Ady Abraham71c437d2020-01-31 15:56:57 -0800797 lr.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800798 for (float fps = 23.0f; fps < 25.0f; fps += 0.1f) {
799 lr.desiredRefreshRate = fps;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800800 const auto& refreshRate =
801 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800802 printf("%.2fHz chooses %s\n", fps, refreshRate.name.c_str());
803 EXPECT_EQ(expected60Config, refreshRate);
804 }
805}
806
807TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContent_Explicit) {
808 std::vector<RefreshRateConfigs::InputConfig> configs{
809 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
810 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
811 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800812 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800813
814 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
815 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
816
817 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
818 LayerRequirement{.weight = 1.0f}};
819 auto& lr1 = layers[0];
820 auto& lr2 = layers[1];
821
822 lr1.vote = LayerVoteType::Heuristic;
823 lr1.desiredRefreshRate = 60.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800824 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800825 lr2.desiredRefreshRate = 90.0f;
826 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContent(layers));
827
828 lr1.vote = LayerVoteType::Heuristic;
829 lr1.desiredRefreshRate = 90.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800830 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800831 lr2.desiredRefreshRate = 60.0f;
832 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContent(layers));
833}
834
835TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_Explicit) {
836 std::vector<RefreshRateConfigs::InputConfig> configs{
837 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
838 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
839 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800840 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800841
842 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
843 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
844
845 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
846 LayerRequirement{.weight = 1.0f}};
847 auto& lr1 = layers[0];
848 auto& lr2 = layers[1];
849
850 lr1.vote = LayerVoteType::Heuristic;
851 lr1.desiredRefreshRate = 60.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800852 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800853 lr2.desiredRefreshRate = 90.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800854 EXPECT_EQ(expected90Config,
855 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
856
857 lr1.vote = LayerVoteType::ExplicitDefault;
858 lr1.desiredRefreshRate = 90.0f;
859 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
860 lr2.desiredRefreshRate = 60.0f;
861 EXPECT_EQ(expected60Config,
862 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800863
864 lr1.vote = LayerVoteType::Heuristic;
865 lr1.desiredRefreshRate = 90.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800866 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800867 lr2.desiredRefreshRate = 60.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800868 EXPECT_EQ(expected90Config,
869 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham2139f732019-11-13 18:56:40 -0800870}
871
Ana Krulec72f0d6e2020-01-06 15:24:47 -0800872TEST_F(RefreshRateConfigsTest, testInPolicy) {
873 RefreshRate expectedDefaultConfig = {HWC_CONFIG_ID_60, VSYNC_60_POINT_4, HWC_GROUP_ID_0,
874 "60fps", 60};
Ady Abrahamb0dbdaa2020-01-06 16:19:42 -0800875 ASSERT_TRUE(expectedDefaultConfig.inPolicy(60.000004f, 60.000004f));
Ana Krulec72f0d6e2020-01-06 15:24:47 -0800876 ASSERT_TRUE(expectedDefaultConfig.inPolicy(59.0f, 60.1f));
Ady Abrahamb0dbdaa2020-01-06 16:19:42 -0800877 ASSERT_FALSE(expectedDefaultConfig.inPolicy(75.0f, 90.0f));
878 ASSERT_FALSE(expectedDefaultConfig.inPolicy(60.0011f, 90.0f));
879 ASSERT_FALSE(expectedDefaultConfig.inPolicy(50.0f, 59.998f));
Ana Krulec72f0d6e2020-01-06 15:24:47 -0800880}
881
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800882TEST_F(RefreshRateConfigsTest, getRefreshRateForContentV2_75HzContent) {
Ady Abrahamf6b77072020-01-30 14:22:54 -0800883 std::vector<RefreshRateConfigs::InputConfig> configs{
884 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
885 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
886 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800887 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abrahamf6b77072020-01-30 14:22:54 -0800888
889 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
890 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
891 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
892
893 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
894 auto& lr = layers[0];
895
Ady Abraham71c437d2020-01-31 15:56:57 -0800896 lr.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abrahamf6b77072020-01-30 14:22:54 -0800897 for (float fps = 75.0f; fps < 100.0f; fps += 0.1f) {
898 lr.desiredRefreshRate = fps;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800899 const auto& refreshRate =
900 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false);
Ady Abrahamf6b77072020-01-30 14:22:54 -0800901 printf("%.2fHz chooses %s\n", fps, refreshRate.name.c_str());
902 EXPECT_EQ(expected90Config, refreshRate);
903 }
904}
905
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800906TEST_F(RefreshRateConfigsTest, getRefreshRateForContentV2_Multiples) {
Ady Abraham34702102020-02-10 14:12:05 -0800907 std::vector<RefreshRateConfigs::InputConfig> configs{
908 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
909 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
910 auto refreshRateConfigs =
911 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
912
913 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
914 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
915
916 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
917 LayerRequirement{.weight = 1.0f}};
918 auto& lr1 = layers[0];
919 auto& lr2 = layers[1];
920
921 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
922 lr1.desiredRefreshRate = 60.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800923 lr1.name = "60Hz ExplicitExactOrMultiple";
Ady Abraham34702102020-02-10 14:12:05 -0800924 lr2.vote = LayerVoteType::Heuristic;
925 lr2.desiredRefreshRate = 90.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800926 lr2.name = "90Hz Heuristic";
927 EXPECT_EQ(expected90Config,
928 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham34702102020-02-10 14:12:05 -0800929
930 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
931 lr1.desiredRefreshRate = 60.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800932 lr1.name = "60Hz ExplicitExactOrMultiple";
933 lr2.vote = LayerVoteType::ExplicitDefault;
934 lr2.desiredRefreshRate = 90.0f;
935 lr2.name = "90Hz ExplicitDefault";
936 EXPECT_EQ(expected60Config,
937 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
938
939 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
940 lr1.desiredRefreshRate = 60.0f;
941 lr1.name = "60Hz ExplicitExactOrMultiple";
Ady Abraham34702102020-02-10 14:12:05 -0800942 lr2.vote = LayerVoteType::Max;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800943 lr2.name = "Max";
944 EXPECT_EQ(expected90Config,
945 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham34702102020-02-10 14:12:05 -0800946
947 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
948 lr1.desiredRefreshRate = 30.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800949 lr1.name = "30Hz ExplicitExactOrMultiple";
Ady Abraham34702102020-02-10 14:12:05 -0800950 lr2.vote = LayerVoteType::Heuristic;
951 lr2.desiredRefreshRate = 90.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800952 lr2.name = "90Hz Heuristic";
953 EXPECT_EQ(expected90Config,
954 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham34702102020-02-10 14:12:05 -0800955
956 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
957 lr1.desiredRefreshRate = 30.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800958 lr1.name = "30Hz ExplicitExactOrMultiple";
Ady Abraham34702102020-02-10 14:12:05 -0800959 lr2.vote = LayerVoteType::Max;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800960 lr2.name = "Max";
961 EXPECT_EQ(expected90Config,
962 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
963}
964
965TEST_F(RefreshRateConfigsTest, scrollWhileWatching60fps_60_90) {
966 std::vector<RefreshRateConfigs::InputConfig> configs{
967 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
968 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
969 auto refreshRateConfigs =
970 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
971
972 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
973 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
974
975 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
976 LayerRequirement{.weight = 1.0f}};
977 auto& lr1 = layers[0];
978 auto& lr2 = layers[1];
979
980 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
981 lr1.desiredRefreshRate = 60.0f;
982 lr1.name = "60Hz ExplicitExactOrMultiple";
983 lr2.vote = LayerVoteType::NoVote;
984 lr2.name = "NoVote";
985 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers, false));
986
987 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
988 lr1.desiredRefreshRate = 60.0f;
989 lr1.name = "60Hz ExplicitExactOrMultiple";
990 lr2.vote = LayerVoteType::NoVote;
991 lr2.name = "NoVote";
992 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers, true));
993
994 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
995 lr1.desiredRefreshRate = 60.0f;
996 lr1.name = "60Hz ExplicitExactOrMultiple";
997 lr2.vote = LayerVoteType::Max;
998 lr2.name = "Max";
999 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers, true));
1000
1001 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
1002 lr1.desiredRefreshRate = 60.0f;
1003 lr1.name = "60Hz ExplicitExactOrMultiple";
1004 lr2.vote = LayerVoteType::Max;
1005 lr2.name = "Max";
1006 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers, false));
1007
1008 // The other layer starts to provide buffers
1009 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
1010 lr1.desiredRefreshRate = 60.0f;
1011 lr1.name = "60Hz ExplicitExactOrMultiple";
1012 lr2.vote = LayerVoteType::Heuristic;
1013 lr2.desiredRefreshRate = 90.0f;
1014 lr2.name = "90Hz Heuristic";
1015 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers, false));
Ady Abraham34702102020-02-10 14:12:05 -08001016}
1017
Alec Mouri0a1cc962019-03-14 12:33:02 -07001018} // namespace
1019} // namespace scheduler
1020} // namespace android