blob: 841c624a3fa0fa6db8bad173275c065073edc1cb [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 Abraham2139f732019-11-13 18:56:40 -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
105 const auto minRateByPolicy = refreshRateConfigs->getMinRefreshRateByPolicy();
106 const auto performanceRateByPolicy = refreshRateConfigs->getMaxRefreshRateByPolicy();
107 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 Abraham2139f732019-11-13 18:56:40 -0800118 const auto minRate = refreshRateConfigs->getMinRefreshRateByPolicy();
119 const auto performanceRate = refreshRateConfigs->getMaxRefreshRate();
120 const auto minRate60 = refreshRateConfigs->getMinRefreshRateByPolicy();
121 const auto performanceRate60 = refreshRateConfigs->getMaxRefreshRateByPolicy();
122
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 Abraham2139f732019-11-13 18:56:40 -0800131 const auto minRate90 = refreshRateConfigs->getMinRefreshRateByPolicy();
132 const auto performanceRate90 = refreshRateConfigs->getMaxRefreshRateByPolicy();
133
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 Abraham2139f732019-11-13 18:56:40 -0800148 auto minRate = refreshRateConfigs->getMinRefreshRateByPolicy();
149 auto performanceRate = refreshRateConfigs->getMaxRefreshRateByPolicy();
150
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
159 auto minRate60 = refreshRateConfigs->getMinRefreshRateByPolicy();
160 auto performanceRate60 = refreshRateConfigs->getMaxRefreshRateByPolicy();
161 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 {
172 auto current = refreshRateConfigs->getCurrentRefreshRate();
173 EXPECT_EQ(current.configId, HWC_CONFIG_ID_60);
174 }
175
176 refreshRateConfigs->setCurrentConfigId(HWC_CONFIG_ID_90);
177 {
178 auto current = refreshRateConfigs->getCurrentRefreshRate();
179 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 {
184 auto current = refreshRateConfigs->getCurrentRefreshRate();
185 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
250TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_60_90) {
251 std::vector<RefreshRateConfigs::InputConfig> configs{
252 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
253 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
254 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800255 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800256
257 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
258 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
259
260 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
261 auto& lr = layers[0];
262
263 lr.vote = LayerVoteType::Min;
264 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
265
266 lr.vote = LayerVoteType::Max;
267 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
268
269 lr.desiredRefreshRate = 90.0f;
270 lr.vote = LayerVoteType::Heuristic;
271 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
272
273 lr.desiredRefreshRate = 60.0f;
274 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
275
276 lr.desiredRefreshRate = 45.0f;
277 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
278
279 lr.desiredRefreshRate = 30.0f;
280 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
281
282 lr.desiredRefreshRate = 24.0f;
283 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
284
285 ASSERT_GE(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_60, 60, 60, nullptr), 0);
286
287 lr.vote = LayerVoteType::Min;
288 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
289
290 lr.vote = LayerVoteType::Max;
291 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
292
293 lr.desiredRefreshRate = 90.0f;
294 lr.vote = LayerVoteType::Heuristic;
295 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
296
297 lr.desiredRefreshRate = 60.0f;
298 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
299
300 lr.desiredRefreshRate = 45.0f;
301 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
302
303 lr.desiredRefreshRate = 30.0f;
304 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
305
306 lr.desiredRefreshRate = 24.0f;
307 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
308
309 ASSERT_GE(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_90, 90, 90, nullptr), 0);
310
311 lr.vote = LayerVoteType::Min;
312 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
313
314 lr.vote = LayerVoteType::Max;
315 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
316
317 lr.desiredRefreshRate = 90.0f;
318 lr.vote = LayerVoteType::Heuristic;
319 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
320
321 lr.desiredRefreshRate = 60.0f;
322 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
323
324 lr.desiredRefreshRate = 45.0f;
325 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
326
327 lr.desiredRefreshRate = 30.0f;
328 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
329
330 lr.desiredRefreshRate = 24.0f;
331 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
332
333 ASSERT_GE(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_60, 0, 120, nullptr), 0);
334 lr.vote = LayerVoteType::Min;
335 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
336
337 lr.vote = LayerVoteType::Max;
338 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
339
340 lr.desiredRefreshRate = 90.0f;
341 lr.vote = LayerVoteType::Heuristic;
342 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
343
344 lr.desiredRefreshRate = 60.0f;
345 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
346
347 lr.desiredRefreshRate = 45.0f;
348 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
349
350 lr.desiredRefreshRate = 30.0f;
351 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
352
353 lr.desiredRefreshRate = 24.0f;
354 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
355}
356
357TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_60_72_90) {
358 std::vector<RefreshRateConfigs::InputConfig> configs{
359 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
360 {HWC_CONFIG_ID_72, HWC_GROUP_ID_0, VSYNC_72},
361 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
362 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800363 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800364
365 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
366 RefreshRate expected72Config = {HWC_CONFIG_ID_72, VSYNC_72, HWC_GROUP_ID_0, "72fps", 70};
367 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
368
369 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
370 auto& lr = layers[0];
371
372 lr.vote = LayerVoteType::Min;
373 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
374
375 lr.vote = LayerVoteType::Max;
376 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
377
378 lr.desiredRefreshRate = 90.0f;
379 lr.vote = LayerVoteType::Heuristic;
380 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
381
382 lr.desiredRefreshRate = 60.0f;
383 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
384
385 lr.desiredRefreshRate = 45.0f;
386 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
387
388 lr.desiredRefreshRate = 30.0f;
389 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
390
391 lr.desiredRefreshRate = 24.0f;
392 EXPECT_EQ(expected72Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
393}
394
395TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_30_60_72_90_120) {
396 std::vector<RefreshRateConfigs::InputConfig> configs{
397 {{HWC_CONFIG_ID_30, HWC_GROUP_ID_0, VSYNC_30},
398 {HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
399 {HWC_CONFIG_ID_72, HWC_GROUP_ID_0, VSYNC_72},
400 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90},
401 {HWC_CONFIG_ID_120, HWC_GROUP_ID_0, VSYNC_120}}};
402 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800403 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800404
405 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
406 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
407 RefreshRate expected72Config = {HWC_CONFIG_ID_72, VSYNC_72, HWC_GROUP_ID_0, "72fps", 70};
408 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
409 RefreshRate expected120Config = {HWC_CONFIG_ID_120, VSYNC_120, HWC_GROUP_ID_0, "120fps", 120};
410
411 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
412 LayerRequirement{.weight = 1.0f}};
413 auto& lr1 = layers[0];
414 auto& lr2 = layers[1];
415
416 lr1.desiredRefreshRate = 24.0f;
417 lr1.vote = LayerVoteType::Heuristic;
418 lr2.desiredRefreshRate = 60.0f;
419 lr2.vote = LayerVoteType::Heuristic;
420 EXPECT_EQ(expected120Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
421
422 lr1.desiredRefreshRate = 24.0f;
423 lr1.vote = LayerVoteType::Heuristic;
424 lr2.desiredRefreshRate = 48.0f;
425 lr2.vote = LayerVoteType::Heuristic;
426 EXPECT_EQ(expected72Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
427
428 lr1.desiredRefreshRate = 24.0f;
429 lr1.vote = LayerVoteType::Heuristic;
430 lr2.desiredRefreshRate = 48.0f;
431 lr2.vote = LayerVoteType::Heuristic;
432 EXPECT_EQ(expected72Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
433}
434
Ady Abraham71c437d2020-01-31 15:56:57 -0800435TEST_F(RefreshRateConfigsTest,
436 twoDeviceConfigs_getRefreshRateForContentV2_30_60_90_120_DifferentTypes) {
437 std::vector<RefreshRateConfigs::InputConfig> configs{
438 {{HWC_CONFIG_ID_30, HWC_GROUP_ID_0, VSYNC_30},
439 {HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
440 {HWC_CONFIG_ID_72, HWC_GROUP_ID_0, VSYNC_72},
441 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90},
442 {HWC_CONFIG_ID_120, HWC_GROUP_ID_0, VSYNC_120}}};
443 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800444 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham71c437d2020-01-31 15:56:57 -0800445
446 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
447 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
448 RefreshRate expected72Config = {HWC_CONFIG_ID_72, VSYNC_72, HWC_GROUP_ID_0, "72fps", 72};
449 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
450 RefreshRate expected120Config = {HWC_CONFIG_ID_120, VSYNC_120, HWC_GROUP_ID_0, "120fps", 120};
451
452 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
453 LayerRequirement{.weight = 1.0f}};
454 auto& lr1 = layers[0];
455 auto& lr2 = layers[1];
456
457 lr1.desiredRefreshRate = 24.0f;
458 lr1.vote = LayerVoteType::ExplicitDefault;
459 lr2.desiredRefreshRate = 60.0f;
460 lr2.vote = LayerVoteType::Heuristic;
461 EXPECT_EQ(expected120Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
462
463 lr1.desiredRefreshRate = 24.0f;
464 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
465 lr2.desiredRefreshRate = 60.0f;
466 lr2.vote = LayerVoteType::Heuristic;
467 EXPECT_EQ(expected120Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
468
469 lr1.desiredRefreshRate = 24.0f;
470 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
471 lr2.desiredRefreshRate = 60.0f;
472 lr2.vote = LayerVoteType::ExplicitDefault;
473 EXPECT_EQ(expected120Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
474
475 lr1.desiredRefreshRate = 24.0f;
476 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
477 lr2.desiredRefreshRate = 90.0f;
478 lr2.vote = LayerVoteType::Heuristic;
479 EXPECT_EQ(expected120Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
480
481 lr1.desiredRefreshRate = 24.0f;
482 lr1.vote = LayerVoteType::ExplicitDefault;
483 lr2.desiredRefreshRate = 90.0f;
484 lr2.vote = LayerVoteType::Heuristic;
485 EXPECT_EQ(expected120Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
486
487 lr1.desiredRefreshRate = 24.0f;
488 lr1.vote = LayerVoteType::Heuristic;
489 lr2.desiredRefreshRate = 90.0f;
490 lr2.vote = LayerVoteType::ExplicitDefault;
491 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
492
493 lr1.desiredRefreshRate = 24.0f;
494 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
495 lr2.desiredRefreshRate = 90.0f;
496 lr2.vote = LayerVoteType::ExplicitDefault;
497 EXPECT_EQ(expected120Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
498
499 lr1.desiredRefreshRate = 24.0f;
500 lr1.vote = LayerVoteType::ExplicitDefault;
501 lr2.desiredRefreshRate = 90.0f;
502 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
503 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
504}
505
Ady Abraham8a82ba62020-01-17 12:43:17 -0800506TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_30_60) {
507 std::vector<RefreshRateConfigs::InputConfig> configs{
508 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
509 {HWC_CONFIG_ID_30, HWC_GROUP_ID_0, VSYNC_30}}};
510 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800511 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800512
513 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
514 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
515
516 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
517 auto& lr = layers[0];
518
519 lr.vote = LayerVoteType::Min;
520 EXPECT_EQ(expected30Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
521
522 lr.vote = LayerVoteType::Max;
523 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
524
525 lr.desiredRefreshRate = 90.0f;
526 lr.vote = LayerVoteType::Heuristic;
527 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
528
529 lr.desiredRefreshRate = 60.0f;
530 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
531
532 lr.desiredRefreshRate = 45.0f;
Ady Abrahamf6b77072020-01-30 14:22:54 -0800533 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800534
535 lr.desiredRefreshRate = 30.0f;
536 EXPECT_EQ(expected30Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
537
538 lr.desiredRefreshRate = 24.0f;
539 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
540}
541
542TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_30_60_72_90) {
543 std::vector<RefreshRateConfigs::InputConfig> configs{
544 {{HWC_CONFIG_ID_30, HWC_GROUP_ID_0, VSYNC_30},
545 {HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
546 {HWC_CONFIG_ID_72, HWC_GROUP_ID_0, VSYNC_72},
547 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
548 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800549 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800550
551 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
552 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
553 RefreshRate expected72Config = {HWC_CONFIG_ID_72, VSYNC_72, HWC_GROUP_ID_0, "72fps", 70};
554 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
555
556 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
557 auto& lr = layers[0];
558
559 lr.vote = LayerVoteType::Min;
560 EXPECT_EQ(expected30Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
561
562 lr.vote = LayerVoteType::Max;
563 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
564
565 lr.desiredRefreshRate = 90.0f;
566 lr.vote = LayerVoteType::Heuristic;
567 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
568
569 lr.desiredRefreshRate = 60.0f;
570 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
571
572 lr.desiredRefreshRate = 45.0f;
573 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
574
575 lr.desiredRefreshRate = 30.0f;
576 EXPECT_EQ(expected30Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
577
578 lr.desiredRefreshRate = 24.0f;
579 EXPECT_EQ(expected72Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
580}
581
582TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_PriorityTest) {
583 std::vector<RefreshRateConfigs::InputConfig> configs{
584 {{HWC_CONFIG_ID_30, HWC_GROUP_ID_0, VSYNC_30},
585 {HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
586 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
587 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800588 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
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 expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
593
594 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
595 LayerRequirement{.weight = 1.0f}};
596 auto& lr1 = layers[0];
597 auto& lr2 = layers[1];
598
599 lr1.vote = LayerVoteType::Min;
600 lr2.vote = LayerVoteType::Max;
601 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
602
603 lr1.vote = LayerVoteType::Min;
604 lr2.vote = LayerVoteType::Heuristic;
605 lr2.desiredRefreshRate = 24.0f;
606 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
607
608 lr1.vote = LayerVoteType::Min;
Ady Abraham71c437d2020-01-31 15:56:57 -0800609 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800610 lr2.desiredRefreshRate = 24.0f;
611 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
612
613 lr1.vote = LayerVoteType::Max;
614 lr2.vote = LayerVoteType::Heuristic;
615 lr2.desiredRefreshRate = 60.0f;
616 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
617
618 lr1.vote = LayerVoteType::Max;
Ady Abraham71c437d2020-01-31 15:56:57 -0800619 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800620 lr2.desiredRefreshRate = 60.0f;
621 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
622
623 lr1.vote = LayerVoteType::Heuristic;
624 lr1.desiredRefreshRate = 15.0f;
625 lr2.vote = LayerVoteType::Heuristic;
626 lr2.desiredRefreshRate = 45.0f;
627 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
628
629 lr1.vote = LayerVoteType::Heuristic;
630 lr1.desiredRefreshRate = 30.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800631 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800632 lr2.desiredRefreshRate = 45.0f;
633 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
634}
635
636TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_24FpsVideo) {
637 std::vector<RefreshRateConfigs::InputConfig> configs{
638 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
639 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
640 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800641 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800642
643 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
644 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
645 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
646
647 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
648 auto& lr = layers[0];
649
Ady Abraham71c437d2020-01-31 15:56:57 -0800650 lr.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800651 for (float fps = 23.0f; fps < 25.0f; fps += 0.1f) {
652 lr.desiredRefreshRate = fps;
653 const auto& refreshRate = refreshRateConfigs->getRefreshRateForContentV2(layers);
654 printf("%.2fHz chooses %s\n", fps, refreshRate.name.c_str());
655 EXPECT_EQ(expected60Config, refreshRate);
656 }
657}
658
659TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContent_Explicit) {
660 std::vector<RefreshRateConfigs::InputConfig> configs{
661 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
662 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
663 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800664 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800665
666 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
667 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
668
669 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
670 LayerRequirement{.weight = 1.0f}};
671 auto& lr1 = layers[0];
672 auto& lr2 = layers[1];
673
674 lr1.vote = LayerVoteType::Heuristic;
675 lr1.desiredRefreshRate = 60.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800676 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800677 lr2.desiredRefreshRate = 90.0f;
678 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContent(layers));
679
680 lr1.vote = LayerVoteType::Heuristic;
681 lr1.desiredRefreshRate = 90.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800682 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800683 lr2.desiredRefreshRate = 60.0f;
684 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContent(layers));
685}
686
687TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_Explicit) {
688 std::vector<RefreshRateConfigs::InputConfig> configs{
689 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
690 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
691 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800692 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800693
694 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
695 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
696
697 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
698 LayerRequirement{.weight = 1.0f}};
699 auto& lr1 = layers[0];
700 auto& lr2 = layers[1];
701
702 lr1.vote = LayerVoteType::Heuristic;
703 lr1.desiredRefreshRate = 60.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800704 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800705 lr2.desiredRefreshRate = 90.0f;
706 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
707
708 lr1.vote = LayerVoteType::Heuristic;
709 lr1.desiredRefreshRate = 90.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800710 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800711 lr2.desiredRefreshRate = 60.0f;
712 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers));
Ady Abraham2139f732019-11-13 18:56:40 -0800713}
714
Ana Krulec72f0d6e2020-01-06 15:24:47 -0800715TEST_F(RefreshRateConfigsTest, testInPolicy) {
716 RefreshRate expectedDefaultConfig = {HWC_CONFIG_ID_60, VSYNC_60_POINT_4, HWC_GROUP_ID_0,
717 "60fps", 60};
Ady Abrahamb0dbdaa2020-01-06 16:19:42 -0800718 ASSERT_TRUE(expectedDefaultConfig.inPolicy(60.000004f, 60.000004f));
Ana Krulec72f0d6e2020-01-06 15:24:47 -0800719 ASSERT_TRUE(expectedDefaultConfig.inPolicy(59.0f, 60.1f));
Ady Abrahamb0dbdaa2020-01-06 16:19:42 -0800720 ASSERT_FALSE(expectedDefaultConfig.inPolicy(75.0f, 90.0f));
721 ASSERT_FALSE(expectedDefaultConfig.inPolicy(60.0011f, 90.0f));
722 ASSERT_FALSE(expectedDefaultConfig.inPolicy(50.0f, 59.998f));
Ana Krulec72f0d6e2020-01-06 15:24:47 -0800723}
724
Ady Abrahamf6b77072020-01-30 14:22:54 -0800725TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_75HzContent) {
726 std::vector<RefreshRateConfigs::InputConfig> configs{
727 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
728 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
729 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800730 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abrahamf6b77072020-01-30 14:22:54 -0800731
732 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
733 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
734 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
735
736 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
737 auto& lr = layers[0];
738
Ady Abraham71c437d2020-01-31 15:56:57 -0800739 lr.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abrahamf6b77072020-01-30 14:22:54 -0800740 for (float fps = 75.0f; fps < 100.0f; fps += 0.1f) {
741 lr.desiredRefreshRate = fps;
742 const auto& refreshRate = refreshRateConfigs->getRefreshRateForContentV2(layers);
743 printf("%.2fHz chooses %s\n", fps, refreshRate.name.c_str());
744 EXPECT_EQ(expected90Config, refreshRate);
745 }
746}
747
Alec Mouri0a1cc962019-03-14 12:33:02 -0700748} // namespace
749} // namespace scheduler
750} // namespace android