blob: 2e8947834dc4a013f88f477385c8a6acf895669a [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 =
Ady Abraham2a215192020-02-04 02:20:50 +000077 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
78 /*currentConfigId=*/HWC_CONFIG_ID_60);
79 ASSERT_TRUE(refreshRateConfigs->refreshRateSwitchingSupported());
80}
81
82TEST_F(RefreshRateConfigsTest, oneDeviceConfig_SwitchingNotSupported) {
83 std::vector<RefreshRateConfigs::InputConfig> configs{
84 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60}}};
85 auto refreshRateConfigs =
86 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/false, configs,
87 /*currentConfigId=*/HWC_CONFIG_ID_60);
88 ASSERT_FALSE(refreshRateConfigs->refreshRateSwitchingSupported());
Alec Mouri0a1cc962019-03-14 12:33:02 -070089}
90
Ana Kruleced3a8cc2019-11-14 00:55:07 +010091TEST_F(RefreshRateConfigsTest, invalidPolicy) {
92 std::vector<RefreshRateConfigs::InputConfig> configs{
93 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60}}};
94 auto refreshRateConfigs =
Ady Abraham2a215192020-02-04 02:20:50 +000095 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
96 /*currentConfigId=*/HWC_CONFIG_ID_60);
Ana Kruleced3a8cc2019-11-14 00:55:07 +010097 ASSERT_LT(refreshRateConfigs->setPolicy(HwcConfigIndexType(10), 60, 60, nullptr), 0);
98 ASSERT_LT(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_60, 20, 40, nullptr), 0);
99}
100
Steven Thomas2bbaabe2019-08-28 16:08:35 -0700101TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_storesFullRefreshRateMap) {
Ady Abraham2139f732019-11-13 18:56:40 -0800102 std::vector<RefreshRateConfigs::InputConfig> configs{
103 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
104 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
Steven Thomas2bbaabe2019-08-28 16:08:35 -0700105 auto refreshRateConfigs =
Ady Abraham2a215192020-02-04 02:20:50 +0000106 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
107 /*currentConfigId=*/HWC_CONFIG_ID_60);
108
109 ASSERT_TRUE(refreshRateConfigs->refreshRateSwitchingSupported());
Alec Mouri0a1cc962019-03-14 12:33:02 -0700110
Ady Abraham2139f732019-11-13 18:56:40 -0800111 const auto minRate = refreshRateConfigs->getMinRefreshRate();
112 const auto performanceRate = refreshRateConfigs->getMaxRefreshRate();
Alec Mouri0a1cc962019-03-14 12:33:02 -0700113
Ady Abraham2139f732019-11-13 18:56:40 -0800114 RefreshRate expectedDefaultConfig = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
115 ASSERT_EQ(expectedDefaultConfig, minRate);
116 RefreshRate expectedPerformanceConfig = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps",
117 90};
118 ASSERT_EQ(expectedPerformanceConfig, performanceRate);
119
120 const auto minRateByPolicy = refreshRateConfigs->getMinRefreshRateByPolicy();
121 const auto performanceRateByPolicy = refreshRateConfigs->getMaxRefreshRateByPolicy();
122 ASSERT_EQ(minRateByPolicy, minRate);
123 ASSERT_EQ(performanceRateByPolicy, performanceRate);
Alec Mouri0a1cc962019-03-14 12:33:02 -0700124}
Ady Abraham2139f732019-11-13 18:56:40 -0800125
126TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_storesFullRefreshRateMap_differentGroups) {
127 std::vector<RefreshRateConfigs::InputConfig> configs{
128 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
129 {HWC_CONFIG_ID_90, HWC_GROUP_ID_1, VSYNC_90}}};
130 auto refreshRateConfigs =
Ady Abraham2a215192020-02-04 02:20:50 +0000131 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
132 /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham2139f732019-11-13 18:56:40 -0800133
Ady Abraham2a215192020-02-04 02:20:50 +0000134 ASSERT_TRUE(refreshRateConfigs->refreshRateSwitchingSupported());
Ady Abraham2139f732019-11-13 18:56:40 -0800135 const auto minRate = refreshRateConfigs->getMinRefreshRateByPolicy();
136 const auto performanceRate = refreshRateConfigs->getMaxRefreshRate();
137 const auto minRate60 = refreshRateConfigs->getMinRefreshRateByPolicy();
138 const auto performanceRate60 = refreshRateConfigs->getMaxRefreshRateByPolicy();
139
140 RefreshRate expectedDefaultConfig = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
141 ASSERT_EQ(expectedDefaultConfig, minRate);
142 ASSERT_EQ(expectedDefaultConfig, minRate60);
143 ASSERT_EQ(expectedDefaultConfig, performanceRate60);
144
Ana Kruleced3a8cc2019-11-14 00:55:07 +0100145 ASSERT_GE(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_90, 60, 90, nullptr), 0);
Ady Abraham2139f732019-11-13 18:56:40 -0800146 refreshRateConfigs->setCurrentConfigId(HWC_CONFIG_ID_90);
147
Ady Abraham2a215192020-02-04 02:20:50 +0000148 ASSERT_TRUE(refreshRateConfigs->refreshRateSwitchingSupported());
Ady Abraham2139f732019-11-13 18:56:40 -0800149 const auto minRate90 = refreshRateConfigs->getMinRefreshRateByPolicy();
150 const auto performanceRate90 = refreshRateConfigs->getMaxRefreshRateByPolicy();
151
152 RefreshRate expectedPerformanceConfig = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_1, "90fps",
153 90};
154 ASSERT_EQ(expectedPerformanceConfig, performanceRate);
155 ASSERT_EQ(expectedPerformanceConfig, minRate90);
156 ASSERT_EQ(expectedPerformanceConfig, performanceRate90);
157}
158
159TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_policyChange) {
160 std::vector<RefreshRateConfigs::InputConfig> configs{
161 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
162 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
163 auto refreshRateConfigs =
Ady Abraham2a215192020-02-04 02:20:50 +0000164 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
165 /*currentConfigId=*/HWC_CONFIG_ID_60);
166 ASSERT_TRUE(refreshRateConfigs->refreshRateSwitchingSupported());
Ady Abraham2139f732019-11-13 18:56:40 -0800167 auto minRate = refreshRateConfigs->getMinRefreshRateByPolicy();
168 auto performanceRate = refreshRateConfigs->getMaxRefreshRateByPolicy();
169
170 RefreshRate expectedDefaultConfig = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
171 ASSERT_EQ(expectedDefaultConfig, minRate);
172 RefreshRate expectedPerformanceConfig = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps",
173 90};
174 ASSERT_EQ(expectedPerformanceConfig, performanceRate);
175
Ana Kruleced3a8cc2019-11-14 00:55:07 +0100176 ASSERT_GE(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_60, 60, 60, nullptr), 0);
Ady Abraham2a215192020-02-04 02:20:50 +0000177 ASSERT_TRUE(refreshRateConfigs->refreshRateSwitchingSupported());
Ady Abraham2139f732019-11-13 18:56:40 -0800178
179 auto minRate60 = refreshRateConfigs->getMinRefreshRateByPolicy();
180 auto performanceRate60 = refreshRateConfigs->getMaxRefreshRateByPolicy();
181 ASSERT_EQ(expectedDefaultConfig, minRate60);
182 ASSERT_EQ(expectedDefaultConfig, performanceRate60);
183}
184
185TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getCurrentRefreshRate) {
186 std::vector<RefreshRateConfigs::InputConfig> configs{
187 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
188 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
189 auto refreshRateConfigs =
Ady Abraham2a215192020-02-04 02:20:50 +0000190 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
191 /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham2139f732019-11-13 18:56:40 -0800192 {
193 auto current = refreshRateConfigs->getCurrentRefreshRate();
194 EXPECT_EQ(current.configId, HWC_CONFIG_ID_60);
195 }
196
197 refreshRateConfigs->setCurrentConfigId(HWC_CONFIG_ID_90);
198 {
199 auto current = refreshRateConfigs->getCurrentRefreshRate();
200 EXPECT_EQ(current.configId, HWC_CONFIG_ID_90);
201 }
202
Ana Kruleced3a8cc2019-11-14 00:55:07 +0100203 ASSERT_GE(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_90, 90, 90, nullptr), 0);
Ady Abraham2139f732019-11-13 18:56:40 -0800204 {
205 auto current = refreshRateConfigs->getCurrentRefreshRate();
206 EXPECT_EQ(current.configId, HWC_CONFIG_ID_90);
207 }
208}
209
210TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContent) {
211 std::vector<RefreshRateConfigs::InputConfig> configs{
212 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
213 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
214 auto refreshRateConfigs =
Ady Abraham2a215192020-02-04 02:20:50 +0000215 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
216 /*currentConfigId=*/HWC_CONFIG_ID_60);
217
218 ASSERT_TRUE(refreshRateConfigs->refreshRateSwitchingSupported());
Ady Abraham2139f732019-11-13 18:56:40 -0800219
220 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
221 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
222
Ady Abraham8a82ba62020-01-17 12:43:17 -0800223 const auto makeLayerRequirements = [](float refreshRate) -> std::vector<LayerRequirement> {
224 return {{"testLayer", LayerVoteType::Heuristic, refreshRate, 1.0f}};
225 };
226
227 EXPECT_EQ(expected90Config,
228 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(90.0f)));
229 EXPECT_EQ(expected60Config,
230 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(60.0f)));
231 EXPECT_EQ(expected90Config,
232 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(45.0f)));
233 EXPECT_EQ(expected60Config,
234 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(30.0f)));
235 EXPECT_EQ(expected60Config,
236 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(24.0f)));
Ady Abraham2139f732019-11-13 18:56:40 -0800237
Ana Kruleced3a8cc2019-11-14 00:55:07 +0100238 ASSERT_GE(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_60, 60, 60, nullptr), 0);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800239 EXPECT_EQ(expected60Config,
240 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(90.0f)));
241 EXPECT_EQ(expected60Config,
242 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(60.0f)));
243 EXPECT_EQ(expected60Config,
244 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(45.0f)));
245 EXPECT_EQ(expected60Config,
246 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(30.0f)));
247 EXPECT_EQ(expected60Config,
248 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(24.0f)));
Ady Abraham2139f732019-11-13 18:56:40 -0800249
Ana Kruleced3a8cc2019-11-14 00:55:07 +0100250 ASSERT_GE(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_90, 90, 90, nullptr), 0);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800251 EXPECT_EQ(expected90Config,
252 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(90.0f)));
253 EXPECT_EQ(expected90Config,
254 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(60.0f)));
255 EXPECT_EQ(expected90Config,
256 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(45.0f)));
257 EXPECT_EQ(expected90Config,
258 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(30.0f)));
259 EXPECT_EQ(expected90Config,
260 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(24.0f)));
Ana Kruleced3a8cc2019-11-14 00:55:07 +0100261 ASSERT_GE(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_60, 0, 120, nullptr), 0);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800262 EXPECT_EQ(expected90Config,
263 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(90.0f)));
264 EXPECT_EQ(expected60Config,
265 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(60.0f)));
266 EXPECT_EQ(expected90Config,
267 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(45.0f)));
268 EXPECT_EQ(expected60Config,
269 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(30.0f)));
270 EXPECT_EQ(expected60Config,
271 refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(24.0f)));
272}
273
274TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_60_90) {
275 std::vector<RefreshRateConfigs::InputConfig> configs{
276 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
277 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
278 auto refreshRateConfigs =
Ady Abraham2a215192020-02-04 02:20:50 +0000279 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
280 /*currentConfigId=*/HWC_CONFIG_ID_60);
281
282 ASSERT_TRUE(refreshRateConfigs->refreshRateSwitchingSupported());
Ady Abraham8a82ba62020-01-17 12:43:17 -0800283
284 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
285 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
286
287 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
288 auto& lr = layers[0];
289
290 lr.vote = LayerVoteType::Min;
291 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
292
293 lr.vote = LayerVoteType::Max;
294 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
295
296 lr.desiredRefreshRate = 90.0f;
297 lr.vote = LayerVoteType::Heuristic;
298 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
299
300 lr.desiredRefreshRate = 60.0f;
301 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
302
303 lr.desiredRefreshRate = 45.0f;
304 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
305
306 lr.desiredRefreshRate = 30.0f;
307 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
308
309 lr.desiredRefreshRate = 24.0f;
310 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
311
312 ASSERT_GE(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_60, 60, 60, nullptr), 0);
313
314 lr.vote = LayerVoteType::Min;
315 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
316
317 lr.vote = LayerVoteType::Max;
318 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
319
320 lr.desiredRefreshRate = 90.0f;
321 lr.vote = LayerVoteType::Heuristic;
322 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
323
324 lr.desiredRefreshRate = 60.0f;
325 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
326
327 lr.desiredRefreshRate = 45.0f;
328 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
329
330 lr.desiredRefreshRate = 30.0f;
331 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
332
333 lr.desiredRefreshRate = 24.0f;
334 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
335
336 ASSERT_GE(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_90, 90, 90, nullptr), 0);
337
338 lr.vote = LayerVoteType::Min;
339 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
340
341 lr.vote = LayerVoteType::Max;
342 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
343
344 lr.desiredRefreshRate = 90.0f;
345 lr.vote = LayerVoteType::Heuristic;
346 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
347
348 lr.desiredRefreshRate = 60.0f;
349 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
350
351 lr.desiredRefreshRate = 45.0f;
352 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
353
354 lr.desiredRefreshRate = 30.0f;
355 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
356
357 lr.desiredRefreshRate = 24.0f;
358 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
359
360 ASSERT_GE(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_60, 0, 120, nullptr), 0);
361 lr.vote = LayerVoteType::Min;
362 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
363
364 lr.vote = LayerVoteType::Max;
365 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
366
367 lr.desiredRefreshRate = 90.0f;
368 lr.vote = LayerVoteType::Heuristic;
369 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
370
371 lr.desiredRefreshRate = 60.0f;
372 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
373
374 lr.desiredRefreshRate = 45.0f;
375 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
376
377 lr.desiredRefreshRate = 30.0f;
378 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
379
380 lr.desiredRefreshRate = 24.0f;
381 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
382}
383
384TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_60_72_90) {
385 std::vector<RefreshRateConfigs::InputConfig> configs{
386 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
387 {HWC_CONFIG_ID_72, HWC_GROUP_ID_0, VSYNC_72},
388 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
389 auto refreshRateConfigs =
Ady Abraham2a215192020-02-04 02:20:50 +0000390 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
391 /*currentConfigId=*/HWC_CONFIG_ID_60);
392
393 ASSERT_TRUE(refreshRateConfigs->refreshRateSwitchingSupported());
Ady Abraham8a82ba62020-01-17 12:43:17 -0800394
395 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
396 RefreshRate expected72Config = {HWC_CONFIG_ID_72, VSYNC_72, HWC_GROUP_ID_0, "72fps", 70};
397 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
398
399 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
400 auto& lr = layers[0];
401
402 lr.vote = LayerVoteType::Min;
403 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
404
405 lr.vote = LayerVoteType::Max;
406 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
407
408 lr.desiredRefreshRate = 90.0f;
409 lr.vote = LayerVoteType::Heuristic;
410 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
411
412 lr.desiredRefreshRate = 60.0f;
413 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
414
415 lr.desiredRefreshRate = 45.0f;
416 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
417
418 lr.desiredRefreshRate = 30.0f;
419 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
420
421 lr.desiredRefreshRate = 24.0f;
422 EXPECT_EQ(expected72Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
423}
424
425TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_30_60_72_90_120) {
426 std::vector<RefreshRateConfigs::InputConfig> configs{
427 {{HWC_CONFIG_ID_30, HWC_GROUP_ID_0, VSYNC_30},
428 {HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
429 {HWC_CONFIG_ID_72, HWC_GROUP_ID_0, VSYNC_72},
430 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90},
431 {HWC_CONFIG_ID_120, HWC_GROUP_ID_0, VSYNC_120}}};
432 auto refreshRateConfigs =
Ady Abraham2a215192020-02-04 02:20:50 +0000433 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
434 /*currentConfigId=*/HWC_CONFIG_ID_60);
435
436 ASSERT_TRUE(refreshRateConfigs->refreshRateSwitchingSupported());
Ady Abraham8a82ba62020-01-17 12:43:17 -0800437
438 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
439 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
440 RefreshRate expected72Config = {HWC_CONFIG_ID_72, VSYNC_72, HWC_GROUP_ID_0, "72fps", 70};
441 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
442 RefreshRate expected120Config = {HWC_CONFIG_ID_120, VSYNC_120, HWC_GROUP_ID_0, "120fps", 120};
443
444 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
445 LayerRequirement{.weight = 1.0f}};
446 auto& lr1 = layers[0];
447 auto& lr2 = layers[1];
448
449 lr1.desiredRefreshRate = 24.0f;
450 lr1.vote = LayerVoteType::Heuristic;
451 lr2.desiredRefreshRate = 60.0f;
452 lr2.vote = LayerVoteType::Heuristic;
453 EXPECT_EQ(expected120Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
454
455 lr1.desiredRefreshRate = 24.0f;
456 lr1.vote = LayerVoteType::Heuristic;
457 lr2.desiredRefreshRate = 48.0f;
458 lr2.vote = LayerVoteType::Heuristic;
459 EXPECT_EQ(expected72Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
460
461 lr1.desiredRefreshRate = 24.0f;
462 lr1.vote = LayerVoteType::Heuristic;
463 lr2.desiredRefreshRate = 48.0f;
464 lr2.vote = LayerVoteType::Heuristic;
465 EXPECT_EQ(expected72Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
466}
467
Ady Abraham71c437d2020-01-31 15:56:57 -0800468TEST_F(RefreshRateConfigsTest,
469 twoDeviceConfigs_getRefreshRateForContentV2_30_60_90_120_DifferentTypes) {
470 std::vector<RefreshRateConfigs::InputConfig> configs{
471 {{HWC_CONFIG_ID_30, HWC_GROUP_ID_0, VSYNC_30},
472 {HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
473 {HWC_CONFIG_ID_72, HWC_GROUP_ID_0, VSYNC_72},
474 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90},
475 {HWC_CONFIG_ID_120, HWC_GROUP_ID_0, VSYNC_120}}};
476 auto refreshRateConfigs =
477 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
478
479 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
480 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
481 RefreshRate expected72Config = {HWC_CONFIG_ID_72, VSYNC_72, HWC_GROUP_ID_0, "72fps", 72};
482 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
483 RefreshRate expected120Config = {HWC_CONFIG_ID_120, VSYNC_120, HWC_GROUP_ID_0, "120fps", 120};
484
485 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
486 LayerRequirement{.weight = 1.0f}};
487 auto& lr1 = layers[0];
488 auto& lr2 = layers[1];
489
490 lr1.desiredRefreshRate = 24.0f;
491 lr1.vote = LayerVoteType::ExplicitDefault;
492 lr2.desiredRefreshRate = 60.0f;
493 lr2.vote = LayerVoteType::Heuristic;
494 EXPECT_EQ(expected120Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
495
496 lr1.desiredRefreshRate = 24.0f;
497 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
498 lr2.desiredRefreshRate = 60.0f;
499 lr2.vote = LayerVoteType::Heuristic;
500 EXPECT_EQ(expected120Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
501
502 lr1.desiredRefreshRate = 24.0f;
503 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
504 lr2.desiredRefreshRate = 60.0f;
505 lr2.vote = LayerVoteType::ExplicitDefault;
506 EXPECT_EQ(expected120Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
507
508 lr1.desiredRefreshRate = 24.0f;
509 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
510 lr2.desiredRefreshRate = 90.0f;
511 lr2.vote = LayerVoteType::Heuristic;
512 EXPECT_EQ(expected120Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
513
514 lr1.desiredRefreshRate = 24.0f;
515 lr1.vote = LayerVoteType::ExplicitDefault;
516 lr2.desiredRefreshRate = 90.0f;
517 lr2.vote = LayerVoteType::Heuristic;
518 EXPECT_EQ(expected120Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
519
520 lr1.desiredRefreshRate = 24.0f;
521 lr1.vote = LayerVoteType::Heuristic;
522 lr2.desiredRefreshRate = 90.0f;
523 lr2.vote = LayerVoteType::ExplicitDefault;
524 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
525
526 lr1.desiredRefreshRate = 24.0f;
527 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
528 lr2.desiredRefreshRate = 90.0f;
529 lr2.vote = LayerVoteType::ExplicitDefault;
530 EXPECT_EQ(expected120Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
531
532 lr1.desiredRefreshRate = 24.0f;
533 lr1.vote = LayerVoteType::ExplicitDefault;
534 lr2.desiredRefreshRate = 90.0f;
535 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
536 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
537}
538
Ady Abraham8a82ba62020-01-17 12:43:17 -0800539TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_30_60) {
540 std::vector<RefreshRateConfigs::InputConfig> configs{
541 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
542 {HWC_CONFIG_ID_30, HWC_GROUP_ID_0, VSYNC_30}}};
543 auto refreshRateConfigs =
Ady Abraham2a215192020-02-04 02:20:50 +0000544 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
545 /*currentConfigId=*/HWC_CONFIG_ID_60);
546
547 ASSERT_TRUE(refreshRateConfigs->refreshRateSwitchingSupported());
Ady Abraham8a82ba62020-01-17 12:43:17 -0800548
549 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
550 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
551
552 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
553 auto& lr = layers[0];
554
555 lr.vote = LayerVoteType::Min;
556 EXPECT_EQ(expected30Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
557
558 lr.vote = LayerVoteType::Max;
559 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
560
561 lr.desiredRefreshRate = 90.0f;
562 lr.vote = LayerVoteType::Heuristic;
563 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
564
565 lr.desiredRefreshRate = 60.0f;
566 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
567
568 lr.desiredRefreshRate = 45.0f;
Ady Abrahamf6b77072020-01-30 14:22:54 -0800569 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800570
571 lr.desiredRefreshRate = 30.0f;
572 EXPECT_EQ(expected30Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
573
574 lr.desiredRefreshRate = 24.0f;
575 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
576}
577
578TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_30_60_72_90) {
579 std::vector<RefreshRateConfigs::InputConfig> configs{
580 {{HWC_CONFIG_ID_30, HWC_GROUP_ID_0, VSYNC_30},
581 {HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
582 {HWC_CONFIG_ID_72, HWC_GROUP_ID_0, VSYNC_72},
583 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
584 auto refreshRateConfigs =
Ady Abraham2a215192020-02-04 02:20:50 +0000585 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
586 /*currentConfigId=*/HWC_CONFIG_ID_60);
587
588 ASSERT_TRUE(refreshRateConfigs->refreshRateSwitchingSupported());
Ady Abraham8a82ba62020-01-17 12:43:17 -0800589
590 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
591 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
592 RefreshRate expected72Config = {HWC_CONFIG_ID_72, VSYNC_72, HWC_GROUP_ID_0, "72fps", 70};
593 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
594
595 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
596 auto& lr = layers[0];
597
598 lr.vote = LayerVoteType::Min;
599 EXPECT_EQ(expected30Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
600
601 lr.vote = LayerVoteType::Max;
602 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
603
604 lr.desiredRefreshRate = 90.0f;
605 lr.vote = LayerVoteType::Heuristic;
606 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
607
608 lr.desiredRefreshRate = 60.0f;
609 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
610
611 lr.desiredRefreshRate = 45.0f;
612 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
613
614 lr.desiredRefreshRate = 30.0f;
615 EXPECT_EQ(expected30Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
616
617 lr.desiredRefreshRate = 24.0f;
618 EXPECT_EQ(expected72Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
619}
620
621TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_PriorityTest) {
622 std::vector<RefreshRateConfigs::InputConfig> configs{
623 {{HWC_CONFIG_ID_30, HWC_GROUP_ID_0, VSYNC_30},
624 {HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
625 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
626 auto refreshRateConfigs =
Ady Abraham2a215192020-02-04 02:20:50 +0000627 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
628 /*currentConfigId=*/HWC_CONFIG_ID_60);
629
630 ASSERT_TRUE(refreshRateConfigs->refreshRateSwitchingSupported());
Ady Abraham8a82ba62020-01-17 12:43:17 -0800631
632 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
633 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
634 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
635
636 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
637 LayerRequirement{.weight = 1.0f}};
638 auto& lr1 = layers[0];
639 auto& lr2 = layers[1];
640
641 lr1.vote = LayerVoteType::Min;
642 lr2.vote = LayerVoteType::Max;
643 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
644
645 lr1.vote = LayerVoteType::Min;
646 lr2.vote = LayerVoteType::Heuristic;
647 lr2.desiredRefreshRate = 24.0f;
648 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
649
650 lr1.vote = LayerVoteType::Min;
Ady Abraham71c437d2020-01-31 15:56:57 -0800651 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800652 lr2.desiredRefreshRate = 24.0f;
653 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
654
655 lr1.vote = LayerVoteType::Max;
656 lr2.vote = LayerVoteType::Heuristic;
657 lr2.desiredRefreshRate = 60.0f;
658 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
659
660 lr1.vote = LayerVoteType::Max;
Ady Abraham71c437d2020-01-31 15:56:57 -0800661 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800662 lr2.desiredRefreshRate = 60.0f;
663 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
664
665 lr1.vote = LayerVoteType::Heuristic;
666 lr1.desiredRefreshRate = 15.0f;
667 lr2.vote = LayerVoteType::Heuristic;
668 lr2.desiredRefreshRate = 45.0f;
669 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
670
671 lr1.vote = LayerVoteType::Heuristic;
672 lr1.desiredRefreshRate = 30.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800673 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800674 lr2.desiredRefreshRate = 45.0f;
675 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
676}
677
678TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_24FpsVideo) {
679 std::vector<RefreshRateConfigs::InputConfig> configs{
680 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
681 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
682 auto refreshRateConfigs =
Ady Abraham2a215192020-02-04 02:20:50 +0000683 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
684 /*currentConfigId=*/HWC_CONFIG_ID_60);
685
686 ASSERT_TRUE(refreshRateConfigs->refreshRateSwitchingSupported());
Ady Abraham8a82ba62020-01-17 12:43:17 -0800687
688 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
689 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
690 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
691
692 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
693 auto& lr = layers[0];
694
Ady Abraham71c437d2020-01-31 15:56:57 -0800695 lr.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800696 for (float fps = 23.0f; fps < 25.0f; fps += 0.1f) {
697 lr.desiredRefreshRate = fps;
698 const auto& refreshRate = refreshRateConfigs->getRefreshRateForContentV2(layers);
699 printf("%.2fHz chooses %s\n", fps, refreshRate.name.c_str());
700 EXPECT_EQ(expected60Config, refreshRate);
701 }
702}
703
704TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContent_Explicit) {
705 std::vector<RefreshRateConfigs::InputConfig> configs{
706 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
707 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
708 auto refreshRateConfigs =
Ady Abraham2a215192020-02-04 02:20:50 +0000709 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
710 /*currentConfigId=*/HWC_CONFIG_ID_60);
711
712 ASSERT_TRUE(refreshRateConfigs->refreshRateSwitchingSupported());
Ady Abraham8a82ba62020-01-17 12:43:17 -0800713
714 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
715 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
716
717 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
718 LayerRequirement{.weight = 1.0f}};
719 auto& lr1 = layers[0];
720 auto& lr2 = layers[1];
721
722 lr1.vote = LayerVoteType::Heuristic;
723 lr1.desiredRefreshRate = 60.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800724 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800725 lr2.desiredRefreshRate = 90.0f;
726 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContent(layers));
727
728 lr1.vote = LayerVoteType::Heuristic;
729 lr1.desiredRefreshRate = 90.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800730 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800731 lr2.desiredRefreshRate = 60.0f;
732 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContent(layers));
733}
734
735TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_Explicit) {
736 std::vector<RefreshRateConfigs::InputConfig> configs{
737 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
738 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
739 auto refreshRateConfigs =
Ady Abraham2a215192020-02-04 02:20:50 +0000740 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
741 /*currentConfigId=*/HWC_CONFIG_ID_60);
742
743 ASSERT_TRUE(refreshRateConfigs->refreshRateSwitchingSupported());
Ady Abraham8a82ba62020-01-17 12:43:17 -0800744
745 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
746 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
747
748 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
749 LayerRequirement{.weight = 1.0f}};
750 auto& lr1 = layers[0];
751 auto& lr2 = layers[1];
752
753 lr1.vote = LayerVoteType::Heuristic;
754 lr1.desiredRefreshRate = 60.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800755 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800756 lr2.desiredRefreshRate = 90.0f;
757 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
758
759 lr1.vote = LayerVoteType::Heuristic;
760 lr1.desiredRefreshRate = 90.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800761 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800762 lr2.desiredRefreshRate = 60.0f;
763 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
Ady Abraham2139f732019-11-13 18:56:40 -0800764}
765
Ana Krulec72f0d6e2020-01-06 15:24:47 -0800766TEST_F(RefreshRateConfigsTest, testInPolicy) {
767 RefreshRate expectedDefaultConfig = {HWC_CONFIG_ID_60, VSYNC_60_POINT_4, HWC_GROUP_ID_0,
768 "60fps", 60};
Ady Abrahamb0dbdaa2020-01-06 16:19:42 -0800769 ASSERT_TRUE(expectedDefaultConfig.inPolicy(60.000004f, 60.000004f));
Ana Krulec72f0d6e2020-01-06 15:24:47 -0800770 ASSERT_TRUE(expectedDefaultConfig.inPolicy(59.0f, 60.1f));
Ady Abrahamb0dbdaa2020-01-06 16:19:42 -0800771 ASSERT_FALSE(expectedDefaultConfig.inPolicy(75.0f, 90.0f));
772 ASSERT_FALSE(expectedDefaultConfig.inPolicy(60.0011f, 90.0f));
773 ASSERT_FALSE(expectedDefaultConfig.inPolicy(50.0f, 59.998f));
Ana Krulec72f0d6e2020-01-06 15:24:47 -0800774}
775
Ady Abrahamf6b77072020-01-30 14:22:54 -0800776TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_75HzContent) {
777 std::vector<RefreshRateConfigs::InputConfig> configs{
778 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
779 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
780 auto refreshRateConfigs =
Ady Abraham2a215192020-02-04 02:20:50 +0000781 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
782 /*currentConfigId=*/HWC_CONFIG_ID_60);
783
784 ASSERT_TRUE(refreshRateConfigs->refreshRateSwitchingSupported());
Ady Abrahamf6b77072020-01-30 14:22:54 -0800785
786 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
787 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
788 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
789
790 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
791 auto& lr = layers[0];
792
Ady Abraham71c437d2020-01-31 15:56:57 -0800793 lr.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abrahamf6b77072020-01-30 14:22:54 -0800794 for (float fps = 75.0f; fps < 100.0f; fps += 0.1f) {
795 lr.desiredRefreshRate = fps;
796 const auto& refreshRate = refreshRateConfigs->getRefreshRateForContentV2(layers);
797 printf("%.2fHz chooses %s\n", fps, refreshRate.name.c_str());
798 EXPECT_EQ(expected90Config, refreshRate);
799 }
800}
801
Alec Mouri0a1cc962019-03-14 12:33:02 -0700802} // namespace
803} // namespace scheduler
804} // namespace android