blob: 7c1ecea81fe2cb1d455e38d46b04b7ad08cb5781 [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 Krulec10e02052020-02-04 17:16:10 +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 =
Ana Krulec10e02052020-02-04 17:16:10 +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 =
Ana Krulec10e02052020-02-04 17:16:10 +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 =
Ana Krulec10e02052020-02-04 17:16:10 +0000131 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
132 /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham2139f732019-11-13 18:56:40 -0800133
Ana Krulec10e02052020-02-04 17:16:10 +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
Ana Krulec10e02052020-02-04 17:16:10 +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 =
Ana Krulec10e02052020-02-04 17:16:10 +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);
Ana Krulec10e02052020-02-04 17:16:10 +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 =
Ana Krulec10e02052020-02-04 17:16:10 +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 =
Ana Krulec10e02052020-02-04 17:16:10 +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 =
Ana Krulec10e02052020-02-04 17:16:10 +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 =
Ana Krulec10e02052020-02-04 17:16:10 +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 =
Ana Krulec10e02052020-02-04 17:16:10 +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 =
Ana Krulec10e02052020-02-04 17:16:10 +0000477 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
478 /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham71c437d2020-01-31 15:56:57 -0800479
480 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
481 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
482 RefreshRate expected72Config = {HWC_CONFIG_ID_72, VSYNC_72, HWC_GROUP_ID_0, "72fps", 72};
483 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
484 RefreshRate expected120Config = {HWC_CONFIG_ID_120, VSYNC_120, HWC_GROUP_ID_0, "120fps", 120};
485
486 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
487 LayerRequirement{.weight = 1.0f}};
488 auto& lr1 = layers[0];
489 auto& lr2 = layers[1];
490
491 lr1.desiredRefreshRate = 24.0f;
492 lr1.vote = LayerVoteType::ExplicitDefault;
493 lr2.desiredRefreshRate = 60.0f;
494 lr2.vote = LayerVoteType::Heuristic;
495 EXPECT_EQ(expected120Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
496
497 lr1.desiredRefreshRate = 24.0f;
498 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
499 lr2.desiredRefreshRate = 60.0f;
500 lr2.vote = LayerVoteType::Heuristic;
501 EXPECT_EQ(expected120Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
502
503 lr1.desiredRefreshRate = 24.0f;
504 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
505 lr2.desiredRefreshRate = 60.0f;
506 lr2.vote = LayerVoteType::ExplicitDefault;
507 EXPECT_EQ(expected120Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
508
509 lr1.desiredRefreshRate = 24.0f;
510 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
511 lr2.desiredRefreshRate = 90.0f;
512 lr2.vote = LayerVoteType::Heuristic;
513 EXPECT_EQ(expected120Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
514
515 lr1.desiredRefreshRate = 24.0f;
516 lr1.vote = LayerVoteType::ExplicitDefault;
517 lr2.desiredRefreshRate = 90.0f;
518 lr2.vote = LayerVoteType::Heuristic;
519 EXPECT_EQ(expected120Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
520
521 lr1.desiredRefreshRate = 24.0f;
522 lr1.vote = LayerVoteType::Heuristic;
523 lr2.desiredRefreshRate = 90.0f;
524 lr2.vote = LayerVoteType::ExplicitDefault;
525 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
526
527 lr1.desiredRefreshRate = 24.0f;
528 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
529 lr2.desiredRefreshRate = 90.0f;
530 lr2.vote = LayerVoteType::ExplicitDefault;
531 EXPECT_EQ(expected120Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
532
533 lr1.desiredRefreshRate = 24.0f;
534 lr1.vote = LayerVoteType::ExplicitDefault;
535 lr2.desiredRefreshRate = 90.0f;
536 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
537 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
538}
539
Ady Abraham8a82ba62020-01-17 12:43:17 -0800540TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_30_60) {
541 std::vector<RefreshRateConfigs::InputConfig> configs{
542 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
543 {HWC_CONFIG_ID_30, HWC_GROUP_ID_0, VSYNC_30}}};
544 auto refreshRateConfigs =
Ana Krulec10e02052020-02-04 17:16:10 +0000545 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
546 /*currentConfigId=*/HWC_CONFIG_ID_60);
547
548 ASSERT_TRUE(refreshRateConfigs->refreshRateSwitchingSupported());
Ady Abraham8a82ba62020-01-17 12:43:17 -0800549
550 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
551 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
552
553 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
554 auto& lr = layers[0];
555
556 lr.vote = LayerVoteType::Min;
557 EXPECT_EQ(expected30Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
558
559 lr.vote = LayerVoteType::Max;
560 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
561
562 lr.desiredRefreshRate = 90.0f;
563 lr.vote = LayerVoteType::Heuristic;
564 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
565
566 lr.desiredRefreshRate = 60.0f;
567 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
568
569 lr.desiredRefreshRate = 45.0f;
Ady Abrahamf6b77072020-01-30 14:22:54 -0800570 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800571
572 lr.desiredRefreshRate = 30.0f;
573 EXPECT_EQ(expected30Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
574
575 lr.desiredRefreshRate = 24.0f;
576 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
577}
578
579TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_30_60_72_90) {
580 std::vector<RefreshRateConfigs::InputConfig> configs{
581 {{HWC_CONFIG_ID_30, HWC_GROUP_ID_0, VSYNC_30},
582 {HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
583 {HWC_CONFIG_ID_72, HWC_GROUP_ID_0, VSYNC_72},
584 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
585 auto refreshRateConfigs =
Ana Krulec10e02052020-02-04 17:16:10 +0000586 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
587 /*currentConfigId=*/HWC_CONFIG_ID_60);
588
589 ASSERT_TRUE(refreshRateConfigs->refreshRateSwitchingSupported());
Ady Abraham8a82ba62020-01-17 12:43:17 -0800590
591 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
592 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
593 RefreshRate expected72Config = {HWC_CONFIG_ID_72, VSYNC_72, HWC_GROUP_ID_0, "72fps", 70};
594 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
595
596 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
597 auto& lr = layers[0];
598
599 lr.vote = LayerVoteType::Min;
600 EXPECT_EQ(expected30Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
601
602 lr.vote = LayerVoteType::Max;
603 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
604
605 lr.desiredRefreshRate = 90.0f;
606 lr.vote = LayerVoteType::Heuristic;
607 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
608
609 lr.desiredRefreshRate = 60.0f;
610 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
611
612 lr.desiredRefreshRate = 45.0f;
613 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
614
615 lr.desiredRefreshRate = 30.0f;
616 EXPECT_EQ(expected30Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
617
618 lr.desiredRefreshRate = 24.0f;
619 EXPECT_EQ(expected72Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
620}
621
622TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_PriorityTest) {
623 std::vector<RefreshRateConfigs::InputConfig> configs{
624 {{HWC_CONFIG_ID_30, HWC_GROUP_ID_0, VSYNC_30},
625 {HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
626 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
627 auto refreshRateConfigs =
Ana Krulec10e02052020-02-04 17:16:10 +0000628 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
629 /*currentConfigId=*/HWC_CONFIG_ID_60);
630
631 ASSERT_TRUE(refreshRateConfigs->refreshRateSwitchingSupported());
Ady Abraham8a82ba62020-01-17 12:43:17 -0800632
633 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
634 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
635 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
636
637 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
638 LayerRequirement{.weight = 1.0f}};
639 auto& lr1 = layers[0];
640 auto& lr2 = layers[1];
641
642 lr1.vote = LayerVoteType::Min;
643 lr2.vote = LayerVoteType::Max;
644 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
645
646 lr1.vote = LayerVoteType::Min;
647 lr2.vote = LayerVoteType::Heuristic;
648 lr2.desiredRefreshRate = 24.0f;
649 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
650
651 lr1.vote = LayerVoteType::Min;
Ady Abraham71c437d2020-01-31 15:56:57 -0800652 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800653 lr2.desiredRefreshRate = 24.0f;
654 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
655
656 lr1.vote = LayerVoteType::Max;
657 lr2.vote = LayerVoteType::Heuristic;
658 lr2.desiredRefreshRate = 60.0f;
659 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
660
661 lr1.vote = LayerVoteType::Max;
Ady Abraham71c437d2020-01-31 15:56:57 -0800662 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800663 lr2.desiredRefreshRate = 60.0f;
664 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
665
666 lr1.vote = LayerVoteType::Heuristic;
667 lr1.desiredRefreshRate = 15.0f;
668 lr2.vote = LayerVoteType::Heuristic;
669 lr2.desiredRefreshRate = 45.0f;
670 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
671
672 lr1.vote = LayerVoteType::Heuristic;
673 lr1.desiredRefreshRate = 30.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800674 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800675 lr2.desiredRefreshRate = 45.0f;
676 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
677}
678
679TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_24FpsVideo) {
680 std::vector<RefreshRateConfigs::InputConfig> configs{
681 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
682 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
683 auto refreshRateConfigs =
Ana Krulec10e02052020-02-04 17:16:10 +0000684 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
685 /*currentConfigId=*/HWC_CONFIG_ID_60);
686
687 ASSERT_TRUE(refreshRateConfigs->refreshRateSwitchingSupported());
Ady Abraham8a82ba62020-01-17 12:43:17 -0800688
689 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
690 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
691 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
692
693 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
694 auto& lr = layers[0];
695
Ady Abraham71c437d2020-01-31 15:56:57 -0800696 lr.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800697 for (float fps = 23.0f; fps < 25.0f; fps += 0.1f) {
698 lr.desiredRefreshRate = fps;
699 const auto& refreshRate = refreshRateConfigs->getRefreshRateForContentV2(layers);
700 printf("%.2fHz chooses %s\n", fps, refreshRate.name.c_str());
701 EXPECT_EQ(expected60Config, refreshRate);
702 }
703}
704
705TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContent_Explicit) {
706 std::vector<RefreshRateConfigs::InputConfig> configs{
707 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
708 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
709 auto refreshRateConfigs =
Ana Krulec10e02052020-02-04 17:16:10 +0000710 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
711 /*currentConfigId=*/HWC_CONFIG_ID_60);
712
713 ASSERT_TRUE(refreshRateConfigs->refreshRateSwitchingSupported());
Ady Abraham8a82ba62020-01-17 12:43:17 -0800714
715 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
716 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
717
718 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
719 LayerRequirement{.weight = 1.0f}};
720 auto& lr1 = layers[0];
721 auto& lr2 = layers[1];
722
723 lr1.vote = LayerVoteType::Heuristic;
724 lr1.desiredRefreshRate = 60.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800725 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800726 lr2.desiredRefreshRate = 90.0f;
727 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContent(layers));
728
729 lr1.vote = LayerVoteType::Heuristic;
730 lr1.desiredRefreshRate = 90.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800731 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800732 lr2.desiredRefreshRate = 60.0f;
733 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContent(layers));
734}
735
736TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_Explicit) {
737 std::vector<RefreshRateConfigs::InputConfig> configs{
738 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
739 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
740 auto refreshRateConfigs =
Ana Krulec10e02052020-02-04 17:16:10 +0000741 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
742 /*currentConfigId=*/HWC_CONFIG_ID_60);
743
744 ASSERT_TRUE(refreshRateConfigs->refreshRateSwitchingSupported());
Ady Abraham8a82ba62020-01-17 12:43:17 -0800745
746 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
747 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
748
749 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
750 LayerRequirement{.weight = 1.0f}};
751 auto& lr1 = layers[0];
752 auto& lr2 = layers[1];
753
754 lr1.vote = LayerVoteType::Heuristic;
755 lr1.desiredRefreshRate = 60.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800756 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800757 lr2.desiredRefreshRate = 90.0f;
758 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
759
760 lr1.vote = LayerVoteType::Heuristic;
761 lr1.desiredRefreshRate = 90.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800762 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800763 lr2.desiredRefreshRate = 60.0f;
764 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
Ady Abraham2139f732019-11-13 18:56:40 -0800765}
766
Ana Krulec72f0d6e2020-01-06 15:24:47 -0800767TEST_F(RefreshRateConfigsTest, testInPolicy) {
768 RefreshRate expectedDefaultConfig = {HWC_CONFIG_ID_60, VSYNC_60_POINT_4, HWC_GROUP_ID_0,
769 "60fps", 60};
Ady Abrahamb0dbdaa2020-01-06 16:19:42 -0800770 ASSERT_TRUE(expectedDefaultConfig.inPolicy(60.000004f, 60.000004f));
Ana Krulec72f0d6e2020-01-06 15:24:47 -0800771 ASSERT_TRUE(expectedDefaultConfig.inPolicy(59.0f, 60.1f));
Ady Abrahamb0dbdaa2020-01-06 16:19:42 -0800772 ASSERT_FALSE(expectedDefaultConfig.inPolicy(75.0f, 90.0f));
773 ASSERT_FALSE(expectedDefaultConfig.inPolicy(60.0011f, 90.0f));
774 ASSERT_FALSE(expectedDefaultConfig.inPolicy(50.0f, 59.998f));
Ana Krulec72f0d6e2020-01-06 15:24:47 -0800775}
776
Ady Abrahamf6b77072020-01-30 14:22:54 -0800777TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_75HzContent) {
778 std::vector<RefreshRateConfigs::InputConfig> configs{
779 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
780 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
781 auto refreshRateConfigs =
Ana Krulec10e02052020-02-04 17:16:10 +0000782 std::make_unique<RefreshRateConfigs>(/*refreshRateSwitching=*/true, configs,
783 /*currentConfigId=*/HWC_CONFIG_ID_60);
784
785 ASSERT_TRUE(refreshRateConfigs->refreshRateSwitchingSupported());
Ady Abrahamf6b77072020-01-30 14:22:54 -0800786
787 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
788 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
789 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
790
791 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
792 auto& lr = layers[0];
793
Ady Abraham71c437d2020-01-31 15:56:57 -0800794 lr.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abrahamf6b77072020-01-30 14:22:54 -0800795 for (float fps = 75.0f; fps < 100.0f; fps += 0.1f) {
796 lr.desiredRefreshRate = fps;
797 const auto& refreshRate = refreshRateConfigs->getRefreshRateForContentV2(layers);
798 printf("%.2fHz chooses %s\n", fps, refreshRate.name.c_str());
799 EXPECT_EQ(expected90Config, refreshRate);
800 }
801}
802
Alec Mouri0a1cc962019-03-14 12:33:02 -0700803} // namespace
804} // namespace scheduler
805} // namespace android