blob: 7e625135ae8f5becd6d97494a387998ea994f9a2 [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
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800250TEST_F(RefreshRateConfigsTest, getRefreshRateForContentV2_60_90) {
Ady Abraham8a82ba62020-01-17 12:43:17 -0800251 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;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800264 lr.name = "Min";
265 EXPECT_EQ(expected60Config,
266 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800267
268 lr.vote = LayerVoteType::Max;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800269 lr.name = "Max";
270 EXPECT_EQ(expected90Config,
271 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800272
273 lr.desiredRefreshRate = 90.0f;
274 lr.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800275 lr.name = "90Hz Heuristic";
276 EXPECT_EQ(expected90Config,
277 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800278
279 lr.desiredRefreshRate = 60.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800280 lr.name = "60Hz Heuristic";
281 EXPECT_EQ(expected60Config,
282 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800283
284 lr.desiredRefreshRate = 45.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800285 lr.name = "45Hz Heuristic";
286 EXPECT_EQ(expected90Config,
287 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800288
289 lr.desiredRefreshRate = 30.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800290 lr.name = "30Hz Heuristic";
291 EXPECT_EQ(expected60Config,
292 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800293
294 lr.desiredRefreshRate = 24.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800295 lr.name = "24Hz Heuristic";
296 EXPECT_EQ(expected60Config,
297 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800298
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800299 lr.name = "";
Ady Abraham8a82ba62020-01-17 12:43:17 -0800300 ASSERT_GE(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_60, 60, 60, nullptr), 0);
301
302 lr.vote = LayerVoteType::Min;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800303 EXPECT_EQ(expected60Config,
304 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800305
306 lr.vote = LayerVoteType::Max;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800307 EXPECT_EQ(expected60Config,
308 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800309
310 lr.desiredRefreshRate = 90.0f;
311 lr.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800312 EXPECT_EQ(expected60Config,
313 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800314
315 lr.desiredRefreshRate = 60.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800316 EXPECT_EQ(expected60Config,
317 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800318
319 lr.desiredRefreshRate = 45.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800320 EXPECT_EQ(expected60Config,
321 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800322
323 lr.desiredRefreshRate = 30.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800324 EXPECT_EQ(expected60Config,
325 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800326
327 lr.desiredRefreshRate = 24.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800328 EXPECT_EQ(expected60Config,
329 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800330
331 ASSERT_GE(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_90, 90, 90, nullptr), 0);
332
333 lr.vote = LayerVoteType::Min;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800334 EXPECT_EQ(expected90Config,
335 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800336
337 lr.vote = LayerVoteType::Max;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800338 EXPECT_EQ(expected90Config,
339 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800340
341 lr.desiredRefreshRate = 90.0f;
342 lr.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800343 EXPECT_EQ(expected90Config,
344 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800345
346 lr.desiredRefreshRate = 60.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800347 EXPECT_EQ(expected90Config,
348 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800349
350 lr.desiredRefreshRate = 45.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800351 EXPECT_EQ(expected90Config,
352 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800353
354 lr.desiredRefreshRate = 30.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800355 EXPECT_EQ(expected90Config,
356 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800357
358 lr.desiredRefreshRate = 24.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800359 EXPECT_EQ(expected90Config,
360 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800361
362 ASSERT_GE(refreshRateConfigs->setPolicy(HWC_CONFIG_ID_60, 0, 120, nullptr), 0);
363 lr.vote = LayerVoteType::Min;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800364 EXPECT_EQ(expected60Config,
365 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800366
367 lr.vote = LayerVoteType::Max;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800368 EXPECT_EQ(expected90Config,
369 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800370
371 lr.desiredRefreshRate = 90.0f;
372 lr.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800373 EXPECT_EQ(expected90Config,
374 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800375
376 lr.desiredRefreshRate = 60.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800377 EXPECT_EQ(expected60Config,
378 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800379
380 lr.desiredRefreshRate = 45.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800381 EXPECT_EQ(expected90Config,
382 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800383
384 lr.desiredRefreshRate = 30.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800385 EXPECT_EQ(expected60Config,
386 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800387
388 lr.desiredRefreshRate = 24.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800389 EXPECT_EQ(expected60Config,
390 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800391}
392
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800393TEST_F(RefreshRateConfigsTest, getRefreshRateForContentV2_60_72_90) {
Ady Abraham8a82ba62020-01-17 12:43:17 -0800394 std::vector<RefreshRateConfigs::InputConfig> configs{
395 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
396 {HWC_CONFIG_ID_72, HWC_GROUP_ID_0, VSYNC_72},
397 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
398 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800399 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800400
401 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
402 RefreshRate expected72Config = {HWC_CONFIG_ID_72, VSYNC_72, HWC_GROUP_ID_0, "72fps", 70};
403 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
404
405 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
406 auto& lr = layers[0];
407
408 lr.vote = LayerVoteType::Min;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800409 EXPECT_EQ(expected60Config,
410 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800411
412 lr.vote = LayerVoteType::Max;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800413 EXPECT_EQ(expected90Config,
414 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800415
416 lr.desiredRefreshRate = 90.0f;
417 lr.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800418 EXPECT_EQ(expected90Config,
419 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800420
421 lr.desiredRefreshRate = 60.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800422 EXPECT_EQ(expected60Config,
423 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800424
425 lr.desiredRefreshRate = 45.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800426 EXPECT_EQ(expected90Config,
427 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800428
429 lr.desiredRefreshRate = 30.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800430 EXPECT_EQ(expected60Config,
431 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800432
433 lr.desiredRefreshRate = 24.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800434 EXPECT_EQ(expected72Config,
435 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800436}
437
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800438TEST_F(RefreshRateConfigsTest, getRefreshRateForContentV2_30_60_72_90_120) {
Ady Abraham8a82ba62020-01-17 12:43:17 -0800439 std::vector<RefreshRateConfigs::InputConfig> configs{
440 {{HWC_CONFIG_ID_30, HWC_GROUP_ID_0, VSYNC_30},
441 {HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
442 {HWC_CONFIG_ID_72, HWC_GROUP_ID_0, VSYNC_72},
443 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90},
444 {HWC_CONFIG_ID_120, HWC_GROUP_ID_0, VSYNC_120}}};
445 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800446 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800447
448 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
449 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
450 RefreshRate expected72Config = {HWC_CONFIG_ID_72, VSYNC_72, HWC_GROUP_ID_0, "72fps", 70};
451 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
452 RefreshRate expected120Config = {HWC_CONFIG_ID_120, VSYNC_120, HWC_GROUP_ID_0, "120fps", 120};
453
454 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
455 LayerRequirement{.weight = 1.0f}};
456 auto& lr1 = layers[0];
457 auto& lr2 = layers[1];
458
459 lr1.desiredRefreshRate = 24.0f;
460 lr1.vote = LayerVoteType::Heuristic;
461 lr2.desiredRefreshRate = 60.0f;
462 lr2.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800463 EXPECT_EQ(expected120Config,
464 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800465
466 lr1.desiredRefreshRate = 24.0f;
467 lr1.vote = LayerVoteType::Heuristic;
468 lr2.desiredRefreshRate = 48.0f;
469 lr2.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800470 EXPECT_EQ(expected72Config,
471 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800472
473 lr1.desiredRefreshRate = 24.0f;
474 lr1.vote = LayerVoteType::Heuristic;
475 lr2.desiredRefreshRate = 48.0f;
476 lr2.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800477 EXPECT_EQ(expected72Config,
478 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800479}
480
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800481TEST_F(RefreshRateConfigsTest, getRefreshRateForContentV2_30_60_90_120_DifferentTypes) {
Ady Abraham71c437d2020-01-31 15:56:57 -0800482 std::vector<RefreshRateConfigs::InputConfig> configs{
483 {{HWC_CONFIG_ID_30, HWC_GROUP_ID_0, VSYNC_30},
484 {HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
485 {HWC_CONFIG_ID_72, HWC_GROUP_ID_0, VSYNC_72},
486 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90},
487 {HWC_CONFIG_ID_120, HWC_GROUP_ID_0, VSYNC_120}}};
488 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800489 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham71c437d2020-01-31 15:56:57 -0800490
491 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
492 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
493 RefreshRate expected72Config = {HWC_CONFIG_ID_72, VSYNC_72, HWC_GROUP_ID_0, "72fps", 72};
494 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
495 RefreshRate expected120Config = {HWC_CONFIG_ID_120, VSYNC_120, HWC_GROUP_ID_0, "120fps", 120};
496
497 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
498 LayerRequirement{.weight = 1.0f}};
499 auto& lr1 = layers[0];
500 auto& lr2 = layers[1];
501
502 lr1.desiredRefreshRate = 24.0f;
503 lr1.vote = LayerVoteType::ExplicitDefault;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800504 lr1.name = "24Hz ExplicitDefault";
Ady Abraham71c437d2020-01-31 15:56:57 -0800505 lr2.desiredRefreshRate = 60.0f;
506 lr2.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800507 lr2.name = "60Hz Heuristic";
508 EXPECT_EQ(expected120Config,
509 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham71c437d2020-01-31 15:56:57 -0800510
511 lr1.desiredRefreshRate = 24.0f;
512 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800513 lr1.name = "24Hz ExplicitExactOrMultiple";
Ady Abraham71c437d2020-01-31 15:56:57 -0800514 lr2.desiredRefreshRate = 60.0f;
515 lr2.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800516 lr2.name = "60Hz Heuristic";
517 EXPECT_EQ(expected120Config,
518 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham71c437d2020-01-31 15:56:57 -0800519
520 lr1.desiredRefreshRate = 24.0f;
521 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800522 lr1.name = "24Hz ExplicitExactOrMultiple";
Ady Abraham71c437d2020-01-31 15:56:57 -0800523 lr2.desiredRefreshRate = 60.0f;
524 lr2.vote = LayerVoteType::ExplicitDefault;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800525 lr2.name = "60Hz ExplicitDefault";
526 EXPECT_EQ(expected120Config,
527 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham71c437d2020-01-31 15:56:57 -0800528
529 lr1.desiredRefreshRate = 24.0f;
530 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800531 lr1.name = "24Hz ExplicitExactOrMultiple";
Ady Abraham71c437d2020-01-31 15:56:57 -0800532 lr2.desiredRefreshRate = 90.0f;
533 lr2.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800534 lr2.name = "90Hz Heuristic";
535 EXPECT_EQ(expected90Config,
536 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
537
538 lr1.desiredRefreshRate = 24.0f;
539 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
540 lr1.name = "24Hz ExplicitExactOrMultiple";
541 lr2.desiredRefreshRate = 90.0f;
542 lr2.vote = LayerVoteType::ExplicitDefault;
543 lr2.name = "90Hz Heuristic";
544 EXPECT_EQ(expected72Config,
545 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham71c437d2020-01-31 15:56:57 -0800546
547 lr1.desiredRefreshRate = 24.0f;
548 lr1.vote = LayerVoteType::ExplicitDefault;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800549 lr1.name = "24Hz ExplicitDefault";
Ady Abraham71c437d2020-01-31 15:56:57 -0800550 lr2.desiredRefreshRate = 90.0f;
551 lr2.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800552 lr2.name = "90Hz Heuristic";
553 EXPECT_EQ(expected90Config,
554 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham71c437d2020-01-31 15:56:57 -0800555
556 lr1.desiredRefreshRate = 24.0f;
557 lr1.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800558 lr1.name = "24Hz Heuristic";
Ady Abraham71c437d2020-01-31 15:56:57 -0800559 lr2.desiredRefreshRate = 90.0f;
560 lr2.vote = LayerVoteType::ExplicitDefault;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800561 lr2.name = "90Hz ExplicitDefault";
562 EXPECT_EQ(expected72Config,
563 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham71c437d2020-01-31 15:56:57 -0800564
565 lr1.desiredRefreshRate = 24.0f;
566 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800567 lr1.name = "24Hz ExplicitExactOrMultiple";
Ady Abraham71c437d2020-01-31 15:56:57 -0800568 lr2.desiredRefreshRate = 90.0f;
569 lr2.vote = LayerVoteType::ExplicitDefault;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800570 lr2.name = "90Hz ExplicitDefault";
571 EXPECT_EQ(expected72Config,
572 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham71c437d2020-01-31 15:56:57 -0800573
574 lr1.desiredRefreshRate = 24.0f;
575 lr1.vote = LayerVoteType::ExplicitDefault;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800576 lr1.name = "24Hz ExplicitDefault";
Ady Abraham71c437d2020-01-31 15:56:57 -0800577 lr2.desiredRefreshRate = 90.0f;
578 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800579 lr2.name = "90Hz ExplicitExactOrMultiple";
580 EXPECT_EQ(expected90Config,
581 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham71c437d2020-01-31 15:56:57 -0800582}
583
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800584TEST_F(RefreshRateConfigsTest, getRefreshRateForContentV2_30_60) {
Ady Abraham8a82ba62020-01-17 12:43:17 -0800585 std::vector<RefreshRateConfigs::InputConfig> configs{
586 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
587 {HWC_CONFIG_ID_30, HWC_GROUP_ID_0, VSYNC_30}}};
588 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800589 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800590
591 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
592 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
593
594 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
595 auto& lr = layers[0];
596
597 lr.vote = LayerVoteType::Min;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800598 EXPECT_EQ(expected30Config,
599 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800600
601 lr.vote = LayerVoteType::Max;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800602 EXPECT_EQ(expected60Config,
603 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800604
605 lr.desiredRefreshRate = 90.0f;
606 lr.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800607 EXPECT_EQ(expected60Config,
608 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800609
610 lr.desiredRefreshRate = 60.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800611 EXPECT_EQ(expected60Config,
612 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800613
614 lr.desiredRefreshRate = 45.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800615 EXPECT_EQ(expected60Config,
616 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800617
618 lr.desiredRefreshRate = 30.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800619 EXPECT_EQ(expected30Config,
620 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800621
622 lr.desiredRefreshRate = 24.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800623 EXPECT_EQ(expected60Config,
624 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800625}
626
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800627TEST_F(RefreshRateConfigsTest, getRefreshRateForContentV2_30_60_72_90) {
Ady Abraham8a82ba62020-01-17 12:43:17 -0800628 std::vector<RefreshRateConfigs::InputConfig> configs{
629 {{HWC_CONFIG_ID_30, HWC_GROUP_ID_0, VSYNC_30},
630 {HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
631 {HWC_CONFIG_ID_72, HWC_GROUP_ID_0, VSYNC_72},
632 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
633 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800634 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800635
636 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
637 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
638 RefreshRate expected72Config = {HWC_CONFIG_ID_72, VSYNC_72, HWC_GROUP_ID_0, "72fps", 70};
639 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
640
641 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
642 auto& lr = layers[0];
643
644 lr.vote = LayerVoteType::Min;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800645 lr.name = "Min";
646 EXPECT_EQ(expected30Config,
647 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800648
649 lr.vote = LayerVoteType::Max;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800650 lr.name = "Max";
651 EXPECT_EQ(expected90Config,
652 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800653
654 lr.desiredRefreshRate = 90.0f;
655 lr.vote = LayerVoteType::Heuristic;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800656 lr.name = "90Hz Heuristic";
657 EXPECT_EQ(expected90Config,
658 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800659
660 lr.desiredRefreshRate = 60.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800661 lr.name = "60Hz Heuristic";
662 EXPECT_EQ(expected60Config,
663 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
664 EXPECT_EQ(expected90Config,
665 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ true));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800666
667 lr.desiredRefreshRate = 45.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800668 lr.name = "45Hz Heuristic";
669 EXPECT_EQ(expected90Config,
670 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
671 EXPECT_EQ(expected90Config,
672 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ true));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800673
674 lr.desiredRefreshRate = 30.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800675 lr.name = "30Hz Heuristic";
676 EXPECT_EQ(expected30Config,
677 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
678 EXPECT_EQ(expected90Config,
679 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ true));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800680
681 lr.desiredRefreshRate = 24.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800682 lr.name = "24Hz Heuristic";
683 EXPECT_EQ(expected72Config,
684 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
685 EXPECT_EQ(expected90Config,
686 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ true));
687
688 lr.desiredRefreshRate = 24.0f;
689 lr.vote = LayerVoteType::ExplicitExactOrMultiple;
690 lr.name = "24Hz ExplicitExactOrMultiple";
691 EXPECT_EQ(expected72Config,
692 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
693 EXPECT_EQ(expected90Config,
694 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ true));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800695}
696
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800697TEST_F(RefreshRateConfigsTest, getRefreshRateForContentV2_PriorityTest) {
Ady Abraham8a82ba62020-01-17 12:43:17 -0800698 std::vector<RefreshRateConfigs::InputConfig> configs{
699 {{HWC_CONFIG_ID_30, HWC_GROUP_ID_0, VSYNC_30},
700 {HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
701 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
702 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800703 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800704
705 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
706 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
707 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
708
709 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
710 LayerRequirement{.weight = 1.0f}};
711 auto& lr1 = layers[0];
712 auto& lr2 = layers[1];
713
714 lr1.vote = LayerVoteType::Min;
715 lr2.vote = LayerVoteType::Max;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800716 EXPECT_EQ(expected90Config,
717 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800718
719 lr1.vote = LayerVoteType::Min;
720 lr2.vote = LayerVoteType::Heuristic;
721 lr2.desiredRefreshRate = 24.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800722 EXPECT_EQ(expected60Config,
723 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800724
725 lr1.vote = LayerVoteType::Min;
Ady Abraham71c437d2020-01-31 15:56:57 -0800726 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800727 lr2.desiredRefreshRate = 24.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800728 EXPECT_EQ(expected60Config,
729 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800730
731 lr1.vote = LayerVoteType::Max;
732 lr2.vote = LayerVoteType::Heuristic;
733 lr2.desiredRefreshRate = 60.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800734 EXPECT_EQ(expected90Config,
735 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800736
737 lr1.vote = LayerVoteType::Max;
Ady Abraham71c437d2020-01-31 15:56:57 -0800738 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800739 lr2.desiredRefreshRate = 60.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800740 EXPECT_EQ(expected90Config,
741 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800742
743 lr1.vote = LayerVoteType::Heuristic;
744 lr1.desiredRefreshRate = 15.0f;
745 lr2.vote = LayerVoteType::Heuristic;
746 lr2.desiredRefreshRate = 45.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800747 EXPECT_EQ(expected90Config,
748 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800749
750 lr1.vote = LayerVoteType::Heuristic;
751 lr1.desiredRefreshRate = 30.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800752 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800753 lr2.desiredRefreshRate = 45.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800754 EXPECT_EQ(expected90Config,
755 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800756}
757
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800758TEST_F(RefreshRateConfigsTest, getRefreshRateForContentV2_24FpsVideo) {
Ady Abraham8a82ba62020-01-17 12:43:17 -0800759 std::vector<RefreshRateConfigs::InputConfig> configs{
760 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
761 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
762 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800763 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800764
765 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
766 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
767 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
768
769 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
770 auto& lr = layers[0];
771
Ady Abraham71c437d2020-01-31 15:56:57 -0800772 lr.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800773 for (float fps = 23.0f; fps < 25.0f; fps += 0.1f) {
774 lr.desiredRefreshRate = fps;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800775 const auto& refreshRate =
776 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800777 printf("%.2fHz chooses %s\n", fps, refreshRate.name.c_str());
778 EXPECT_EQ(expected60Config, refreshRate);
779 }
780}
781
782TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContent_Explicit) {
783 std::vector<RefreshRateConfigs::InputConfig> configs{
784 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
785 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
786 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800787 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800788
789 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
790 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
791
792 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
793 LayerRequirement{.weight = 1.0f}};
794 auto& lr1 = layers[0];
795 auto& lr2 = layers[1];
796
797 lr1.vote = LayerVoteType::Heuristic;
798 lr1.desiredRefreshRate = 60.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800799 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800800 lr2.desiredRefreshRate = 90.0f;
801 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContent(layers));
802
803 lr1.vote = LayerVoteType::Heuristic;
804 lr1.desiredRefreshRate = 90.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800805 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800806 lr2.desiredRefreshRate = 60.0f;
807 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContent(layers));
808}
809
810TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContentV2_Explicit) {
811 std::vector<RefreshRateConfigs::InputConfig> configs{
812 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
813 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
814 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800815 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abraham8a82ba62020-01-17 12:43:17 -0800816
817 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
818 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
819
820 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
821 LayerRequirement{.weight = 1.0f}};
822 auto& lr1 = layers[0];
823 auto& lr2 = layers[1];
824
825 lr1.vote = LayerVoteType::Heuristic;
826 lr1.desiredRefreshRate = 60.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800827 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800828 lr2.desiredRefreshRate = 90.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800829 EXPECT_EQ(expected90Config,
830 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
831
832 lr1.vote = LayerVoteType::ExplicitDefault;
833 lr1.desiredRefreshRate = 90.0f;
834 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
835 lr2.desiredRefreshRate = 60.0f;
836 EXPECT_EQ(expected60Config,
837 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham8a82ba62020-01-17 12:43:17 -0800838
839 lr1.vote = LayerVoteType::Heuristic;
840 lr1.desiredRefreshRate = 90.0f;
Ady Abraham71c437d2020-01-31 15:56:57 -0800841 lr2.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abraham8a82ba62020-01-17 12:43:17 -0800842 lr2.desiredRefreshRate = 60.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800843 EXPECT_EQ(expected90Config,
844 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham2139f732019-11-13 18:56:40 -0800845}
846
Ana Krulec72f0d6e2020-01-06 15:24:47 -0800847TEST_F(RefreshRateConfigsTest, testInPolicy) {
848 RefreshRate expectedDefaultConfig = {HWC_CONFIG_ID_60, VSYNC_60_POINT_4, HWC_GROUP_ID_0,
849 "60fps", 60};
Ady Abrahamb0dbdaa2020-01-06 16:19:42 -0800850 ASSERT_TRUE(expectedDefaultConfig.inPolicy(60.000004f, 60.000004f));
Ana Krulec72f0d6e2020-01-06 15:24:47 -0800851 ASSERT_TRUE(expectedDefaultConfig.inPolicy(59.0f, 60.1f));
Ady Abrahamb0dbdaa2020-01-06 16:19:42 -0800852 ASSERT_FALSE(expectedDefaultConfig.inPolicy(75.0f, 90.0f));
853 ASSERT_FALSE(expectedDefaultConfig.inPolicy(60.0011f, 90.0f));
854 ASSERT_FALSE(expectedDefaultConfig.inPolicy(50.0f, 59.998f));
Ana Krulec72f0d6e2020-01-06 15:24:47 -0800855}
856
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800857TEST_F(RefreshRateConfigsTest, getRefreshRateForContentV2_75HzContent) {
Ady Abrahamf6b77072020-01-30 14:22:54 -0800858 std::vector<RefreshRateConfigs::InputConfig> configs{
859 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
860 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
861 auto refreshRateConfigs =
Ana Krulec3f6a2062020-01-23 15:48:01 -0800862 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
Ady Abrahamf6b77072020-01-30 14:22:54 -0800863
864 RefreshRate expected30Config = {HWC_CONFIG_ID_30, VSYNC_30, HWC_GROUP_ID_0, "30fps", 30};
865 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
866 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
867
868 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
869 auto& lr = layers[0];
870
Ady Abraham71c437d2020-01-31 15:56:57 -0800871 lr.vote = LayerVoteType::ExplicitExactOrMultiple;
Ady Abrahamf6b77072020-01-30 14:22:54 -0800872 for (float fps = 75.0f; fps < 100.0f; fps += 0.1f) {
873 lr.desiredRefreshRate = fps;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800874 const auto& refreshRate =
875 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false);
Ady Abrahamf6b77072020-01-30 14:22:54 -0800876 printf("%.2fHz chooses %s\n", fps, refreshRate.name.c_str());
877 EXPECT_EQ(expected90Config, refreshRate);
878 }
879}
880
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800881TEST_F(RefreshRateConfigsTest, getRefreshRateForContentV2_Multiples) {
Ady Abraham34702102020-02-10 14:12:05 -0800882 std::vector<RefreshRateConfigs::InputConfig> configs{
883 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
884 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
885 auto refreshRateConfigs =
886 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
887
888 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
889 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
890
891 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
892 LayerRequirement{.weight = 1.0f}};
893 auto& lr1 = layers[0];
894 auto& lr2 = layers[1];
895
896 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
897 lr1.desiredRefreshRate = 60.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800898 lr1.name = "60Hz ExplicitExactOrMultiple";
Ady Abraham34702102020-02-10 14:12:05 -0800899 lr2.vote = LayerVoteType::Heuristic;
900 lr2.desiredRefreshRate = 90.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800901 lr2.name = "90Hz Heuristic";
902 EXPECT_EQ(expected90Config,
903 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham34702102020-02-10 14:12:05 -0800904
905 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
906 lr1.desiredRefreshRate = 60.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800907 lr1.name = "60Hz ExplicitExactOrMultiple";
908 lr2.vote = LayerVoteType::ExplicitDefault;
909 lr2.desiredRefreshRate = 90.0f;
910 lr2.name = "90Hz ExplicitDefault";
911 EXPECT_EQ(expected60Config,
912 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
913
914 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
915 lr1.desiredRefreshRate = 60.0f;
916 lr1.name = "60Hz ExplicitExactOrMultiple";
Ady Abraham34702102020-02-10 14:12:05 -0800917 lr2.vote = LayerVoteType::Max;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800918 lr2.name = "Max";
919 EXPECT_EQ(expected90Config,
920 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham34702102020-02-10 14:12:05 -0800921
922 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
923 lr1.desiredRefreshRate = 30.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800924 lr1.name = "30Hz ExplicitExactOrMultiple";
Ady Abraham34702102020-02-10 14:12:05 -0800925 lr2.vote = LayerVoteType::Heuristic;
926 lr2.desiredRefreshRate = 90.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800927 lr2.name = "90Hz Heuristic";
928 EXPECT_EQ(expected90Config,
929 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
Ady Abraham34702102020-02-10 14:12:05 -0800930
931 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
932 lr1.desiredRefreshRate = 30.0f;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800933 lr1.name = "30Hz ExplicitExactOrMultiple";
Ady Abraham34702102020-02-10 14:12:05 -0800934 lr2.vote = LayerVoteType::Max;
Ady Abraham4ccdcb42020-02-11 17:34:34 -0800935 lr2.name = "Max";
936 EXPECT_EQ(expected90Config,
937 refreshRateConfigs->getRefreshRateForContentV2(layers, /*touchActive*/ false));
938}
939
940TEST_F(RefreshRateConfigsTest, scrollWhileWatching60fps_60_90) {
941 std::vector<RefreshRateConfigs::InputConfig> configs{
942 {{HWC_CONFIG_ID_60, HWC_GROUP_ID_0, VSYNC_60},
943 {HWC_CONFIG_ID_90, HWC_GROUP_ID_0, VSYNC_90}}};
944 auto refreshRateConfigs =
945 std::make_unique<RefreshRateConfigs>(configs, /*currentConfigId=*/HWC_CONFIG_ID_60);
946
947 RefreshRate expected60Config = {HWC_CONFIG_ID_60, VSYNC_60, HWC_GROUP_ID_0, "60fps", 60};
948 RefreshRate expected90Config = {HWC_CONFIG_ID_90, VSYNC_90, HWC_GROUP_ID_0, "90fps", 90};
949
950 auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
951 LayerRequirement{.weight = 1.0f}};
952 auto& lr1 = layers[0];
953 auto& lr2 = layers[1];
954
955 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
956 lr1.desiredRefreshRate = 60.0f;
957 lr1.name = "60Hz ExplicitExactOrMultiple";
958 lr2.vote = LayerVoteType::NoVote;
959 lr2.name = "NoVote";
960 EXPECT_EQ(expected60Config, refreshRateConfigs->getRefreshRateForContentV2(layers, false));
961
962 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
963 lr1.desiredRefreshRate = 60.0f;
964 lr1.name = "60Hz ExplicitExactOrMultiple";
965 lr2.vote = LayerVoteType::NoVote;
966 lr2.name = "NoVote";
967 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers, true));
968
969 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
970 lr1.desiredRefreshRate = 60.0f;
971 lr1.name = "60Hz ExplicitExactOrMultiple";
972 lr2.vote = LayerVoteType::Max;
973 lr2.name = "Max";
974 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers, true));
975
976 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
977 lr1.desiredRefreshRate = 60.0f;
978 lr1.name = "60Hz ExplicitExactOrMultiple";
979 lr2.vote = LayerVoteType::Max;
980 lr2.name = "Max";
981 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers, false));
982
983 // The other layer starts to provide buffers
984 lr1.vote = LayerVoteType::ExplicitExactOrMultiple;
985 lr1.desiredRefreshRate = 60.0f;
986 lr1.name = "60Hz ExplicitExactOrMultiple";
987 lr2.vote = LayerVoteType::Heuristic;
988 lr2.desiredRefreshRate = 90.0f;
989 lr2.name = "90Hz Heuristic";
990 EXPECT_EQ(expected90Config, refreshRateConfigs->getRefreshRateForContentV2(layers, false));
Ady Abraham34702102020-02-10 14:12:05 -0800991}
992
Alec Mouri0a1cc962019-03-14 12:33:02 -0700993} // namespace
994} // namespace scheduler
995} // namespace android