blob: a581c7a4a4a9849a14b18ac48982db73fa592559 [file] [log] [blame]
Andy Yud6a36202022-01-26 04:08:22 -08001/*
2 * Copyright 2022 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 "FrameRateOverrideMappingsTest"
19
20#include <gtest/gtest.h>
21#include <unordered_map>
22
23#include "Scheduler/FrameRateOverrideMappings.h"
24
25namespace android::scheduler {
26
27using FrameRateOverride = DisplayEventReceiver::Event::FrameRateOverride;
28using UidToFrameRateOverride = std::map<uid_t, Fps>;
29
30class FrameRateOverrideMappingsTest : public testing::Test {
31protected:
32 FrameRateOverrideMappings mFrameRateOverrideMappings;
33 UidToFrameRateOverride mFrameRateOverrideByContent;
34};
35
36namespace {
37TEST_F(FrameRateOverrideMappingsTest, testUpdateFrameRateOverridesByContent) {
38 mFrameRateOverrideByContent.clear();
39 mFrameRateOverrideByContent.emplace(0, 30.0_Hz);
40 mFrameRateOverrideByContent.emplace(1, 60.0_Hz);
41 ASSERT_TRUE(mFrameRateOverrideMappings.updateFrameRateOverridesByContent(
42 mFrameRateOverrideByContent));
43
44 ASSERT_TRUE(isApproxEqual(30.0_Hz,
45 *mFrameRateOverrideMappings.getFrameRateOverrideForUid(
46 0, /*supportsFrameRateOverrideByContent*/ true)));
47 ASSERT_TRUE(isApproxEqual(60.0_Hz,
48 *mFrameRateOverrideMappings.getFrameRateOverrideForUid(
49 1, /*supportsFrameRateOverrideByContent*/ true)));
50 ASSERT_EQ(std::nullopt,
51 mFrameRateOverrideMappings
52 .getFrameRateOverrideForUid(1, /*supportsFrameRateOverrideByContent*/ false));
53 ASSERT_EQ(std::nullopt,
54 mFrameRateOverrideMappings
55 .getFrameRateOverrideForUid(3, /*supportsFrameRateOverrideByContent*/ true));
56 ASSERT_EQ(std::nullopt,
57 mFrameRateOverrideMappings
58 .getFrameRateOverrideForUid(3, /*supportsFrameRateOverrideByContent*/ false));
59}
60
61TEST_F(FrameRateOverrideMappingsTest, testSetGameModeRefreshRateForUid) {
62 mFrameRateOverrideMappings.setGameModeRefreshRateForUid({1, 30.0f});
63 mFrameRateOverrideMappings.setGameModeRefreshRateForUid({2, 90.0f});
64
65 ASSERT_TRUE(isApproxEqual(30.0_Hz,
66 *mFrameRateOverrideMappings.getFrameRateOverrideForUid(
67 1, /*supportsFrameRateOverrideByContent*/ true)));
68 ASSERT_TRUE(isApproxEqual(90.0_Hz,
69 *mFrameRateOverrideMappings.getFrameRateOverrideForUid(
70 2, /*supportsFrameRateOverrideByContent*/ false)));
71 ASSERT_EQ(std::nullopt,
72 mFrameRateOverrideMappings
73 .getFrameRateOverrideForUid(0, /*supportsFrameRateOverrideByContent*/ true));
74 ASSERT_EQ(std::nullopt,
75 mFrameRateOverrideMappings
76 .getFrameRateOverrideForUid(0, /*supportsFrameRateOverrideByContent*/ false));
77}
78
79TEST_F(FrameRateOverrideMappingsTest, testSetPreferredRefreshRateForUid) {
80 mFrameRateOverrideMappings.setPreferredRefreshRateForUid({0, 60.0f});
81 mFrameRateOverrideMappings.setPreferredRefreshRateForUid({2, 120.0f});
82
83 ASSERT_TRUE(isApproxEqual(60.0_Hz,
84 *mFrameRateOverrideMappings.getFrameRateOverrideForUid(
85 0, /*supportsFrameRateOverrideByContent*/ true)));
86 ASSERT_TRUE(isApproxEqual(120.0_Hz,
87 *mFrameRateOverrideMappings.getFrameRateOverrideForUid(
88 2, /*supportsFrameRateOverrideByContent*/ false)));
89 ASSERT_EQ(std::nullopt,
90 mFrameRateOverrideMappings
91 .getFrameRateOverrideForUid(1, /*supportsFrameRateOverrideByContent*/ true));
92 ASSERT_EQ(std::nullopt,
93 mFrameRateOverrideMappings
94 .getFrameRateOverrideForUid(1, /*supportsFrameRateOverrideByContent*/ false));
95}
96
97TEST_F(FrameRateOverrideMappingsTest, testGetFrameRateOverrideForUidMixed) {
98 mFrameRateOverrideByContent.clear();
99 mFrameRateOverrideByContent.emplace(0, 30.0_Hz);
100 mFrameRateOverrideByContent.emplace(1, 60.0_Hz);
101 mFrameRateOverrideByContent.emplace(2, 45.0_Hz);
102 mFrameRateOverrideByContent.emplace(5, 120.0_Hz);
103 ASSERT_TRUE(mFrameRateOverrideMappings.updateFrameRateOverridesByContent(
104 mFrameRateOverrideByContent));
105
106 std::vector<FrameRateOverride> allFrameRateOverrides;
107 ASSERT_EQ(allFrameRateOverrides,
108 mFrameRateOverrideMappings.getAllFrameRateOverrides(
109 /*supportsFrameRateOverrideByContent*/ false));
110 allFrameRateOverrides = {{0, 30.0f}, {1, 60.0f}, {2, 45.0f}, {5, 120.0f}};
111 ASSERT_EQ(allFrameRateOverrides,
112 mFrameRateOverrideMappings.getAllFrameRateOverrides(
113 /*supportsFrameRateOverrideByContent*/ true));
114
115 mFrameRateOverrideMappings.setGameModeRefreshRateForUid({1, 30.0f});
116 mFrameRateOverrideMappings.setGameModeRefreshRateForUid({2, 90.0f});
117 mFrameRateOverrideMappings.setGameModeRefreshRateForUid({4, 120.0f});
118
119 allFrameRateOverrides.clear();
120 allFrameRateOverrides = {{1, 30.0f}, {2, 90.0f}, {4, 120.0f}};
121 ASSERT_EQ(allFrameRateOverrides,
122 mFrameRateOverrideMappings.getAllFrameRateOverrides(
123 /*supportsFrameRateOverrideByContent*/ false));
124 allFrameRateOverrides.clear();
125 allFrameRateOverrides = {{1, 30.0f}, {2, 90.0f}, {4, 120.0f}, {0, 30.0f}, {5, 120.0f}};
126 ASSERT_EQ(allFrameRateOverrides,
127 mFrameRateOverrideMappings.getAllFrameRateOverrides(
128 /*supportsFrameRateOverrideByContent*/ true));
129
130 mFrameRateOverrideMappings.setPreferredRefreshRateForUid({0, 60.0f});
131 mFrameRateOverrideMappings.setPreferredRefreshRateForUid({2, 120.0f});
132 mFrameRateOverrideMappings.setPreferredRefreshRateForUid({3, 30.0f});
133
134 allFrameRateOverrides.clear();
135 allFrameRateOverrides = {{0, 60.0f}, {2, 120.0f}, {3, 30.0f}, {1, 30.0f}, {4, 120.0f}};
136 ASSERT_EQ(allFrameRateOverrides,
137 mFrameRateOverrideMappings.getAllFrameRateOverrides(
138 /*supportsFrameRateOverrideByContent*/ false));
139 allFrameRateOverrides.clear();
140 allFrameRateOverrides = {{0, 60.0f}, {2, 120.0f}, {3, 30.0f},
141 {1, 30.0f}, {4, 120.0f}, {5, 120.0f}};
142 ASSERT_EQ(allFrameRateOverrides,
143 mFrameRateOverrideMappings.getAllFrameRateOverrides(
144 /*supportsFrameRateOverrideByContent*/ true));
145
146 ASSERT_TRUE(isApproxEqual(60.0_Hz,
147 *mFrameRateOverrideMappings.getFrameRateOverrideForUid(
148 0, /*supportsFrameRateOverrideByContent*/ true)));
149 ASSERT_TRUE(isApproxEqual(30.0_Hz,
150 *mFrameRateOverrideMappings.getFrameRateOverrideForUid(
151 1, /*supportsFrameRateOverrideByContent*/ true)));
152 ASSERT_TRUE(isApproxEqual(120.0_Hz,
153 *mFrameRateOverrideMappings.getFrameRateOverrideForUid(
154 2, /*supportsFrameRateOverrideByContent*/ true)));
155 ASSERT_TRUE(isApproxEqual(30.0_Hz,
156 *mFrameRateOverrideMappings.getFrameRateOverrideForUid(
157 3, /*supportsFrameRateOverrideByContent*/ true)));
158 ASSERT_TRUE(isApproxEqual(120.0_Hz,
159 *mFrameRateOverrideMappings.getFrameRateOverrideForUid(
160 4, /*supportsFrameRateOverrideByContent*/ true)));
161 ASSERT_TRUE(isApproxEqual(120.0_Hz,
162 *mFrameRateOverrideMappings.getFrameRateOverrideForUid(
163 5, /*supportsFrameRateOverrideByContent*/ true)));
164
165 ASSERT_TRUE(isApproxEqual(60.0_Hz,
166 *mFrameRateOverrideMappings.getFrameRateOverrideForUid(
167 0, /*supportsFrameRateOverrideByContent*/ false)));
168 ASSERT_TRUE(isApproxEqual(30.0_Hz,
169 *mFrameRateOverrideMappings.getFrameRateOverrideForUid(
170 1, /*supportsFrameRateOverrideByContent*/ false)));
171 ASSERT_TRUE(isApproxEqual(120.0_Hz,
172 *mFrameRateOverrideMappings.getFrameRateOverrideForUid(
173 2, /*supportsFrameRateOverrideByContent*/ false)));
174 ASSERT_TRUE(isApproxEqual(30.0_Hz,
175 *mFrameRateOverrideMappings.getFrameRateOverrideForUid(
176 3, /*supportsFrameRateOverrideByContent*/ false)));
177 ASSERT_TRUE(isApproxEqual(120.0_Hz,
178 *mFrameRateOverrideMappings.getFrameRateOverrideForUid(
179 4, /*supportsFrameRateOverrideByContent*/ false)));
180 ASSERT_EQ(std::nullopt,
181 mFrameRateOverrideMappings
182 .getFrameRateOverrideForUid(5, /*supportsFrameRateOverrideByContent*/ false));
183}
184} // namespace
185} // namespace android::scheduler