| Alec Mouri | 0a1cc96 | 2019-03-14 12:33:02 -0700 | [diff] [blame] | 1 | /* | 
 | 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 |  | 
| Ady Abraham | 6fb599b | 2020-03-05 13:48:22 -0800 | [diff] [blame] | 24 | #include "../../Scheduler/RefreshRateConfigs.h" | 
| Alec Mouri | 0a1cc96 | 2019-03-14 12:33:02 -0700 | [diff] [blame] | 25 | #include "DisplayHardware/HWC2.h" | 
 | 26 | #include "Scheduler/RefreshRateConfigs.h" | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 27 | #include "mock/DisplayHardware/MockDisplay.h" | 
| Alec Mouri | 0a1cc96 | 2019-03-14 12:33:02 -0700 | [diff] [blame] | 28 |  | 
 | 29 | using namespace std::chrono_literals; | 
 | 30 | using testing::_; | 
 | 31 |  | 
 | 32 | namespace android { | 
 | 33 | namespace scheduler { | 
 | 34 |  | 
| Peiyong Lin | e9d809e | 2020-04-14 13:10:48 -0700 | [diff] [blame] | 35 | namespace hal = android::hardware::graphics::composer::hal; | 
 | 36 |  | 
| Alec Mouri | 0a1cc96 | 2019-03-14 12:33:02 -0700 | [diff] [blame] | 37 | using RefreshRate = RefreshRateConfigs::RefreshRate; | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 38 | using LayerVoteType = RefreshRateConfigs::LayerVoteType; | 
 | 39 | using LayerRequirement = RefreshRateConfigs::LayerRequirement; | 
| Alec Mouri | 0a1cc96 | 2019-03-14 12:33:02 -0700 | [diff] [blame] | 40 |  | 
 | 41 | class RefreshRateConfigsTest : public testing::Test { | 
 | 42 | protected: | 
| Alec Mouri | 0a1cc96 | 2019-03-14 12:33:02 -0700 | [diff] [blame] | 43 |     RefreshRateConfigsTest(); | 
 | 44 |     ~RefreshRateConfigsTest(); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 45 |  | 
| Ady Abraham | b1b9d41 | 2020-06-01 19:53:52 -0700 | [diff] [blame] | 46 |     float findClosestKnownFrameRate(const RefreshRateConfigs& refreshRateConfigs, float frameRate) { | 
 | 47 |         return refreshRateConfigs.findClosestKnownFrameRate(frameRate); | 
 | 48 |     } | 
 | 49 |  | 
 | 50 |     std::vector<float> getKnownFrameRate(const RefreshRateConfigs& refreshRateConfigs) { | 
 | 51 |         return refreshRateConfigs.mKnownFrameRates; | 
 | 52 |     } | 
 | 53 |  | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 54 |     // Test config IDs | 
 | 55 |     static inline const HwcConfigIndexType HWC_CONFIG_ID_60 = HwcConfigIndexType(0); | 
 | 56 |     static inline const HwcConfigIndexType HWC_CONFIG_ID_90 = HwcConfigIndexType(1); | 
 | 57 |     static inline const HwcConfigIndexType HWC_CONFIG_ID_72 = HwcConfigIndexType(2); | 
 | 58 |     static inline const HwcConfigIndexType HWC_CONFIG_ID_120 = HwcConfigIndexType(3); | 
 | 59 |     static inline const HwcConfigIndexType HWC_CONFIG_ID_30 = HwcConfigIndexType(4); | 
 | 60 |  | 
 | 61 |     // Test configs | 
 | 62 |     std::shared_ptr<const HWC2::Display::Config> mConfig60 = | 
 | 63 |             createConfig(HWC_CONFIG_ID_60, 0, static_cast<int64_t>(1e9f / 60)); | 
 | 64 |     std::shared_ptr<const HWC2::Display::Config> mConfig90 = | 
 | 65 |             createConfig(HWC_CONFIG_ID_90, 0, static_cast<int64_t>(1e9f / 90)); | 
 | 66 |     std::shared_ptr<const HWC2::Display::Config> mConfig90DifferentGroup = | 
 | 67 |             createConfig(HWC_CONFIG_ID_90, 1, static_cast<int64_t>(1e9f / 90)); | 
 | 68 |     std::shared_ptr<const HWC2::Display::Config> mConfig90DifferentResolution = | 
 | 69 |             createConfig(HWC_CONFIG_ID_90, 0, static_cast<int64_t>(1e9f / 90), 111, 222); | 
 | 70 |     std::shared_ptr<const HWC2::Display::Config> mConfig72 = | 
 | 71 |             createConfig(HWC_CONFIG_ID_72, 0, static_cast<int64_t>(1e9f / 72)); | 
 | 72 |     std::shared_ptr<const HWC2::Display::Config> mConfig72DifferentGroup = | 
 | 73 |             createConfig(HWC_CONFIG_ID_72, 1, static_cast<int64_t>(1e9f / 72)); | 
 | 74 |     std::shared_ptr<const HWC2::Display::Config> mConfig120 = | 
 | 75 |             createConfig(HWC_CONFIG_ID_120, 0, static_cast<int64_t>(1e9f / 120)); | 
 | 76 |     std::shared_ptr<const HWC2::Display::Config> mConfig120DifferentGroup = | 
 | 77 |             createConfig(HWC_CONFIG_ID_120, 1, static_cast<int64_t>(1e9f / 120)); | 
 | 78 |     std::shared_ptr<const HWC2::Display::Config> mConfig30 = | 
 | 79 |             createConfig(HWC_CONFIG_ID_30, 0, static_cast<int64_t>(1e9f / 30)); | 
 | 80 |  | 
 | 81 |     // Test device configurations | 
 | 82 |     std::vector<std::shared_ptr<const HWC2::Display::Config>> m60OnlyConfigDevice = {mConfig60}; | 
 | 83 |     std::vector<std::shared_ptr<const HWC2::Display::Config>> m60_90Device = {mConfig60, mConfig90}; | 
 | 84 |     std::vector<std::shared_ptr<const HWC2::Display::Config>> m60_90DeviceWithDifferentGroups = | 
 | 85 |             {mConfig60, mConfig90DifferentGroup}; | 
 | 86 |     std::vector<std::shared_ptr<const HWC2::Display::Config>> m60_90DeviceWithDifferentResolutions = | 
 | 87 |             {mConfig60, mConfig90DifferentResolution}; | 
 | 88 |     std::vector<std::shared_ptr<const HWC2::Display::Config>> m60_72_90Device = {mConfig60, | 
 | 89 |                                                                                  mConfig90, | 
 | 90 |                                                                                  mConfig72}; | 
 | 91 |     std::vector<std::shared_ptr<const HWC2::Display::Config>> m60_90_72_120Device = {mConfig60, | 
 | 92 |                                                                                      mConfig90, | 
 | 93 |                                                                                      mConfig72, | 
 | 94 |                                                                                      mConfig120}; | 
 | 95 |     std::vector<std::shared_ptr<const HWC2::Display::Config>> m30_60_72_90_120Device = {mConfig60, | 
 | 96 |                                                                                         mConfig90, | 
 | 97 |                                                                                         mConfig72, | 
 | 98 |                                                                                         mConfig120, | 
 | 99 |                                                                                         mConfig30}; | 
 | 100 |     std::vector<std::shared_ptr<const HWC2::Display::Config>> m30_60Device = | 
 | 101 |             {mConfig60, mConfig90DifferentGroup, mConfig72DifferentGroup, mConfig120DifferentGroup, | 
 | 102 |              mConfig30}; | 
 | 103 |     std::vector<std::shared_ptr<const HWC2::Display::Config>> m30_60_72_90Device = | 
 | 104 |             {mConfig60, mConfig90, mConfig72, mConfig120DifferentGroup, mConfig30}; | 
 | 105 |     std::vector<std::shared_ptr<const HWC2::Display::Config>> m30_60_90Device = | 
 | 106 |             {mConfig60, mConfig90, mConfig72DifferentGroup, mConfig120DifferentGroup, mConfig30}; | 
 | 107 |  | 
 | 108 |     // Expected RefreshRate objects | 
 | 109 |     RefreshRate mExpected60Config = {HWC_CONFIG_ID_60, mConfig60, "60fps", 60, | 
 | 110 |                                      RefreshRate::ConstructorTag(0)}; | 
 | 111 |     RefreshRate mExpectedAlmost60Config = {HWC_CONFIG_ID_60, | 
 | 112 |                                            createConfig(HWC_CONFIG_ID_60, 0, 16666665), "60fps", 60, | 
 | 113 |                                            RefreshRate::ConstructorTag(0)}; | 
 | 114 |     RefreshRate mExpected90Config = {HWC_CONFIG_ID_90, mConfig90, "90fps", 90, | 
 | 115 |                                      RefreshRate::ConstructorTag(0)}; | 
 | 116 |     RefreshRate mExpected90DifferentGroupConfig = {HWC_CONFIG_ID_90, mConfig90DifferentGroup, | 
 | 117 |                                                    "90fps", 90, RefreshRate::ConstructorTag(0)}; | 
 | 118 |     RefreshRate mExpected90DifferentResolutionConfig = {HWC_CONFIG_ID_90, | 
 | 119 |                                                         mConfig90DifferentResolution, "90fps", 90, | 
 | 120 |                                                         RefreshRate::ConstructorTag(0)}; | 
 | 121 |     RefreshRate mExpected72Config = {HWC_CONFIG_ID_72, mConfig72, "72fps", 72, | 
 | 122 |                                      RefreshRate::ConstructorTag(0)}; | 
 | 123 |     RefreshRate mExpected30Config = {HWC_CONFIG_ID_30, mConfig30, "30fps", 30, | 
 | 124 |                                      RefreshRate::ConstructorTag(0)}; | 
 | 125 |     RefreshRate mExpected120Config = {HWC_CONFIG_ID_120, mConfig120, "120fps", 120, | 
 | 126 |                                       RefreshRate::ConstructorTag(0)}; | 
 | 127 |  | 
 | 128 |     Hwc2::mock::Display mDisplay; | 
 | 129 |  | 
 | 130 | private: | 
 | 131 |     std::shared_ptr<const HWC2::Display::Config> createConfig(HwcConfigIndexType configId, | 
 | 132 |                                                               int32_t configGroup, | 
 | 133 |                                                               int64_t vsyncPeriod, | 
 | 134 |                                                               int32_t hight = -1, | 
 | 135 |                                                               int32_t width = -1); | 
| Alec Mouri | 0a1cc96 | 2019-03-14 12:33:02 -0700 | [diff] [blame] | 136 | }; | 
 | 137 |  | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 138 | using Builder = HWC2::Display::Config::Builder; | 
 | 139 |  | 
| Alec Mouri | 0a1cc96 | 2019-03-14 12:33:02 -0700 | [diff] [blame] | 140 | RefreshRateConfigsTest::RefreshRateConfigsTest() { | 
 | 141 |     const ::testing::TestInfo* const test_info = | 
 | 142 |             ::testing::UnitTest::GetInstance()->current_test_info(); | 
 | 143 |     ALOGD("**** Setting up for %s.%s\n", test_info->test_case_name(), test_info->name()); | 
 | 144 | } | 
 | 145 |  | 
 | 146 | RefreshRateConfigsTest::~RefreshRateConfigsTest() { | 
 | 147 |     const ::testing::TestInfo* const test_info = | 
 | 148 |             ::testing::UnitTest::GetInstance()->current_test_info(); | 
 | 149 |     ALOGD("**** Tearing down after %s.%s\n", test_info->test_case_name(), test_info->name()); | 
 | 150 | } | 
 | 151 |  | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 152 | std::shared_ptr<const HWC2::Display::Config> RefreshRateConfigsTest::createConfig( | 
 | 153 |         HwcConfigIndexType configId, int32_t configGroup, int64_t vsyncPeriod, int32_t hight, | 
 | 154 |         int32_t width) { | 
| Peiyong Lin | e9d809e | 2020-04-14 13:10:48 -0700 | [diff] [blame] | 155 |     return HWC2::Display::Config::Builder(mDisplay, hal::HWConfigId(configId.value())) | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 156 |             .setVsyncPeriod(int32_t(vsyncPeriod)) | 
 | 157 |             .setConfigGroup(configGroup) | 
 | 158 |             .setHeight(hight) | 
 | 159 |             .setWidth(width) | 
 | 160 |             .build(); | 
 | 161 | } | 
 | 162 |  | 
| Alec Mouri | 0a1cc96 | 2019-03-14 12:33:02 -0700 | [diff] [blame] | 163 | namespace { | 
 | 164 | /* ------------------------------------------------------------------------ | 
 | 165 |  * Test cases | 
 | 166 |  */ | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 167 | TEST_F(RefreshRateConfigsTest, oneDeviceConfig_SwitchingSupported) { | 
| Steven Thomas | 2bbaabe | 2019-08-28 16:08:35 -0700 | [diff] [blame] | 168 |     auto refreshRateConfigs = | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 169 |             std::make_unique<RefreshRateConfigs>(m60OnlyConfigDevice, | 
 | 170 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
| Alec Mouri | 0a1cc96 | 2019-03-14 12:33:02 -0700 | [diff] [blame] | 171 | } | 
 | 172 |  | 
| Ana Krulec | ed3a8cc | 2019-11-14 00:55:07 +0100 | [diff] [blame] | 173 | TEST_F(RefreshRateConfigsTest, invalidPolicy) { | 
| Ana Krulec | ed3a8cc | 2019-11-14 00:55:07 +0100 | [diff] [blame] | 174 |     auto refreshRateConfigs = | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 175 |             std::make_unique<RefreshRateConfigs>(m60OnlyConfigDevice, | 
 | 176 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 177 |     ASSERT_LT(refreshRateConfigs->setDisplayManagerPolicy({HwcConfigIndexType(10), {60, 60}}), 0); | 
 | 178 |     ASSERT_LT(refreshRateConfigs->setDisplayManagerPolicy({HWC_CONFIG_ID_60, {20, 40}}), 0); | 
| Ana Krulec | ed3a8cc | 2019-11-14 00:55:07 +0100 | [diff] [blame] | 179 | } | 
 | 180 |  | 
| Steven Thomas | 2bbaabe | 2019-08-28 16:08:35 -0700 | [diff] [blame] | 181 | TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_storesFullRefreshRateMap) { | 
| Steven Thomas | 2bbaabe | 2019-08-28 16:08:35 -0700 | [diff] [blame] | 182 |     auto refreshRateConfigs = | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 183 |             std::make_unique<RefreshRateConfigs>(m60_90Device, | 
 | 184 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
| Alec Mouri | 0a1cc96 | 2019-03-14 12:33:02 -0700 | [diff] [blame] | 185 |  | 
| Ady Abraham | 2e1dd89 | 2020-03-05 13:48:36 -0800 | [diff] [blame] | 186 |     const auto& minRate = refreshRateConfigs->getMinRefreshRate(); | 
 | 187 |     const auto& performanceRate = refreshRateConfigs->getMaxRefreshRate(); | 
| Alec Mouri | 0a1cc96 | 2019-03-14 12:33:02 -0700 | [diff] [blame] | 188 |  | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 189 |     ASSERT_EQ(mExpected60Config, minRate); | 
 | 190 |     ASSERT_EQ(mExpected90Config, performanceRate); | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 191 |  | 
| Ady Abraham | 2e1dd89 | 2020-03-05 13:48:36 -0800 | [diff] [blame] | 192 |     const auto& minRateByPolicy = refreshRateConfigs->getMinRefreshRateByPolicy(); | 
 | 193 |     const auto& performanceRateByPolicy = refreshRateConfigs->getMaxRefreshRateByPolicy(); | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 194 |     ASSERT_EQ(minRateByPolicy, minRate); | 
 | 195 |     ASSERT_EQ(performanceRateByPolicy, performanceRate); | 
| Alec Mouri | 0a1cc96 | 2019-03-14 12:33:02 -0700 | [diff] [blame] | 196 | } | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 197 |  | 
 | 198 | TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_storesFullRefreshRateMap_differentGroups) { | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 199 |     auto refreshRateConfigs = | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 200 |             std::make_unique<RefreshRateConfigs>(m60_90DeviceWithDifferentGroups, | 
 | 201 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 202 |  | 
| Ady Abraham | 2e1dd89 | 2020-03-05 13:48:36 -0800 | [diff] [blame] | 203 |     const auto& minRate = refreshRateConfigs->getMinRefreshRateByPolicy(); | 
 | 204 |     const auto& performanceRate = refreshRateConfigs->getMaxRefreshRate(); | 
 | 205 |     const auto& minRate60 = refreshRateConfigs->getMinRefreshRateByPolicy(); | 
 | 206 |     const auto& performanceRate60 = refreshRateConfigs->getMaxRefreshRateByPolicy(); | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 207 |  | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 208 |     ASSERT_EQ(mExpected60Config, minRate); | 
 | 209 |     ASSERT_EQ(mExpected60Config, minRate60); | 
 | 210 |     ASSERT_EQ(mExpected60Config, performanceRate60); | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 211 |  | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 212 |     ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy({HWC_CONFIG_ID_90, {60, 90}}), 0); | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 213 |     refreshRateConfigs->setCurrentConfigId(HWC_CONFIG_ID_90); | 
 | 214 |  | 
| Ady Abraham | 2e1dd89 | 2020-03-05 13:48:36 -0800 | [diff] [blame] | 215 |     const auto& minRate90 = refreshRateConfigs->getMinRefreshRateByPolicy(); | 
 | 216 |     const auto& performanceRate90 = refreshRateConfigs->getMaxRefreshRateByPolicy(); | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 217 |  | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 218 |     ASSERT_EQ(mExpected90DifferentGroupConfig, performanceRate); | 
 | 219 |     ASSERT_EQ(mExpected90DifferentGroupConfig, minRate90); | 
 | 220 |     ASSERT_EQ(mExpected90DifferentGroupConfig, performanceRate90); | 
 | 221 | } | 
 | 222 |  | 
 | 223 | TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_storesFullRefreshRateMap_differentResolutions) { | 
 | 224 |     auto refreshRateConfigs = | 
 | 225 |             std::make_unique<RefreshRateConfigs>(m60_90DeviceWithDifferentResolutions, | 
 | 226 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
 | 227 |  | 
 | 228 |     const auto& minRate = refreshRateConfigs->getMinRefreshRateByPolicy(); | 
 | 229 |     const auto& performanceRate = refreshRateConfigs->getMaxRefreshRate(); | 
 | 230 |     const auto& minRate60 = refreshRateConfigs->getMinRefreshRateByPolicy(); | 
 | 231 |     const auto& performanceRate60 = refreshRateConfigs->getMaxRefreshRateByPolicy(); | 
 | 232 |  | 
 | 233 |     ASSERT_EQ(mExpected60Config, minRate); | 
 | 234 |     ASSERT_EQ(mExpected60Config, minRate60); | 
 | 235 |     ASSERT_EQ(mExpected60Config, performanceRate60); | 
 | 236 |  | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 237 |     ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy({HWC_CONFIG_ID_90, {60, 90}}), 0); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 238 |     refreshRateConfigs->setCurrentConfigId(HWC_CONFIG_ID_90); | 
 | 239 |  | 
 | 240 |     const auto& minRate90 = refreshRateConfigs->getMinRefreshRateByPolicy(); | 
 | 241 |     const auto& performanceRate90 = refreshRateConfigs->getMaxRefreshRateByPolicy(); | 
 | 242 |  | 
 | 243 |     ASSERT_EQ(mExpected90DifferentResolutionConfig, performanceRate); | 
 | 244 |     ASSERT_EQ(mExpected90DifferentResolutionConfig, minRate90); | 
 | 245 |     ASSERT_EQ(mExpected90DifferentResolutionConfig, performanceRate90); | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 246 | } | 
 | 247 |  | 
 | 248 | TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_policyChange) { | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 249 |     auto refreshRateConfigs = | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 250 |             std::make_unique<RefreshRateConfigs>(m60_90Device, | 
 | 251 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
| Ana Krulec | 3f6a206 | 2020-01-23 15:48:01 -0800 | [diff] [blame] | 252 |  | 
| Ady Abraham | 2e1dd89 | 2020-03-05 13:48:36 -0800 | [diff] [blame] | 253 |     auto& minRate = refreshRateConfigs->getMinRefreshRateByPolicy(); | 
 | 254 |     auto& performanceRate = refreshRateConfigs->getMaxRefreshRateByPolicy(); | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 255 |  | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 256 |     ASSERT_EQ(mExpected60Config, minRate); | 
 | 257 |     ASSERT_EQ(mExpected90Config, performanceRate); | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 258 |  | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 259 |     ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy({HWC_CONFIG_ID_60, {60, 60}}), 0); | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 260 |  | 
| Ady Abraham | 2e1dd89 | 2020-03-05 13:48:36 -0800 | [diff] [blame] | 261 |     auto& minRate60 = refreshRateConfigs->getMinRefreshRateByPolicy(); | 
 | 262 |     auto& performanceRate60 = refreshRateConfigs->getMaxRefreshRateByPolicy(); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 263 |     ASSERT_EQ(mExpected60Config, minRate60); | 
 | 264 |     ASSERT_EQ(mExpected60Config, performanceRate60); | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 265 | } | 
 | 266 |  | 
 | 267 | TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getCurrentRefreshRate) { | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 268 |     auto refreshRateConfigs = | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 269 |             std::make_unique<RefreshRateConfigs>(m60_90Device, | 
 | 270 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 271 |     { | 
| Ady Abraham | 2e1dd89 | 2020-03-05 13:48:36 -0800 | [diff] [blame] | 272 |         auto& current = refreshRateConfigs->getCurrentRefreshRate(); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 273 |         EXPECT_EQ(current.getConfigId(), HWC_CONFIG_ID_60); | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 274 |     } | 
 | 275 |  | 
 | 276 |     refreshRateConfigs->setCurrentConfigId(HWC_CONFIG_ID_90); | 
 | 277 |     { | 
| Ady Abraham | 2e1dd89 | 2020-03-05 13:48:36 -0800 | [diff] [blame] | 278 |         auto& current = refreshRateConfigs->getCurrentRefreshRate(); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 279 |         EXPECT_EQ(current.getConfigId(), HWC_CONFIG_ID_90); | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 280 |     } | 
 | 281 |  | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 282 |     ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy({HWC_CONFIG_ID_90, {90, 90}}), 0); | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 283 |     { | 
| Ady Abraham | 2e1dd89 | 2020-03-05 13:48:36 -0800 | [diff] [blame] | 284 |         auto& current = refreshRateConfigs->getCurrentRefreshRate(); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 285 |         EXPECT_EQ(current.getConfigId(), HWC_CONFIG_ID_90); | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 286 |     } | 
 | 287 | } | 
 | 288 |  | 
 | 289 | TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContent) { | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 290 |     auto refreshRateConfigs = | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 291 |             std::make_unique<RefreshRateConfigs>(m60_90Device, | 
 | 292 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 293 |  | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 294 |     const auto makeLayerRequirements = [](float refreshRate) -> std::vector<LayerRequirement> { | 
| Ady Abraham | aae5ed5 | 2020-06-26 09:32:43 -0700 | [diff] [blame] | 295 |         return {{"testLayer", LayerVoteType::Heuristic, refreshRate, /*weight*/ 1.0f, | 
 | 296 |                  /*focused*/ false}}; | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 297 |     }; | 
 | 298 |  | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 299 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 300 |               refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(90.0f))); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 301 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 302 |               refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(60.0f))); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 303 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 304 |               refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(45.0f))); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 305 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 306 |               refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(30.0f))); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 307 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 308 |               refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(24.0f))); | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 309 |  | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 310 |     ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy({HWC_CONFIG_ID_60, {60, 60}}), 0); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 311 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 312 |               refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(90.0f))); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 313 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 314 |               refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(60.0f))); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 315 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 316 |               refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(45.0f))); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 317 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 318 |               refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(30.0f))); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 319 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 320 |               refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(24.0f))); | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 321 |  | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 322 |     ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy({HWC_CONFIG_ID_90, {90, 90}}), 0); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 323 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 324 |               refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(90.0f))); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 325 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 326 |               refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(60.0f))); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 327 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 328 |               refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(45.0f))); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 329 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 330 |               refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(30.0f))); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 331 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 332 |               refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(24.0f))); | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 333 |     ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy({HWC_CONFIG_ID_60, {0, 120}}), 0); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 334 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 335 |               refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(90.0f))); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 336 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 337 |               refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(60.0f))); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 338 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 339 |               refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(45.0f))); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 340 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 341 |               refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(30.0f))); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 342 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 343 |               refreshRateConfigs->getRefreshRateForContent(makeLayerRequirements(24.0f))); | 
 | 344 | } | 
 | 345 |  | 
| Steven Thomas | bb37432 | 2020-04-28 22:47:16 -0700 | [diff] [blame] | 346 | TEST_F(RefreshRateConfigsTest, getBestRefreshRate_noLayers) { | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 347 |     auto refreshRateConfigs = | 
 | 348 |             std::make_unique<RefreshRateConfigs>(m60_72_90Device, /*currentConfigId=*/ | 
 | 349 |                                                  HWC_CONFIG_ID_72); | 
| Ana Krulec | 3d367c8 | 2020-02-25 15:02:01 -0800 | [diff] [blame] | 350 |  | 
| Steven Thomas | debafed | 2020-05-18 17:30:35 -0700 | [diff] [blame] | 351 |     // If there are no layers we select the default frame rate, which is the max of the primary | 
 | 352 |     // range. | 
| Ana Krulec | 3d367c8 | 2020-02-25 15:02:01 -0800 | [diff] [blame] | 353 |     auto layers = std::vector<LayerRequirement>{}; | 
| Steven Thomas | debafed | 2020-05-18 17:30:35 -0700 | [diff] [blame] | 354 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 355 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ana Krulec | 3d367c8 | 2020-02-25 15:02:01 -0800 | [diff] [blame] | 356 |  | 
| Steven Thomas | debafed | 2020-05-18 17:30:35 -0700 | [diff] [blame] | 357 |     ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy({HWC_CONFIG_ID_60, {60, 60}}), 0); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 358 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 359 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ana Krulec | 3d367c8 | 2020-02-25 15:02:01 -0800 | [diff] [blame] | 360 | } | 
 | 361 |  | 
| Steven Thomas | bb37432 | 2020-04-28 22:47:16 -0700 | [diff] [blame] | 362 | TEST_F(RefreshRateConfigsTest, getBestRefreshRate_60_90) { | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 363 |     auto refreshRateConfigs = | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 364 |             std::make_unique<RefreshRateConfigs>(m60_90Device, | 
 | 365 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 366 |  | 
 | 367 |     auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}}; | 
 | 368 |     auto& lr = layers[0]; | 
 | 369 |  | 
 | 370 |     lr.vote = LayerVoteType::Min; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 371 |     lr.name = "Min"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 372 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 373 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 374 |  | 
 | 375 |     lr.vote = LayerVoteType::Max; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 376 |     lr.name = "Max"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 377 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 378 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 379 |  | 
 | 380 |     lr.desiredRefreshRate = 90.0f; | 
 | 381 |     lr.vote = LayerVoteType::Heuristic; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 382 |     lr.name = "90Hz Heuristic"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 383 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 384 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 385 |  | 
 | 386 |     lr.desiredRefreshRate = 60.0f; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 387 |     lr.name = "60Hz Heuristic"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 388 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 389 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 390 |  | 
 | 391 |     lr.desiredRefreshRate = 45.0f; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 392 |     lr.name = "45Hz Heuristic"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 393 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 394 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 395 |  | 
 | 396 |     lr.desiredRefreshRate = 30.0f; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 397 |     lr.name = "30Hz Heuristic"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 398 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 399 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 400 |  | 
 | 401 |     lr.desiredRefreshRate = 24.0f; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 402 |     lr.name = "24Hz Heuristic"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 403 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 404 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 405 |  | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 406 |     lr.name = ""; | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 407 |     ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy({HWC_CONFIG_ID_60, {60, 60}}), 0); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 408 |  | 
 | 409 |     lr.vote = LayerVoteType::Min; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 410 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 411 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 412 |  | 
 | 413 |     lr.vote = LayerVoteType::Max; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 414 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 415 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 416 |  | 
 | 417 |     lr.desiredRefreshRate = 90.0f; | 
 | 418 |     lr.vote = LayerVoteType::Heuristic; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 419 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 420 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 421 |  | 
 | 422 |     lr.desiredRefreshRate = 60.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 423 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 424 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 425 |  | 
 | 426 |     lr.desiredRefreshRate = 45.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 427 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 428 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 429 |  | 
 | 430 |     lr.desiredRefreshRate = 30.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 431 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 432 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 433 |  | 
 | 434 |     lr.desiredRefreshRate = 24.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 435 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 436 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 437 |  | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 438 |     ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy({HWC_CONFIG_ID_90, {90, 90}}), 0); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 439 |  | 
 | 440 |     lr.vote = LayerVoteType::Min; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 441 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 442 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 443 |  | 
 | 444 |     lr.vote = LayerVoteType::Max; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 445 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 446 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 447 |  | 
 | 448 |     lr.desiredRefreshRate = 90.0f; | 
 | 449 |     lr.vote = LayerVoteType::Heuristic; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 450 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 451 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 452 |  | 
 | 453 |     lr.desiredRefreshRate = 60.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 454 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 455 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 456 |  | 
 | 457 |     lr.desiredRefreshRate = 45.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 458 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 459 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 460 |  | 
 | 461 |     lr.desiredRefreshRate = 30.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 462 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 463 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 464 |  | 
 | 465 |     lr.desiredRefreshRate = 24.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 466 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 467 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 468 |  | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 469 |     ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy({HWC_CONFIG_ID_60, {0, 120}}), 0); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 470 |     lr.vote = LayerVoteType::Min; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 471 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 472 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 473 |  | 
 | 474 |     lr.vote = LayerVoteType::Max; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 475 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 476 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 477 |  | 
 | 478 |     lr.desiredRefreshRate = 90.0f; | 
 | 479 |     lr.vote = LayerVoteType::Heuristic; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 480 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 481 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 482 |  | 
 | 483 |     lr.desiredRefreshRate = 60.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 484 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 485 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 486 |  | 
 | 487 |     lr.desiredRefreshRate = 45.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 488 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 489 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 490 |  | 
 | 491 |     lr.desiredRefreshRate = 30.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 492 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 493 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 494 |  | 
 | 495 |     lr.desiredRefreshRate = 24.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 496 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 497 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 498 | } | 
 | 499 |  | 
| Steven Thomas | bb37432 | 2020-04-28 22:47:16 -0700 | [diff] [blame] | 500 | TEST_F(RefreshRateConfigsTest, getBestRefreshRate_60_72_90) { | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 501 |     auto refreshRateConfigs = | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 502 |             std::make_unique<RefreshRateConfigs>(m60_72_90Device, | 
 | 503 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 504 |  | 
 | 505 |     auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}}; | 
 | 506 |     auto& lr = layers[0]; | 
 | 507 |  | 
 | 508 |     lr.vote = LayerVoteType::Min; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 509 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 510 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 511 |  | 
 | 512 |     lr.vote = LayerVoteType::Max; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 513 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 514 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 515 |  | 
 | 516 |     lr.desiredRefreshRate = 90.0f; | 
 | 517 |     lr.vote = LayerVoteType::Heuristic; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 518 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 519 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 520 |  | 
 | 521 |     lr.desiredRefreshRate = 60.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 522 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 523 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 524 |  | 
 | 525 |     lr.desiredRefreshRate = 45.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 526 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 527 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 528 |  | 
 | 529 |     lr.desiredRefreshRate = 30.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 530 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 531 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 532 |  | 
 | 533 |     lr.desiredRefreshRate = 24.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 534 |     EXPECT_EQ(mExpected72Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 535 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 536 | } | 
 | 537 |  | 
| Steven Thomas | bb37432 | 2020-04-28 22:47:16 -0700 | [diff] [blame] | 538 | TEST_F(RefreshRateConfigsTest, getBestRefreshRate_30_60_72_90_120) { | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 539 |     auto refreshRateConfigs = | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 540 |             std::make_unique<RefreshRateConfigs>(m30_60_72_90_120Device, | 
 | 541 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 542 |  | 
 | 543 |     auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}, | 
 | 544 |                                                 LayerRequirement{.weight = 1.0f}}; | 
 | 545 |     auto& lr1 = layers[0]; | 
 | 546 |     auto& lr2 = layers[1]; | 
 | 547 |  | 
 | 548 |     lr1.desiredRefreshRate = 24.0f; | 
 | 549 |     lr1.vote = LayerVoteType::Heuristic; | 
 | 550 |     lr2.desiredRefreshRate = 60.0f; | 
 | 551 |     lr2.vote = LayerVoteType::Heuristic; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 552 |     EXPECT_EQ(mExpected120Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 553 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 554 |  | 
 | 555 |     lr1.desiredRefreshRate = 24.0f; | 
 | 556 |     lr1.vote = LayerVoteType::Heuristic; | 
 | 557 |     lr2.desiredRefreshRate = 48.0f; | 
 | 558 |     lr2.vote = LayerVoteType::Heuristic; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 559 |     EXPECT_EQ(mExpected72Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 560 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 561 |  | 
 | 562 |     lr1.desiredRefreshRate = 24.0f; | 
 | 563 |     lr1.vote = LayerVoteType::Heuristic; | 
 | 564 |     lr2.desiredRefreshRate = 48.0f; | 
 | 565 |     lr2.vote = LayerVoteType::Heuristic; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 566 |     EXPECT_EQ(mExpected72Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 567 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 568 | } | 
 | 569 |  | 
| Steven Thomas | bb37432 | 2020-04-28 22:47:16 -0700 | [diff] [blame] | 570 | TEST_F(RefreshRateConfigsTest, getBestRefreshRate_30_60_90_120_DifferentTypes) { | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 571 |     auto refreshRateConfigs = | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 572 |             std::make_unique<RefreshRateConfigs>(m30_60_72_90_120Device, | 
 | 573 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 574 |  | 
 | 575 |     auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}, | 
 | 576 |                                                 LayerRequirement{.weight = 1.0f}}; | 
 | 577 |     auto& lr1 = layers[0]; | 
 | 578 |     auto& lr2 = layers[1]; | 
 | 579 |  | 
 | 580 |     lr1.desiredRefreshRate = 24.0f; | 
 | 581 |     lr1.vote = LayerVoteType::ExplicitDefault; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 582 |     lr1.name = "24Hz ExplicitDefault"; | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 583 |     lr2.desiredRefreshRate = 60.0f; | 
 | 584 |     lr2.vote = LayerVoteType::Heuristic; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 585 |     lr2.name = "60Hz Heuristic"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 586 |     EXPECT_EQ(mExpected120Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 587 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 588 |  | 
 | 589 |     lr1.desiredRefreshRate = 24.0f; | 
 | 590 |     lr1.vote = LayerVoteType::ExplicitExactOrMultiple; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 591 |     lr1.name = "24Hz ExplicitExactOrMultiple"; | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 592 |     lr2.desiredRefreshRate = 60.0f; | 
 | 593 |     lr2.vote = LayerVoteType::Heuristic; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 594 |     lr2.name = "60Hz Heuristic"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 595 |     EXPECT_EQ(mExpected120Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 596 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 597 |  | 
 | 598 |     lr1.desiredRefreshRate = 24.0f; | 
 | 599 |     lr1.vote = LayerVoteType::ExplicitExactOrMultiple; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 600 |     lr1.name = "24Hz ExplicitExactOrMultiple"; | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 601 |     lr2.desiredRefreshRate = 60.0f; | 
 | 602 |     lr2.vote = LayerVoteType::ExplicitDefault; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 603 |     lr2.name = "60Hz ExplicitDefault"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 604 |     EXPECT_EQ(mExpected120Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 605 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 606 |  | 
 | 607 |     lr1.desiredRefreshRate = 24.0f; | 
 | 608 |     lr1.vote = LayerVoteType::ExplicitExactOrMultiple; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 609 |     lr1.name = "24Hz ExplicitExactOrMultiple"; | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 610 |     lr2.desiredRefreshRate = 90.0f; | 
 | 611 |     lr2.vote = LayerVoteType::Heuristic; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 612 |     lr2.name = "90Hz Heuristic"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 613 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 614 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 615 |  | 
 | 616 |     lr1.desiredRefreshRate = 24.0f; | 
 | 617 |     lr1.vote = LayerVoteType::ExplicitExactOrMultiple; | 
 | 618 |     lr1.name = "24Hz ExplicitExactOrMultiple"; | 
 | 619 |     lr2.desiredRefreshRate = 90.0f; | 
 | 620 |     lr2.vote = LayerVoteType::ExplicitDefault; | 
 | 621 |     lr2.name = "90Hz Heuristic"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 622 |     EXPECT_EQ(mExpected72Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 623 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 624 |  | 
 | 625 |     lr1.desiredRefreshRate = 24.0f; | 
 | 626 |     lr1.vote = LayerVoteType::ExplicitDefault; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 627 |     lr1.name = "24Hz ExplicitDefault"; | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 628 |     lr2.desiredRefreshRate = 90.0f; | 
 | 629 |     lr2.vote = LayerVoteType::Heuristic; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 630 |     lr2.name = "90Hz Heuristic"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 631 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 632 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 633 |  | 
 | 634 |     lr1.desiredRefreshRate = 24.0f; | 
 | 635 |     lr1.vote = LayerVoteType::Heuristic; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 636 |     lr1.name = "24Hz Heuristic"; | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 637 |     lr2.desiredRefreshRate = 90.0f; | 
 | 638 |     lr2.vote = LayerVoteType::ExplicitDefault; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 639 |     lr2.name = "90Hz ExplicitDefault"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 640 |     EXPECT_EQ(mExpected72Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 641 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 642 |  | 
 | 643 |     lr1.desiredRefreshRate = 24.0f; | 
 | 644 |     lr1.vote = LayerVoteType::ExplicitExactOrMultiple; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 645 |     lr1.name = "24Hz ExplicitExactOrMultiple"; | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 646 |     lr2.desiredRefreshRate = 90.0f; | 
 | 647 |     lr2.vote = LayerVoteType::ExplicitDefault; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 648 |     lr2.name = "90Hz ExplicitDefault"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 649 |     EXPECT_EQ(mExpected72Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 650 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 651 |  | 
 | 652 |     lr1.desiredRefreshRate = 24.0f; | 
 | 653 |     lr1.vote = LayerVoteType::ExplicitDefault; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 654 |     lr1.name = "24Hz ExplicitDefault"; | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 655 |     lr2.desiredRefreshRate = 90.0f; | 
 | 656 |     lr2.vote = LayerVoteType::ExplicitExactOrMultiple; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 657 |     lr2.name = "90Hz ExplicitExactOrMultiple"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 658 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 659 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 660 | } | 
 | 661 |  | 
| Steven Thomas | bb37432 | 2020-04-28 22:47:16 -0700 | [diff] [blame] | 662 | TEST_F(RefreshRateConfigsTest, getBestRefreshRate_30_60) { | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 663 |     auto refreshRateConfigs = | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 664 |             std::make_unique<RefreshRateConfigs>(m30_60Device, | 
 | 665 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 666 |  | 
 | 667 |     auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}}; | 
 | 668 |     auto& lr = layers[0]; | 
 | 669 |  | 
 | 670 |     lr.vote = LayerVoteType::Min; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 671 |     EXPECT_EQ(mExpected30Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 672 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 673 |  | 
 | 674 |     lr.vote = LayerVoteType::Max; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 675 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 676 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 677 |  | 
 | 678 |     lr.desiredRefreshRate = 90.0f; | 
 | 679 |     lr.vote = LayerVoteType::Heuristic; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 680 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 681 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 682 |  | 
 | 683 |     lr.desiredRefreshRate = 60.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 684 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 685 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 686 |  | 
 | 687 |     lr.desiredRefreshRate = 45.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 688 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 689 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 690 |  | 
 | 691 |     lr.desiredRefreshRate = 30.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 692 |     EXPECT_EQ(mExpected30Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 693 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 694 |  | 
 | 695 |     lr.desiredRefreshRate = 24.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 696 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 697 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 698 | } | 
 | 699 |  | 
| Steven Thomas | bb37432 | 2020-04-28 22:47:16 -0700 | [diff] [blame] | 700 | TEST_F(RefreshRateConfigsTest, getBestRefreshRate_30_60_72_90) { | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 701 |     auto refreshRateConfigs = | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 702 |             std::make_unique<RefreshRateConfigs>(m30_60_72_90Device, | 
 | 703 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 704 |  | 
 | 705 |     auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}}; | 
 | 706 |     auto& lr = layers[0]; | 
 | 707 |  | 
 | 708 |     lr.vote = LayerVoteType::Min; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 709 |     lr.name = "Min"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 710 |     EXPECT_EQ(mExpected30Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 711 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 712 |  | 
 | 713 |     lr.vote = LayerVoteType::Max; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 714 |     lr.name = "Max"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 715 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 716 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 717 |  | 
 | 718 |     lr.desiredRefreshRate = 90.0f; | 
 | 719 |     lr.vote = LayerVoteType::Heuristic; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 720 |     lr.name = "90Hz Heuristic"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 721 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 722 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 723 |  | 
 | 724 |     lr.desiredRefreshRate = 60.0f; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 725 |     lr.name = "60Hz Heuristic"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 726 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 727 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 728 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 729 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = true, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 730 |  | 
 | 731 |     lr.desiredRefreshRate = 45.0f; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 732 |     lr.name = "45Hz Heuristic"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 733 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 734 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 735 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 736 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = true, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 737 |  | 
 | 738 |     lr.desiredRefreshRate = 30.0f; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 739 |     lr.name = "30Hz Heuristic"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 740 |     EXPECT_EQ(mExpected30Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 741 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 742 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 743 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = true, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 744 |  | 
 | 745 |     lr.desiredRefreshRate = 24.0f; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 746 |     lr.name = "24Hz Heuristic"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 747 |     EXPECT_EQ(mExpected72Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 748 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 749 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 750 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = true, .idle = false})); | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 751 |  | 
 | 752 |     lr.desiredRefreshRate = 24.0f; | 
 | 753 |     lr.vote = LayerVoteType::ExplicitExactOrMultiple; | 
 | 754 |     lr.name = "24Hz ExplicitExactOrMultiple"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 755 |     EXPECT_EQ(mExpected72Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 756 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 757 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 758 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = true, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 759 | } | 
 | 760 |  | 
| Steven Thomas | bb37432 | 2020-04-28 22:47:16 -0700 | [diff] [blame] | 761 | TEST_F(RefreshRateConfigsTest, getBestRefreshRate_PriorityTest) { | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 762 |     auto refreshRateConfigs = | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 763 |             std::make_unique<RefreshRateConfigs>(m30_60_90Device, | 
 | 764 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 765 |  | 
 | 766 |     auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}, | 
 | 767 |                                                 LayerRequirement{.weight = 1.0f}}; | 
 | 768 |     auto& lr1 = layers[0]; | 
 | 769 |     auto& lr2 = layers[1]; | 
 | 770 |  | 
 | 771 |     lr1.vote = LayerVoteType::Min; | 
 | 772 |     lr2.vote = LayerVoteType::Max; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 773 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 774 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 775 |  | 
 | 776 |     lr1.vote = LayerVoteType::Min; | 
 | 777 |     lr2.vote = LayerVoteType::Heuristic; | 
 | 778 |     lr2.desiredRefreshRate = 24.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 779 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 780 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 781 |  | 
 | 782 |     lr1.vote = LayerVoteType::Min; | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 783 |     lr2.vote = LayerVoteType::ExplicitExactOrMultiple; | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 784 |     lr2.desiredRefreshRate = 24.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 785 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 786 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 787 |  | 
 | 788 |     lr1.vote = LayerVoteType::Max; | 
 | 789 |     lr2.vote = LayerVoteType::Heuristic; | 
 | 790 |     lr2.desiredRefreshRate = 60.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 791 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 792 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 793 |  | 
 | 794 |     lr1.vote = LayerVoteType::Max; | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 795 |     lr2.vote = LayerVoteType::ExplicitExactOrMultiple; | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 796 |     lr2.desiredRefreshRate = 60.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 797 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 798 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 799 |  | 
 | 800 |     lr1.vote = LayerVoteType::Heuristic; | 
 | 801 |     lr1.desiredRefreshRate = 15.0f; | 
 | 802 |     lr2.vote = LayerVoteType::Heuristic; | 
 | 803 |     lr2.desiredRefreshRate = 45.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 804 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 805 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 806 |  | 
 | 807 |     lr1.vote = LayerVoteType::Heuristic; | 
 | 808 |     lr1.desiredRefreshRate = 30.0f; | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 809 |     lr2.vote = LayerVoteType::ExplicitExactOrMultiple; | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 810 |     lr2.desiredRefreshRate = 45.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 811 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 812 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 813 | } | 
 | 814 |  | 
| Steven Thomas | bb37432 | 2020-04-28 22:47:16 -0700 | [diff] [blame] | 815 | TEST_F(RefreshRateConfigsTest, getBestRefreshRate_24FpsVideo) { | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 816 |     auto refreshRateConfigs = | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 817 |             std::make_unique<RefreshRateConfigs>(m60_90Device, | 
 | 818 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 819 |  | 
 | 820 |     auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}}; | 
 | 821 |     auto& lr = layers[0]; | 
 | 822 |  | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 823 |     lr.vote = LayerVoteType::ExplicitExactOrMultiple; | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 824 |     for (float fps = 23.0f; fps < 25.0f; fps += 0.1f) { | 
 | 825 |         lr.desiredRefreshRate = fps; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 826 |         const auto& refreshRate = | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 827 |                 refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false}); | 
| Ady Abraham | b1b9d41 | 2020-06-01 19:53:52 -0700 | [diff] [blame] | 828 |         EXPECT_EQ(mExpected60Config, refreshRate) << fps << "Hz chooses " << refreshRate.getName(); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 829 |     } | 
 | 830 | } | 
 | 831 |  | 
 | 832 | TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getRefreshRateForContent_Explicit) { | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 833 |     auto refreshRateConfigs = | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 834 |             std::make_unique<RefreshRateConfigs>(m60_90Device, | 
 | 835 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 836 |  | 
 | 837 |     auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}, | 
 | 838 |                                                 LayerRequirement{.weight = 1.0f}}; | 
 | 839 |     auto& lr1 = layers[0]; | 
 | 840 |     auto& lr2 = layers[1]; | 
 | 841 |  | 
 | 842 |     lr1.vote = LayerVoteType::Heuristic; | 
 | 843 |     lr1.desiredRefreshRate = 60.0f; | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 844 |     lr2.vote = LayerVoteType::ExplicitExactOrMultiple; | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 845 |     lr2.desiredRefreshRate = 90.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 846 |     EXPECT_EQ(mExpected90Config, refreshRateConfigs->getRefreshRateForContent(layers)); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 847 |  | 
 | 848 |     lr1.vote = LayerVoteType::Heuristic; | 
 | 849 |     lr1.desiredRefreshRate = 90.0f; | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 850 |     lr2.vote = LayerVoteType::ExplicitExactOrMultiple; | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 851 |     lr2.desiredRefreshRate = 60.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 852 |     EXPECT_EQ(mExpected60Config, refreshRateConfigs->getRefreshRateForContent(layers)); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 853 | } | 
 | 854 |  | 
| Steven Thomas | bb37432 | 2020-04-28 22:47:16 -0700 | [diff] [blame] | 855 | TEST_F(RefreshRateConfigsTest, twoDeviceConfigs_getBestRefreshRate_Explicit) { | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 856 |     auto refreshRateConfigs = | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 857 |             std::make_unique<RefreshRateConfigs>(m60_90Device, | 
 | 858 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 859 |  | 
 | 860 |     auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}, | 
 | 861 |                                                 LayerRequirement{.weight = 1.0f}}; | 
 | 862 |     auto& lr1 = layers[0]; | 
 | 863 |     auto& lr2 = layers[1]; | 
 | 864 |  | 
 | 865 |     lr1.vote = LayerVoteType::Heuristic; | 
 | 866 |     lr1.desiredRefreshRate = 60.0f; | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 867 |     lr2.vote = LayerVoteType::ExplicitExactOrMultiple; | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 868 |     lr2.desiredRefreshRate = 90.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 869 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 870 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 871 |  | 
 | 872 |     lr1.vote = LayerVoteType::ExplicitDefault; | 
 | 873 |     lr1.desiredRefreshRate = 90.0f; | 
 | 874 |     lr2.vote = LayerVoteType::ExplicitExactOrMultiple; | 
 | 875 |     lr2.desiredRefreshRate = 60.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 876 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 877 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 878 |  | 
 | 879 |     lr1.vote = LayerVoteType::Heuristic; | 
 | 880 |     lr1.desiredRefreshRate = 90.0f; | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 881 |     lr2.vote = LayerVoteType::ExplicitExactOrMultiple; | 
| Ady Abraham | 8a82ba6 | 2020-01-17 12:43:17 -0800 | [diff] [blame] | 882 |     lr2.desiredRefreshRate = 60.0f; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 883 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 884 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 2139f73 | 2019-11-13 18:56:40 -0800 | [diff] [blame] | 885 | } | 
 | 886 |  | 
| Ana Krulec | 72f0d6e | 2020-01-06 15:24:47 -0800 | [diff] [blame] | 887 | TEST_F(RefreshRateConfigsTest, testInPolicy) { | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 888 |     ASSERT_TRUE(mExpectedAlmost60Config.inPolicy(60.000004f, 60.000004f)); | 
 | 889 |     ASSERT_TRUE(mExpectedAlmost60Config.inPolicy(59.0f, 60.1f)); | 
 | 890 |     ASSERT_FALSE(mExpectedAlmost60Config.inPolicy(75.0f, 90.0f)); | 
 | 891 |     ASSERT_FALSE(mExpectedAlmost60Config.inPolicy(60.0011f, 90.0f)); | 
 | 892 |     ASSERT_FALSE(mExpectedAlmost60Config.inPolicy(50.0f, 59.998f)); | 
| Ana Krulec | 72f0d6e | 2020-01-06 15:24:47 -0800 | [diff] [blame] | 893 | } | 
 | 894 |  | 
| Steven Thomas | bb37432 | 2020-04-28 22:47:16 -0700 | [diff] [blame] | 895 | TEST_F(RefreshRateConfigsTest, getBestRefreshRate_75HzContent) { | 
| Ady Abraham | f6b7707 | 2020-01-30 14:22:54 -0800 | [diff] [blame] | 896 |     auto refreshRateConfigs = | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 897 |             std::make_unique<RefreshRateConfigs>(m60_90Device, | 
 | 898 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
| Ady Abraham | f6b7707 | 2020-01-30 14:22:54 -0800 | [diff] [blame] | 899 |  | 
 | 900 |     auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}}; | 
 | 901 |     auto& lr = layers[0]; | 
 | 902 |  | 
| Ady Abraham | 71c437d | 2020-01-31 15:56:57 -0800 | [diff] [blame] | 903 |     lr.vote = LayerVoteType::ExplicitExactOrMultiple; | 
| Ady Abraham | f6b7707 | 2020-01-30 14:22:54 -0800 | [diff] [blame] | 904 |     for (float fps = 75.0f; fps < 100.0f; fps += 0.1f) { | 
 | 905 |         lr.desiredRefreshRate = fps; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 906 |         const auto& refreshRate = | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 907 |                 refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false}); | 
| Ady Abraham | b1b9d41 | 2020-06-01 19:53:52 -0700 | [diff] [blame] | 908 |         EXPECT_EQ(mExpected90Config, refreshRate) << fps << "Hz chooses " << refreshRate.getName(); | 
| Ady Abraham | f6b7707 | 2020-01-30 14:22:54 -0800 | [diff] [blame] | 909 |     } | 
 | 910 | } | 
 | 911 |  | 
| Steven Thomas | bb37432 | 2020-04-28 22:47:16 -0700 | [diff] [blame] | 912 | TEST_F(RefreshRateConfigsTest, getBestRefreshRate_Multiples) { | 
| Ady Abraham | 3470210 | 2020-02-10 14:12:05 -0800 | [diff] [blame] | 913 |     auto refreshRateConfigs = | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 914 |             std::make_unique<RefreshRateConfigs>(m60_90Device, | 
 | 915 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
| Ady Abraham | 3470210 | 2020-02-10 14:12:05 -0800 | [diff] [blame] | 916 |  | 
 | 917 |     auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}, | 
 | 918 |                                                 LayerRequirement{.weight = 1.0f}}; | 
 | 919 |     auto& lr1 = layers[0]; | 
 | 920 |     auto& lr2 = layers[1]; | 
 | 921 |  | 
 | 922 |     lr1.vote = LayerVoteType::ExplicitExactOrMultiple; | 
 | 923 |     lr1.desiredRefreshRate = 60.0f; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 924 |     lr1.name = "60Hz ExplicitExactOrMultiple"; | 
| Ady Abraham | 3470210 | 2020-02-10 14:12:05 -0800 | [diff] [blame] | 925 |     lr2.vote = LayerVoteType::Heuristic; | 
 | 926 |     lr2.desiredRefreshRate = 90.0f; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 927 |     lr2.name = "90Hz Heuristic"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 928 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 929 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 3470210 | 2020-02-10 14:12:05 -0800 | [diff] [blame] | 930 |  | 
 | 931 |     lr1.vote = LayerVoteType::ExplicitExactOrMultiple; | 
 | 932 |     lr1.desiredRefreshRate = 60.0f; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 933 |     lr1.name = "60Hz ExplicitExactOrMultiple"; | 
 | 934 |     lr2.vote = LayerVoteType::ExplicitDefault; | 
 | 935 |     lr2.desiredRefreshRate = 90.0f; | 
 | 936 |     lr2.name = "90Hz ExplicitDefault"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 937 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 938 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 939 |  | 
 | 940 |     lr1.vote = LayerVoteType::ExplicitExactOrMultiple; | 
 | 941 |     lr1.desiredRefreshRate = 60.0f; | 
 | 942 |     lr1.name = "60Hz ExplicitExactOrMultiple"; | 
| Ady Abraham | 3470210 | 2020-02-10 14:12:05 -0800 | [diff] [blame] | 943 |     lr2.vote = LayerVoteType::Max; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 944 |     lr2.name = "Max"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 945 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 946 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 3470210 | 2020-02-10 14:12:05 -0800 | [diff] [blame] | 947 |  | 
 | 948 |     lr1.vote = LayerVoteType::ExplicitExactOrMultiple; | 
 | 949 |     lr1.desiredRefreshRate = 30.0f; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 950 |     lr1.name = "30Hz ExplicitExactOrMultiple"; | 
| Ady Abraham | 3470210 | 2020-02-10 14:12:05 -0800 | [diff] [blame] | 951 |     lr2.vote = LayerVoteType::Heuristic; | 
 | 952 |     lr2.desiredRefreshRate = 90.0f; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 953 |     lr2.name = "90Hz Heuristic"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 954 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 955 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 3470210 | 2020-02-10 14:12:05 -0800 | [diff] [blame] | 956 |  | 
 | 957 |     lr1.vote = LayerVoteType::ExplicitExactOrMultiple; | 
 | 958 |     lr1.desiredRefreshRate = 30.0f; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 959 |     lr1.name = "30Hz ExplicitExactOrMultiple"; | 
| Ady Abraham | 3470210 | 2020-02-10 14:12:05 -0800 | [diff] [blame] | 960 |     lr2.vote = LayerVoteType::Max; | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 961 |     lr2.name = "Max"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 962 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 963 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 964 | } | 
 | 965 |  | 
 | 966 | TEST_F(RefreshRateConfigsTest, scrollWhileWatching60fps_60_90) { | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 967 |     auto refreshRateConfigs = | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 968 |             std::make_unique<RefreshRateConfigs>(m60_90Device, | 
 | 969 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 970 |  | 
 | 971 |     auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}, | 
 | 972 |                                                 LayerRequirement{.weight = 1.0f}}; | 
 | 973 |     auto& lr1 = layers[0]; | 
 | 974 |     auto& lr2 = layers[1]; | 
 | 975 |  | 
 | 976 |     lr1.vote = LayerVoteType::ExplicitExactOrMultiple; | 
 | 977 |     lr1.desiredRefreshRate = 60.0f; | 
 | 978 |     lr1.name = "60Hz ExplicitExactOrMultiple"; | 
 | 979 |     lr2.vote = LayerVoteType::NoVote; | 
 | 980 |     lr2.name = "NoVote"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 981 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 982 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 983 |  | 
 | 984 |     lr1.vote = LayerVoteType::ExplicitExactOrMultiple; | 
 | 985 |     lr1.desiredRefreshRate = 60.0f; | 
 | 986 |     lr1.name = "60Hz ExplicitExactOrMultiple"; | 
 | 987 |     lr2.vote = LayerVoteType::NoVote; | 
 | 988 |     lr2.name = "NoVote"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 989 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 990 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = true, .idle = false})); | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 991 |  | 
 | 992 |     lr1.vote = LayerVoteType::ExplicitExactOrMultiple; | 
 | 993 |     lr1.desiredRefreshRate = 60.0f; | 
 | 994 |     lr1.name = "60Hz ExplicitExactOrMultiple"; | 
 | 995 |     lr2.vote = LayerVoteType::Max; | 
 | 996 |     lr2.name = "Max"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 997 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 998 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = true, .idle = false})); | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 999 |  | 
 | 1000 |     lr1.vote = LayerVoteType::ExplicitExactOrMultiple; | 
 | 1001 |     lr1.desiredRefreshRate = 60.0f; | 
 | 1002 |     lr1.name = "60Hz ExplicitExactOrMultiple"; | 
 | 1003 |     lr2.vote = LayerVoteType::Max; | 
 | 1004 |     lr2.name = "Max"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 1005 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1006 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 4ccdcb4 | 2020-02-11 17:34:34 -0800 | [diff] [blame] | 1007 |  | 
 | 1008 |     // The other layer starts to provide buffers | 
 | 1009 |     lr1.vote = LayerVoteType::ExplicitExactOrMultiple; | 
 | 1010 |     lr1.desiredRefreshRate = 60.0f; | 
 | 1011 |     lr1.name = "60Hz ExplicitExactOrMultiple"; | 
 | 1012 |     lr2.vote = LayerVoteType::Heuristic; | 
 | 1013 |     lr2.desiredRefreshRate = 90.0f; | 
 | 1014 |     lr2.name = "90Hz Heuristic"; | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 1015 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1016 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Ady Abraham | 6fb599b | 2020-03-05 13:48:22 -0800 | [diff] [blame] | 1017 | } | 
 | 1018 |  | 
 | 1019 | TEST_F(RefreshRateConfigsTest, touchConsidered) { | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1020 |     RefreshRateConfigs::GlobalSignals consideredSignals; | 
| Ady Abraham | 6fb599b | 2020-03-05 13:48:22 -0800 | [diff] [blame] | 1021 |     auto refreshRateConfigs = | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 1022 |             std::make_unique<RefreshRateConfigs>(m60_90Device, | 
 | 1023 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
| Ady Abraham | 6fb599b | 2020-03-05 13:48:22 -0800 | [diff] [blame] | 1024 |  | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1025 |     refreshRateConfigs->getBestRefreshRate({}, {.touch = false, .idle = false}, &consideredSignals); | 
 | 1026 |     EXPECT_EQ(false, consideredSignals.touch); | 
| Ady Abraham | 6fb599b | 2020-03-05 13:48:22 -0800 | [diff] [blame] | 1027 |  | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1028 |     refreshRateConfigs->getBestRefreshRate({}, {.touch = true, .idle = false}, &consideredSignals); | 
 | 1029 |     EXPECT_EQ(true, consideredSignals.touch); | 
| Ady Abraham | 6fb599b | 2020-03-05 13:48:22 -0800 | [diff] [blame] | 1030 |  | 
 | 1031 |     auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}, | 
 | 1032 |                                                 LayerRequirement{.weight = 1.0f}}; | 
 | 1033 |     auto& lr1 = layers[0]; | 
 | 1034 |     auto& lr2 = layers[1]; | 
 | 1035 |  | 
 | 1036 |     lr1.vote = LayerVoteType::ExplicitExactOrMultiple; | 
 | 1037 |     lr1.desiredRefreshRate = 60.0f; | 
 | 1038 |     lr1.name = "60Hz ExplicitExactOrMultiple"; | 
 | 1039 |     lr2.vote = LayerVoteType::Heuristic; | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 1040 |     lr2.desiredRefreshRate = 60.0f; | 
 | 1041 |     lr2.name = "60Hz Heuristic"; | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1042 |     refreshRateConfigs->getBestRefreshRate(layers, {.touch = true, .idle = false}, | 
 | 1043 |                                            &consideredSignals); | 
 | 1044 |     EXPECT_EQ(true, consideredSignals.touch); | 
| Ady Abraham | 6fb599b | 2020-03-05 13:48:22 -0800 | [diff] [blame] | 1045 |  | 
 | 1046 |     lr1.vote = LayerVoteType::ExplicitDefault; | 
 | 1047 |     lr1.desiredRefreshRate = 60.0f; | 
 | 1048 |     lr1.name = "60Hz ExplicitExactOrMultiple"; | 
 | 1049 |     lr2.vote = LayerVoteType::Heuristic; | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 1050 |     lr2.desiredRefreshRate = 60.0f; | 
 | 1051 |     lr2.name = "60Hz Heuristic"; | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1052 |     refreshRateConfigs->getBestRefreshRate(layers, {.touch = true, .idle = false}, | 
 | 1053 |                                            &consideredSignals); | 
 | 1054 |     EXPECT_EQ(false, consideredSignals.touch); | 
| Ady Abraham | 6fb599b | 2020-03-05 13:48:22 -0800 | [diff] [blame] | 1055 |  | 
 | 1056 |     lr1.vote = LayerVoteType::ExplicitExactOrMultiple; | 
 | 1057 |     lr1.desiredRefreshRate = 60.0f; | 
 | 1058 |     lr1.name = "60Hz ExplicitExactOrMultiple"; | 
 | 1059 |     lr2.vote = LayerVoteType::Heuristic; | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 1060 |     lr2.desiredRefreshRate = 60.0f; | 
 | 1061 |     lr2.name = "60Hz Heuristic"; | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1062 |     refreshRateConfigs->getBestRefreshRate(layers, {.touch = true, .idle = false}, | 
 | 1063 |                                            &consideredSignals); | 
 | 1064 |     EXPECT_EQ(true, consideredSignals.touch); | 
| Ady Abraham | 6fb599b | 2020-03-05 13:48:22 -0800 | [diff] [blame] | 1065 |  | 
 | 1066 |     lr1.vote = LayerVoteType::ExplicitDefault; | 
 | 1067 |     lr1.desiredRefreshRate = 60.0f; | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 1068 |     lr1.name = "60Hz ExplicitExactOrMultiple"; | 
| Ady Abraham | 6fb599b | 2020-03-05 13:48:22 -0800 | [diff] [blame] | 1069 |     lr2.vote = LayerVoteType::Heuristic; | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 1070 |     lr2.desiredRefreshRate = 60.0f; | 
 | 1071 |     lr2.name = "60Hz Heuristic"; | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1072 |     refreshRateConfigs->getBestRefreshRate(layers, {.touch = true, .idle = false}, | 
 | 1073 |                                            &consideredSignals); | 
 | 1074 |     EXPECT_EQ(false, consideredSignals.touch); | 
| Ady Abraham | 3470210 | 2020-02-10 14:12:05 -0800 | [diff] [blame] | 1075 | } | 
 | 1076 |  | 
| Steven Thomas | bb37432 | 2020-04-28 22:47:16 -0700 | [diff] [blame] | 1077 | TEST_F(RefreshRateConfigsTest, getBestRefreshRate_ExplicitDefault) { | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 1078 |     auto refreshRateConfigs = | 
 | 1079 |             std::make_unique<RefreshRateConfigs>(m60_90_72_120Device, /*currentConfigId=*/ | 
 | 1080 |                                                  HWC_CONFIG_ID_60); | 
| Ady Abraham | 5b8afb5a | 2020-03-06 14:57:26 -0800 | [diff] [blame] | 1081 |  | 
 | 1082 |     auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}}; | 
 | 1083 |     auto& lr = layers[0]; | 
 | 1084 |  | 
 | 1085 |     // Prepare a table with the vote and the expected refresh rate | 
 | 1086 |     const std::vector<std::pair<float, float>> testCases = { | 
 | 1087 |             {130, 120}, {120, 120}, {119, 120}, {110, 120}, | 
 | 1088 |  | 
 | 1089 |             {100, 90},  {90, 90},   {89, 90}, | 
 | 1090 |  | 
 | 1091 |             {80, 72},   {73, 72},   {72, 72},   {71, 72},   {70, 72}, | 
 | 1092 |  | 
 | 1093 |             {65, 60},   {60, 60},   {59, 60},   {58, 60}, | 
 | 1094 |  | 
 | 1095 |             {55, 90},   {50, 90},   {45, 90}, | 
 | 1096 |  | 
 | 1097 |             {42, 120},  {40, 120},  {39, 120}, | 
 | 1098 |  | 
 | 1099 |             {37, 72},   {36, 72},   {35, 72}, | 
 | 1100 |  | 
 | 1101 |             {30, 60}, | 
 | 1102 |     }; | 
 | 1103 |  | 
 | 1104 |     for (const auto& test : testCases) { | 
 | 1105 |         lr.vote = LayerVoteType::ExplicitDefault; | 
 | 1106 |         lr.desiredRefreshRate = test.first; | 
 | 1107 |  | 
 | 1108 |         std::stringstream ss; | 
 | 1109 |         ss << "ExplicitDefault " << test.first << " fps"; | 
 | 1110 |         lr.name = ss.str(); | 
 | 1111 |  | 
 | 1112 |         const auto& refreshRate = | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1113 |                 refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false}); | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 1114 |         EXPECT_FLOAT_EQ(refreshRate.getFps(), test.second) | 
| Ady Abraham | 5b8afb5a | 2020-03-06 14:57:26 -0800 | [diff] [blame] | 1115 |                 << "Expecting " << test.first << "fps => " << test.second << "Hz"; | 
 | 1116 |     } | 
| Alec Mouri | 0a1cc96 | 2019-03-14 12:33:02 -0700 | [diff] [blame] | 1117 | } | 
 | 1118 |  | 
| Alec Mouri | 11232a2 | 2020-05-14 18:06:25 -0700 | [diff] [blame] | 1119 | TEST_F(RefreshRateConfigsTest, | 
 | 1120 |        getBestRefreshRate_withDisplayManagerRequestingSingleRate_ignoresTouchFlag) { | 
 | 1121 |     auto refreshRateConfigs = | 
 | 1122 |             std::make_unique<RefreshRateConfigs>(m60_90Device, | 
 | 1123 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_90); | 
 | 1124 |  | 
 | 1125 |     ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy( | 
 | 1126 |                       {HWC_CONFIG_ID_90, {90.f, 90.f}, {60.f, 90.f}}), | 
 | 1127 |               0); | 
 | 1128 |  | 
 | 1129 |     auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}}; | 
 | 1130 |     auto& lr = layers[0]; | 
 | 1131 |  | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1132 |     RefreshRateConfigs::GlobalSignals consideredSignals; | 
| Alec Mouri | 11232a2 | 2020-05-14 18:06:25 -0700 | [diff] [blame] | 1133 |     lr.vote = LayerVoteType::ExplicitDefault; | 
 | 1134 |     lr.desiredRefreshRate = 60.0f; | 
 | 1135 |     lr.name = "60Hz ExplicitDefault"; | 
| Ady Abraham | aae5ed5 | 2020-06-26 09:32:43 -0700 | [diff] [blame] | 1136 |     lr.focused = true; | 
| Alec Mouri | 11232a2 | 2020-05-14 18:06:25 -0700 | [diff] [blame] | 1137 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1138 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = true, .idle = true}, | 
 | 1139 |                                                      &consideredSignals)); | 
 | 1140 |     EXPECT_EQ(false, consideredSignals.touch); | 
| Alec Mouri | 11232a2 | 2020-05-14 18:06:25 -0700 | [diff] [blame] | 1141 | } | 
 | 1142 |  | 
 | 1143 | TEST_F(RefreshRateConfigsTest, | 
 | 1144 |        getBestRefreshRate_withDisplayManagerRequestingSingleRate_ignoresIdleFlag) { | 
 | 1145 |     auto refreshRateConfigs = | 
 | 1146 |             std::make_unique<RefreshRateConfigs>(m60_90Device, | 
 | 1147 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
 | 1148 |  | 
 | 1149 |     ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy( | 
 | 1150 |                       {HWC_CONFIG_ID_60, {60.f, 60.f}, {60.f, 90.f}}), | 
 | 1151 |               0); | 
 | 1152 |  | 
 | 1153 |     auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}}; | 
 | 1154 |     auto& lr = layers[0]; | 
 | 1155 |  | 
| Alec Mouri | 11232a2 | 2020-05-14 18:06:25 -0700 | [diff] [blame] | 1156 |     lr.vote = LayerVoteType::ExplicitDefault; | 
 | 1157 |     lr.desiredRefreshRate = 90.0f; | 
 | 1158 |     lr.name = "90Hz ExplicitDefault"; | 
| Ady Abraham | aae5ed5 | 2020-06-26 09:32:43 -0700 | [diff] [blame] | 1159 |     lr.focused = true; | 
| Alec Mouri | 11232a2 | 2020-05-14 18:06:25 -0700 | [diff] [blame] | 1160 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1161 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = true})); | 
| Alec Mouri | 11232a2 | 2020-05-14 18:06:25 -0700 | [diff] [blame] | 1162 | } | 
 | 1163 |  | 
 | 1164 | TEST_F(RefreshRateConfigsTest, | 
| Ady Abraham | aae5ed5 | 2020-06-26 09:32:43 -0700 | [diff] [blame] | 1165 |        getBestRefreshRate_withDisplayManagerRequestingSingleRate_onlySwitchesRatesForExplicitFocusedLayers) { | 
| Alec Mouri | 11232a2 | 2020-05-14 18:06:25 -0700 | [diff] [blame] | 1166 |     auto refreshRateConfigs = | 
 | 1167 |             std::make_unique<RefreshRateConfigs>(m60_90Device, | 
 | 1168 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_90); | 
 | 1169 |  | 
 | 1170 |     ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy( | 
 | 1171 |                       {HWC_CONFIG_ID_90, {90.f, 90.f}, {60.f, 90.f}}), | 
 | 1172 |               0); | 
 | 1173 |  | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1174 |     RefreshRateConfigs::GlobalSignals consideredSignals; | 
| Alec Mouri | 11232a2 | 2020-05-14 18:06:25 -0700 | [diff] [blame] | 1175 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1176 |               refreshRateConfigs->getBestRefreshRate({}, {.touch = false, .idle = false}, | 
 | 1177 |                                                      &consideredSignals)); | 
 | 1178 |     EXPECT_EQ(false, consideredSignals.touch); | 
| Alec Mouri | 11232a2 | 2020-05-14 18:06:25 -0700 | [diff] [blame] | 1179 |  | 
 | 1180 |     auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}}; | 
 | 1181 |     auto& lr = layers[0]; | 
 | 1182 |  | 
 | 1183 |     lr.vote = LayerVoteType::ExplicitExactOrMultiple; | 
 | 1184 |     lr.desiredRefreshRate = 60.0f; | 
 | 1185 |     lr.name = "60Hz ExplicitExactOrMultiple"; | 
| Ady Abraham | aae5ed5 | 2020-06-26 09:32:43 -0700 | [diff] [blame] | 1186 |     lr.focused = false; | 
 | 1187 |     EXPECT_EQ(mExpected90Config, | 
 | 1188 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
 | 1189 |  | 
 | 1190 |     lr.focused = true; | 
| Ady Abraham | 20c029c | 2020-07-06 12:58:05 -0700 | [diff] [blame] | 1191 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1192 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Alec Mouri | 11232a2 | 2020-05-14 18:06:25 -0700 | [diff] [blame] | 1193 |  | 
 | 1194 |     lr.vote = LayerVoteType::ExplicitDefault; | 
 | 1195 |     lr.desiredRefreshRate = 60.0f; | 
 | 1196 |     lr.name = "60Hz ExplicitDefault"; | 
| Ady Abraham | aae5ed5 | 2020-06-26 09:32:43 -0700 | [diff] [blame] | 1197 |     lr.focused = false; | 
 | 1198 |     EXPECT_EQ(mExpected90Config, | 
 | 1199 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
 | 1200 |  | 
 | 1201 |     lr.focused = true; | 
| Alec Mouri | 11232a2 | 2020-05-14 18:06:25 -0700 | [diff] [blame] | 1202 |     EXPECT_EQ(mExpected60Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1203 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Alec Mouri | 11232a2 | 2020-05-14 18:06:25 -0700 | [diff] [blame] | 1204 |  | 
 | 1205 |     lr.vote = LayerVoteType::Heuristic; | 
 | 1206 |     lr.desiredRefreshRate = 60.0f; | 
 | 1207 |     lr.name = "60Hz Heuristic"; | 
| Ady Abraham | aae5ed5 | 2020-06-26 09:32:43 -0700 | [diff] [blame] | 1208 |     lr.focused = false; | 
 | 1209 |     EXPECT_EQ(mExpected90Config, | 
 | 1210 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
 | 1211 |  | 
 | 1212 |     lr.focused = true; | 
| Alec Mouri | 11232a2 | 2020-05-14 18:06:25 -0700 | [diff] [blame] | 1213 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1214 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Alec Mouri | 11232a2 | 2020-05-14 18:06:25 -0700 | [diff] [blame] | 1215 |  | 
 | 1216 |     lr.vote = LayerVoteType::Max; | 
 | 1217 |     lr.desiredRefreshRate = 60.0f; | 
 | 1218 |     lr.name = "60Hz Max"; | 
| Ady Abraham | aae5ed5 | 2020-06-26 09:32:43 -0700 | [diff] [blame] | 1219 |     lr.focused = false; | 
 | 1220 |     EXPECT_EQ(mExpected90Config, | 
 | 1221 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
 | 1222 |  | 
 | 1223 |     lr.focused = true; | 
| Alec Mouri | 11232a2 | 2020-05-14 18:06:25 -0700 | [diff] [blame] | 1224 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1225 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Alec Mouri | 11232a2 | 2020-05-14 18:06:25 -0700 | [diff] [blame] | 1226 |  | 
 | 1227 |     lr.vote = LayerVoteType::Min; | 
 | 1228 |     lr.desiredRefreshRate = 60.0f; | 
 | 1229 |     lr.name = "60Hz Min"; | 
| Ady Abraham | aae5ed5 | 2020-06-26 09:32:43 -0700 | [diff] [blame] | 1230 |     lr.focused = false; | 
 | 1231 |     EXPECT_EQ(mExpected90Config, | 
 | 1232 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
 | 1233 |  | 
 | 1234 |     lr.focused = true; | 
| Alec Mouri | 11232a2 | 2020-05-14 18:06:25 -0700 | [diff] [blame] | 1235 |     EXPECT_EQ(mExpected90Config, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1236 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false})); | 
| Alec Mouri | 11232a2 | 2020-05-14 18:06:25 -0700 | [diff] [blame] | 1237 | } | 
 | 1238 |  | 
| Steven Thomas | d407190 | 2020-03-24 16:02:53 -0700 | [diff] [blame] | 1239 | TEST_F(RefreshRateConfigsTest, groupSwitching) { | 
| Steven Thomas | d407190 | 2020-03-24 16:02:53 -0700 | [diff] [blame] | 1240 |     auto refreshRateConfigs = | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 1241 |             std::make_unique<RefreshRateConfigs>(m60_90DeviceWithDifferentGroups, | 
 | 1242 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
| Steven Thomas | d407190 | 2020-03-24 16:02:53 -0700 | [diff] [blame] | 1243 |  | 
 | 1244 |     auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}}; | 
 | 1245 |     auto& layer = layers[0]; | 
 | 1246 |     layer.vote = LayerVoteType::ExplicitDefault; | 
 | 1247 |     layer.desiredRefreshRate = 90.0f; | 
 | 1248 |     layer.name = "90Hz ExplicitDefault"; | 
 | 1249 |  | 
| Steven Thomas | d407190 | 2020-03-24 16:02:53 -0700 | [diff] [blame] | 1250 |     ASSERT_EQ(HWC_CONFIG_ID_60, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1251 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false}) | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 1252 |                       .getConfigId()); | 
| Steven Thomas | d407190 | 2020-03-24 16:02:53 -0700 | [diff] [blame] | 1253 |  | 
 | 1254 |     RefreshRateConfigs::Policy policy; | 
 | 1255 |     policy.defaultConfig = refreshRateConfigs->getCurrentPolicy().defaultConfig; | 
 | 1256 |     policy.allowGroupSwitching = true; | 
 | 1257 |     ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy(policy), 0); | 
 | 1258 |     ASSERT_EQ(HWC_CONFIG_ID_90, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1259 |               refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false}) | 
| Ady Abraham | abc2760 | 2020-04-08 17:20:29 -0700 | [diff] [blame] | 1260 |                       .getConfigId()); | 
| Steven Thomas | d407190 | 2020-03-24 16:02:53 -0700 | [diff] [blame] | 1261 | } | 
 | 1262 |  | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 1263 | TEST_F(RefreshRateConfigsTest, primaryVsAppRequestPolicy) { | 
 | 1264 |     auto refreshRateConfigs = | 
| Alec Mouri | 11232a2 | 2020-05-14 18:06:25 -0700 | [diff] [blame] | 1265 |             std::make_unique<RefreshRateConfigs>(m30_60_90Device, | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 1266 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
 | 1267 |  | 
 | 1268 |     auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}}; | 
 | 1269 |     layers[0].name = "Test layer"; | 
 | 1270 |  | 
| Steven Thomas | bb37432 | 2020-04-28 22:47:16 -0700 | [diff] [blame] | 1271 |     // Return the config ID from calling getBestRefreshRate() for a single layer with the | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 1272 |     // given voteType and fps. | 
| Ady Abraham | aae5ed5 | 2020-06-26 09:32:43 -0700 | [diff] [blame] | 1273 |     auto getFrameRate = [&](LayerVoteType voteType, float fps, bool touchActive = false, | 
 | 1274 |                             bool focused = true) -> HwcConfigIndexType { | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 1275 |         layers[0].vote = voteType; | 
 | 1276 |         layers[0].desiredRefreshRate = fps; | 
| Ady Abraham | aae5ed5 | 2020-06-26 09:32:43 -0700 | [diff] [blame] | 1277 |         layers[0].focused = focused; | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1278 |         return refreshRateConfigs->getBestRefreshRate(layers, {.touch = touchActive, .idle = false}) | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 1279 |                 .getConfigId(); | 
 | 1280 |     }; | 
 | 1281 |  | 
 | 1282 |     ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy( | 
| Alec Mouri | 11232a2 | 2020-05-14 18:06:25 -0700 | [diff] [blame] | 1283 |                       {HWC_CONFIG_ID_60, {30.f, 60.f}, {30.f, 90.f}}), | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 1284 |               0); | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 1285 |     EXPECT_EQ(HWC_CONFIG_ID_60, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1286 |               refreshRateConfigs->getBestRefreshRate({}, {.touch = false, .idle = false}) | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 1287 |                       .getConfigId()); | 
 | 1288 |     EXPECT_EQ(HWC_CONFIG_ID_60, getFrameRate(LayerVoteType::NoVote, 90.f)); | 
| Alec Mouri | 11232a2 | 2020-05-14 18:06:25 -0700 | [diff] [blame] | 1289 |     EXPECT_EQ(HWC_CONFIG_ID_30, getFrameRate(LayerVoteType::Min, 90.f)); | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 1290 |     EXPECT_EQ(HWC_CONFIG_ID_60, getFrameRate(LayerVoteType::Max, 90.f)); | 
 | 1291 |     EXPECT_EQ(HWC_CONFIG_ID_60, getFrameRate(LayerVoteType::Heuristic, 90.f)); | 
 | 1292 |     EXPECT_EQ(HWC_CONFIG_ID_90, getFrameRate(LayerVoteType::ExplicitDefault, 90.f)); | 
| Ady Abraham | 20c029c | 2020-07-06 12:58:05 -0700 | [diff] [blame] | 1293 |     EXPECT_EQ(HWC_CONFIG_ID_60, getFrameRate(LayerVoteType::ExplicitExactOrMultiple, 90.f)); | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 1294 |  | 
| Ady Abraham | aae5ed5 | 2020-06-26 09:32:43 -0700 | [diff] [blame] | 1295 |     // Layers not focused are not allowed to override primary config | 
 | 1296 |     EXPECT_EQ(HWC_CONFIG_ID_60, | 
 | 1297 |               getFrameRate(LayerVoteType::ExplicitDefault, 90.f, /*touch=*/false, | 
 | 1298 |                            /*focused=*/false)); | 
 | 1299 |     EXPECT_EQ(HWC_CONFIG_ID_60, | 
 | 1300 |               getFrameRate(LayerVoteType::ExplicitExactOrMultiple, 90.f, /*touch=*/false, | 
 | 1301 |                            /*focused=*/false)); | 
 | 1302 |  | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 1303 |     // Touch boost should be restricted to the primary range. | 
 | 1304 |     EXPECT_EQ(HWC_CONFIG_ID_60, getFrameRate(LayerVoteType::Max, 90.f, /*touch=*/true)); | 
 | 1305 |     // When we're higher than the primary range max due to a layer frame rate setting, touch boost | 
 | 1306 |     // shouldn't drag us back down to the primary range max. | 
 | 1307 |     EXPECT_EQ(HWC_CONFIG_ID_90, getFrameRate(LayerVoteType::ExplicitDefault, 90.f, /*touch=*/true)); | 
| Ady Abraham | 20c029c | 2020-07-06 12:58:05 -0700 | [diff] [blame] | 1308 |     EXPECT_EQ(HWC_CONFIG_ID_60, | 
| Steven Thomas | f734df4 | 2020-04-13 21:09:28 -0700 | [diff] [blame] | 1309 |               getFrameRate(LayerVoteType::ExplicitExactOrMultiple, 90.f, /*touch=*/true)); | 
 | 1310 |  | 
 | 1311 |     ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy( | 
 | 1312 |                       {HWC_CONFIG_ID_60, {60.f, 60.f}, {60.f, 60.f}}), | 
 | 1313 |               0); | 
 | 1314 |     EXPECT_EQ(HWC_CONFIG_ID_60, getFrameRate(LayerVoteType::NoVote, 90.f)); | 
 | 1315 |     EXPECT_EQ(HWC_CONFIG_ID_60, getFrameRate(LayerVoteType::Min, 90.f)); | 
 | 1316 |     EXPECT_EQ(HWC_CONFIG_ID_60, getFrameRate(LayerVoteType::Max, 90.f)); | 
 | 1317 |     EXPECT_EQ(HWC_CONFIG_ID_60, getFrameRate(LayerVoteType::Heuristic, 90.f)); | 
 | 1318 |     EXPECT_EQ(HWC_CONFIG_ID_60, getFrameRate(LayerVoteType::ExplicitDefault, 90.f)); | 
 | 1319 |     EXPECT_EQ(HWC_CONFIG_ID_60, getFrameRate(LayerVoteType::ExplicitExactOrMultiple, 90.f)); | 
 | 1320 | } | 
 | 1321 |  | 
| Steven Thomas | bb37432 | 2020-04-28 22:47:16 -0700 | [diff] [blame] | 1322 | TEST_F(RefreshRateConfigsTest, idle) { | 
 | 1323 |     auto refreshRateConfigs = | 
 | 1324 |             std::make_unique<RefreshRateConfigs>(m60_90Device, | 
 | 1325 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
 | 1326 |  | 
 | 1327 |     auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}}; | 
 | 1328 |     layers[0].name = "Test layer"; | 
 | 1329 |  | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1330 |     const auto getIdleFrameRate = [&](LayerVoteType voteType, | 
 | 1331 |                                       bool touchActive) -> HwcConfigIndexType { | 
| Steven Thomas | bb37432 | 2020-04-28 22:47:16 -0700 | [diff] [blame] | 1332 |         layers[0].vote = voteType; | 
 | 1333 |         layers[0].desiredRefreshRate = 90.f; | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1334 |         RefreshRateConfigs::GlobalSignals consideredSignals; | 
 | 1335 |         const auto configId = | 
 | 1336 |                 refreshRateConfigs | 
 | 1337 |                         ->getBestRefreshRate(layers, {.touch = touchActive, .idle = true}, | 
 | 1338 |                                              &consideredSignals) | 
 | 1339 |                         .getConfigId(); | 
 | 1340 |         // Refresh rate will be chosen by either touch state or idle state | 
 | 1341 |         EXPECT_EQ(!touchActive, consideredSignals.idle); | 
 | 1342 |         return configId; | 
| Steven Thomas | bb37432 | 2020-04-28 22:47:16 -0700 | [diff] [blame] | 1343 |     }; | 
 | 1344 |  | 
 | 1345 |     ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy( | 
 | 1346 |                       {HWC_CONFIG_ID_60, {60.f, 90.f}, {60.f, 90.f}}), | 
 | 1347 |               0); | 
 | 1348 |  | 
 | 1349 |     // Idle should be lower priority than touch boost. | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1350 |     EXPECT_EQ(HWC_CONFIG_ID_90, getIdleFrameRate(LayerVoteType::NoVote, /*touchActive=*/true)); | 
 | 1351 |     EXPECT_EQ(HWC_CONFIG_ID_90, getIdleFrameRate(LayerVoteType::Min, /*touchActive=*/true)); | 
 | 1352 |     EXPECT_EQ(HWC_CONFIG_ID_90, getIdleFrameRate(LayerVoteType::Max, /*touchActive=*/true)); | 
 | 1353 |     EXPECT_EQ(HWC_CONFIG_ID_90, getIdleFrameRate(LayerVoteType::Heuristic, /*touchActive=*/true)); | 
 | 1354 |     EXPECT_EQ(HWC_CONFIG_ID_90, | 
 | 1355 |               getIdleFrameRate(LayerVoteType::ExplicitDefault, /*touchActive=*/true)); | 
 | 1356 |     EXPECT_EQ(HWC_CONFIG_ID_90, | 
 | 1357 |               getIdleFrameRate(LayerVoteType::ExplicitExactOrMultiple, /*touchActive=*/true)); | 
| Steven Thomas | bb37432 | 2020-04-28 22:47:16 -0700 | [diff] [blame] | 1358 |  | 
 | 1359 |     // With no layers, idle should still be lower priority than touch boost. | 
| Steven Thomas | bb37432 | 2020-04-28 22:47:16 -0700 | [diff] [blame] | 1360 |     EXPECT_EQ(HWC_CONFIG_ID_90, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1361 |               refreshRateConfigs->getBestRefreshRate({}, {.touch = true, .idle = true}) | 
| Steven Thomas | bb37432 | 2020-04-28 22:47:16 -0700 | [diff] [blame] | 1362 |                       .getConfigId()); | 
 | 1363 |  | 
 | 1364 |     // Idle should be higher precedence than other layer frame rate considerations. | 
 | 1365 |     refreshRateConfigs->setCurrentConfigId(HWC_CONFIG_ID_90); | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1366 |     EXPECT_EQ(HWC_CONFIG_ID_60, getIdleFrameRate(LayerVoteType::NoVote, /*touchActive=*/false)); | 
 | 1367 |     EXPECT_EQ(HWC_CONFIG_ID_60, getIdleFrameRate(LayerVoteType::Min, /*touchActive=*/false)); | 
 | 1368 |     EXPECT_EQ(HWC_CONFIG_ID_60, getIdleFrameRate(LayerVoteType::Max, /*touchActive=*/false)); | 
 | 1369 |     EXPECT_EQ(HWC_CONFIG_ID_60, getIdleFrameRate(LayerVoteType::Heuristic, /*touchActive=*/false)); | 
 | 1370 |     EXPECT_EQ(HWC_CONFIG_ID_60, | 
 | 1371 |               getIdleFrameRate(LayerVoteType::ExplicitDefault, /*touchActive=*/false)); | 
 | 1372 |     EXPECT_EQ(HWC_CONFIG_ID_60, | 
 | 1373 |               getIdleFrameRate(LayerVoteType::ExplicitExactOrMultiple, /*touchActive=*/false)); | 
| Steven Thomas | bb37432 | 2020-04-28 22:47:16 -0700 | [diff] [blame] | 1374 |  | 
 | 1375 |     // Idle should be applied rather than the current config when there are no layers. | 
 | 1376 |     EXPECT_EQ(HWC_CONFIG_ID_60, | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1377 |               refreshRateConfigs->getBestRefreshRate({}, {.touch = false, .idle = true}) | 
| Steven Thomas | bb37432 | 2020-04-28 22:47:16 -0700 | [diff] [blame] | 1378 |                       .getConfigId()); | 
 | 1379 | } | 
 | 1380 |  | 
| Ady Abraham | b1b9d41 | 2020-06-01 19:53:52 -0700 | [diff] [blame] | 1381 | TEST_F(RefreshRateConfigsTest, findClosestKnownFrameRate) { | 
 | 1382 |     auto refreshRateConfigs = | 
 | 1383 |             std::make_unique<RefreshRateConfigs>(m60_90Device, | 
 | 1384 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
 | 1385 |  | 
 | 1386 |     for (float fps = 1.0f; fps <= 120.0f; fps += 0.1f) { | 
 | 1387 |         const auto knownFrameRate = findClosestKnownFrameRate(*refreshRateConfigs, fps); | 
 | 1388 |         float expectedFrameRate; | 
 | 1389 |         if (fps < 26.91f) { | 
 | 1390 |             expectedFrameRate = 24.0f; | 
 | 1391 |         } else if (fps < 37.51f) { | 
 | 1392 |             expectedFrameRate = 30.0f; | 
 | 1393 |         } else if (fps < 52.51f) { | 
 | 1394 |             expectedFrameRate = 45.0f; | 
 | 1395 |         } else if (fps < 66.01f) { | 
 | 1396 |             expectedFrameRate = 60.0f; | 
 | 1397 |         } else if (fps < 81.01f) { | 
 | 1398 |             expectedFrameRate = 72.0f; | 
 | 1399 |         } else { | 
 | 1400 |             expectedFrameRate = 90.0f; | 
 | 1401 |         } | 
 | 1402 |         EXPECT_FLOAT_EQ(expectedFrameRate, knownFrameRate) | 
 | 1403 |                 << "findClosestKnownFrameRate(" << fps << ") = " << knownFrameRate; | 
 | 1404 |     } | 
 | 1405 | } | 
 | 1406 |  | 
 | 1407 | TEST_F(RefreshRateConfigsTest, getBestRefreshRate_KnownFrameRate) { | 
| Ady Abraham | b1b9d41 | 2020-06-01 19:53:52 -0700 | [diff] [blame] | 1408 |     auto refreshRateConfigs = | 
 | 1409 |             std::make_unique<RefreshRateConfigs>(m60_90Device, | 
 | 1410 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_60); | 
 | 1411 |  | 
 | 1412 |     struct ExpectedRate { | 
 | 1413 |         float rate; | 
 | 1414 |         const RefreshRate& expected; | 
 | 1415 |     }; | 
 | 1416 |  | 
 | 1417 |     /* clang-format off */ | 
 | 1418 |     std::vector<ExpectedRate> knownFrameRatesExpectations = { | 
 | 1419 |         {24.0f, mExpected60Config}, | 
 | 1420 |         {30.0f, mExpected60Config}, | 
 | 1421 |         {45.0f, mExpected90Config}, | 
 | 1422 |         {60.0f, mExpected60Config}, | 
 | 1423 |         {72.0f, mExpected90Config}, | 
 | 1424 |         {90.0f, mExpected90Config}, | 
 | 1425 |     }; | 
 | 1426 |     /* clang-format on */ | 
 | 1427 |  | 
 | 1428 |     // Make sure the test tests all the known frame rate | 
 | 1429 |     const auto knownFrameRateList = getKnownFrameRate(*refreshRateConfigs); | 
 | 1430 |     const auto equal = std::equal(knownFrameRateList.begin(), knownFrameRateList.end(), | 
 | 1431 |                                   knownFrameRatesExpectations.begin(), | 
 | 1432 |                                   [](float a, const ExpectedRate& b) { return a == b.rate; }); | 
 | 1433 |     EXPECT_TRUE(equal); | 
 | 1434 |  | 
 | 1435 |     auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}}; | 
 | 1436 |     auto& layer = layers[0]; | 
 | 1437 |     layer.vote = LayerVoteType::Heuristic; | 
 | 1438 |     for (const auto& expectedRate : knownFrameRatesExpectations) { | 
 | 1439 |         layer.desiredRefreshRate = expectedRate.rate; | 
| Ady Abraham | dfd6216 | 2020-06-10 16:11:56 -0700 | [diff] [blame] | 1440 |         const auto& refreshRate = | 
 | 1441 |                 refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false}); | 
| Ady Abraham | b1b9d41 | 2020-06-01 19:53:52 -0700 | [diff] [blame] | 1442 |         EXPECT_EQ(expectedRate.expected, refreshRate); | 
 | 1443 |     } | 
 | 1444 | } | 
 | 1445 |  | 
| Ana Krulec | b9afd79 | 2020-06-11 13:16:15 -0700 | [diff] [blame] | 1446 | TEST_F(RefreshRateConfigsTest, testComparisonOperator) { | 
 | 1447 |     EXPECT_TRUE(mExpected60Config < mExpected90Config); | 
 | 1448 |     EXPECT_FALSE(mExpected60Config < mExpected60Config); | 
 | 1449 |     EXPECT_FALSE(mExpected90Config < mExpected90Config); | 
 | 1450 | } | 
 | 1451 |  | 
 | 1452 | TEST_F(RefreshRateConfigsTest, testKernelIdleTimerAction) { | 
 | 1453 |     using KernelIdleTimerAction = scheduler::RefreshRateConfigs::KernelIdleTimerAction; | 
 | 1454 |  | 
 | 1455 |     auto refreshRateConfigs = | 
 | 1456 |             std::make_unique<RefreshRateConfigs>(m60_90Device, | 
 | 1457 |                                                  /*currentConfigId=*/HWC_CONFIG_ID_90); | 
 | 1458 |     // SetPolicy(60, 90), current 90Hz => TurnOn. | 
 | 1459 |     EXPECT_EQ(KernelIdleTimerAction::TurnOn, refreshRateConfigs->getIdleTimerAction()); | 
 | 1460 |  | 
 | 1461 |     // SetPolicy(60, 90), current 60Hz => TurnOn. | 
 | 1462 |     ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy({HWC_CONFIG_ID_60, {60, 90}}), 0); | 
 | 1463 |     EXPECT_EQ(KernelIdleTimerAction::TurnOn, refreshRateConfigs->getIdleTimerAction()); | 
 | 1464 |  | 
 | 1465 |     // SetPolicy(60, 60), current 60Hz => NoChange, avoid extra calls. | 
 | 1466 |     ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy({HWC_CONFIG_ID_60, {60, 60}}), 0); | 
 | 1467 |     EXPECT_EQ(KernelIdleTimerAction::NoChange, refreshRateConfigs->getIdleTimerAction()); | 
 | 1468 |  | 
 | 1469 |     // SetPolicy(90, 90), current 90Hz => TurnOff. | 
 | 1470 |     ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy({HWC_CONFIG_ID_90, {90, 90}}), 0); | 
 | 1471 |     EXPECT_EQ(KernelIdleTimerAction::TurnOff, refreshRateConfigs->getIdleTimerAction()); | 
 | 1472 | } | 
 | 1473 |  | 
| Alec Mouri | 0a1cc96 | 2019-03-14 12:33:02 -0700 | [diff] [blame] | 1474 | } // namespace | 
 | 1475 | } // namespace scheduler | 
 | 1476 | } // namespace android |