1 /*
2 * Copyright (C) 2024 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 #include <android_os_vibrator.h>
18 #include <flag_macros.h>
19 #include <gtest/gtest.h>
20 #include <vibrator/ExternalVibrationUtils.h>
21
22 #include "test_utils.h"
23
24 #define FLAG_NS android::os::vibrator
25
26 using namespace android;
27 using namespace testing;
28
29 using HapticScale = os::HapticScale;
30 using HapticLevel = os::HapticLevel;
31
32 static constexpr float TEST_TOLERANCE = 1e-2f;
33 static constexpr size_t TEST_BUFFER_LENGTH = 4;
34 static float TEST_BUFFER[TEST_BUFFER_LENGTH] = { 1, -1, 0.5f, -0.2f };
35
36 class ExternalVibrationUtilsTest : public Test {
37 public:
SetUp()38 void SetUp() override {
39 std::copy(std::begin(TEST_BUFFER), std::end(TEST_BUFFER), std::begin(mBuffer));
40 }
41
42 protected:
scaleBuffer(HapticLevel hapticLevel)43 void scaleBuffer(HapticLevel hapticLevel) {
44 scaleBuffer(HapticScale(hapticLevel));
45 }
46
scaleBuffer(HapticLevel hapticLevel,float adaptiveScaleFactor)47 void scaleBuffer(HapticLevel hapticLevel, float adaptiveScaleFactor) {
48 scaleBuffer(hapticLevel, adaptiveScaleFactor, 0 /* limit */);
49 }
50
scaleBuffer(HapticLevel hapticLevel,float adaptiveScaleFactor,float limit)51 void scaleBuffer(HapticLevel hapticLevel, float adaptiveScaleFactor, float limit) {
52 scaleBuffer(HapticScale(hapticLevel, -1 /* scaleFactor */, adaptiveScaleFactor), limit);
53 }
54
scaleBuffer(HapticScale hapticScale)55 void scaleBuffer(HapticScale hapticScale) {
56 scaleBuffer(hapticScale, 0 /* limit */);
57 }
58
scaleBuffer(HapticScale hapticScale,float limit)59 void scaleBuffer(HapticScale hapticScale, float limit) {
60 std::copy(std::begin(TEST_BUFFER), std::end(TEST_BUFFER), std::begin(mBuffer));
61 os::scaleHapticData(&mBuffer[0], TEST_BUFFER_LENGTH, hapticScale, limit);
62 }
63
64 float mBuffer[TEST_BUFFER_LENGTH];
65 };
66
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestLegacyScaleMute,REQUIRES_FLAGS_DISABLED (ACONFIG_FLAG (FLAG_NS,fix_audio_coupled_haptics_scaling),ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))67 TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestLegacyScaleMute,
68 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling),
69 ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
70 float expected[TEST_BUFFER_LENGTH];
71 std::fill(std::begin(expected), std::end(expected), 0);
72
73 scaleBuffer(HapticLevel::MUTE);
74 EXPECT_FLOATS_NEARLY_EQ(expected, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
75 }
76
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestFixedScaleMute,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,fix_audio_coupled_haptics_scaling)),REQUIRES_FLAGS_DISABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))77 TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestFixedScaleMute,
78 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling)),
79 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
80 float expected[TEST_BUFFER_LENGTH];
81 std::fill(std::begin(expected), std::end(expected), 0);
82
83 scaleBuffer(HapticLevel::MUTE);
84 EXPECT_FLOATS_NEARLY_EQ(expected, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
85 }
86
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestScaleV2Mute,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))87 TEST_F_WITH_FLAGS(
88 ExternalVibrationUtilsTest, TestScaleV2Mute,
89 // Value of fix_audio_coupled_haptics_scaling is not important, should work with either
90 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
91 float expected[TEST_BUFFER_LENGTH];
92 std::fill(std::begin(expected), std::end(expected), 0);
93
94 scaleBuffer(HapticLevel::MUTE);
95 EXPECT_FLOATS_NEARLY_EQ(expected, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
96 }
97
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestLegacyScaleNone,REQUIRES_FLAGS_DISABLED (ACONFIG_FLAG (FLAG_NS,fix_audio_coupled_haptics_scaling),ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))98 TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestLegacyScaleNone,
99 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling),
100 ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
101 float expected[TEST_BUFFER_LENGTH];
102 std::copy(std::begin(TEST_BUFFER), std::end(TEST_BUFFER), std::begin(expected));
103
104 scaleBuffer(HapticLevel::NONE);
105 EXPECT_FLOATS_NEARLY_EQ(expected, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
106 }
107
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestFixedScaleNone,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,fix_audio_coupled_haptics_scaling)),REQUIRES_FLAGS_DISABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))108 TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestFixedScaleNone,
109 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling)),
110 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
111 float expected[TEST_BUFFER_LENGTH];
112 std::copy(std::begin(TEST_BUFFER), std::end(TEST_BUFFER), std::begin(expected));
113
114 scaleBuffer(HapticLevel::NONE);
115 EXPECT_FLOATS_NEARLY_EQ(expected, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
116 }
117
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestScaleV2None,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))118 TEST_F_WITH_FLAGS(
119 ExternalVibrationUtilsTest, TestScaleV2None,
120 // Value of fix_audio_coupled_haptics_scaling is not important, should work with either
121 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
122 float expected[TEST_BUFFER_LENGTH];
123 std::copy(std::begin(TEST_BUFFER), std::end(TEST_BUFFER), std::begin(expected));
124
125 scaleBuffer(HapticLevel::NONE);
126 EXPECT_FLOATS_NEARLY_EQ(expected, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
127 }
128
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestLegacyScaleToHapticLevel,REQUIRES_FLAGS_DISABLED (ACONFIG_FLAG (FLAG_NS,fix_audio_coupled_haptics_scaling),ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))129 TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestLegacyScaleToHapticLevel,
130 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling),
131 ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
132 float expectedVeryHigh[TEST_BUFFER_LENGTH] = { 1, -1, 0.84f, -0.66f };
133 scaleBuffer(HapticLevel::VERY_HIGH);
134 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
135
136 float expectedHigh[TEST_BUFFER_LENGTH] = { 1, -1, 0.7f, -0.44f };
137 scaleBuffer(HapticLevel::HIGH);
138 EXPECT_FLOATS_NEARLY_EQ(expectedHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
139
140 float expectedLow[TEST_BUFFER_LENGTH] = { 0.75f, -0.75f, 0.26f, -0.06f };
141 scaleBuffer(HapticLevel::LOW);
142 EXPECT_FLOATS_NEARLY_EQ(expectedLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
143
144 float expectedVeryLow[TEST_BUFFER_LENGTH] = { 0.66f, -0.66f, 0.16f, -0.02f };
145 scaleBuffer(HapticLevel::VERY_LOW);
146 EXPECT_FLOATS_NEARLY_EQ(expectedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
147 }
148
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestFixedScaleToHapticLevel,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,fix_audio_coupled_haptics_scaling)),REQUIRES_FLAGS_DISABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))149 TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestFixedScaleToHapticLevel,
150 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling)),
151 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
152 float expectedVeryHigh[TEST_BUFFER_LENGTH] = { 1, -1, 0.79f, -0.39f };
153 scaleBuffer(HapticLevel::VERY_HIGH);
154 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
155
156 float expectedHigh[TEST_BUFFER_LENGTH] = { 1, -1, 0.62f, -0.27f };
157 scaleBuffer(HapticLevel::HIGH);
158 EXPECT_FLOATS_NEARLY_EQ(expectedHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
159
160 float expectedLow[TEST_BUFFER_LENGTH] = { 0.70f, -0.70f, 0.35f, -0.14f };
161 scaleBuffer(HapticLevel::LOW);
162 EXPECT_FLOATS_NEARLY_EQ(expectedLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
163
164 float expectedVeryLow[TEST_BUFFER_LENGTH] = { 0.45f, -0.45f, 0.22f, -0.09f };
165 scaleBuffer(HapticLevel::VERY_LOW);
166 EXPECT_FLOATS_NEARLY_EQ(expectedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
167 }
168
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestScaleV2ToHapticLevel,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))169 TEST_F_WITH_FLAGS(
170 ExternalVibrationUtilsTest, TestScaleV2ToHapticLevel,
171 // Value of fix_audio_coupled_haptics_scaling is not important, should work with either
172 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
173 float expectedVeryHigh[TEST_BUFFER_LENGTH] = { 1, -1, 0.8f, -0.38f };
174 scaleBuffer(HapticLevel::VERY_HIGH);
175 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
176
177 float expectedHigh[TEST_BUFFER_LENGTH] = { 1, -1, 0.63f, -0.27f };
178 scaleBuffer(HapticLevel::HIGH);
179 EXPECT_FLOATS_NEARLY_EQ(expectedHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
180
181 float expectedLow[TEST_BUFFER_LENGTH] = { 0.71f, -0.71f, 0.35f, -0.14f };
182 scaleBuffer(HapticLevel::LOW);
183 EXPECT_FLOATS_NEARLY_EQ(expectedLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
184
185 float expectedVeryLow[TEST_BUFFER_LENGTH] = { 0.51f, -0.51f, 0.25f, -0.1f };
186 scaleBuffer(HapticLevel::VERY_LOW);
187 EXPECT_FLOATS_NEARLY_EQ(expectedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
188 }
189
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestScaleV2ToScaleFactorUndefinedUsesHapticLevel,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))190 TEST_F_WITH_FLAGS(
191 ExternalVibrationUtilsTest, TestScaleV2ToScaleFactorUndefinedUsesHapticLevel,
192 // Value of fix_audio_coupled_haptics_scaling is not important, should work with either
193 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
194 constexpr float adaptiveScaleNone = 1.0f;
195 float expectedVeryHigh[TEST_BUFFER_LENGTH] = {1, -1, 0.8f, -0.38f};
196 scaleBuffer(HapticScale(HapticLevel::VERY_HIGH, -1.0f /* scaleFactor */, adaptiveScaleNone));
197 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
198 }
199
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestScaleV2ToScaleFactorIgnoresLevel,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))200 TEST_F_WITH_FLAGS(
201 ExternalVibrationUtilsTest, TestScaleV2ToScaleFactorIgnoresLevel,
202 // Value of fix_audio_coupled_haptics_scaling is not important, should work with either
203 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
204 constexpr float adaptiveScaleNone = 1.0f;
205
206 float expectedVeryHigh[TEST_BUFFER_LENGTH] = { 1, -1, 1, -0.55f };
207 scaleBuffer(HapticScale(HapticLevel::LOW, 3.0f /* scaleFactor */, adaptiveScaleNone));
208 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
209
210 float expectedHigh[TEST_BUFFER_LENGTH] = { 1, -1, 0.66f, -0.29f };
211 scaleBuffer(HapticScale(HapticLevel::LOW, 1.5f /* scaleFactor */, adaptiveScaleNone));
212 EXPECT_FLOATS_NEARLY_EQ(expectedHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
213
214 float expectedLow[TEST_BUFFER_LENGTH] = { 0.8f, -0.8f, 0.4f, -0.16f };
215 scaleBuffer(HapticScale(HapticLevel::HIGH, 0.8f /* scaleFactor */, adaptiveScaleNone));
216 EXPECT_FLOATS_NEARLY_EQ(expectedLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
217
218 float expectedVeryLow[TEST_BUFFER_LENGTH] = { 0.4f, -0.4f, 0.2f, -0.08f };
219 scaleBuffer(HapticScale(HapticLevel::HIGH, 0.4f /* scaleFactor */, adaptiveScaleNone));
220 EXPECT_FLOATS_NEARLY_EQ(expectedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
221 }
222
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestAdaptiveScaleFactorUndefinedIsIgnoredLegacyScale,REQUIRES_FLAGS_DISABLED (ACONFIG_FLAG (FLAG_NS,fix_audio_coupled_haptics_scaling),ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))223 TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestAdaptiveScaleFactorUndefinedIsIgnoredLegacyScale,
224 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling),
225 ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
226 float expectedVeryHigh[TEST_BUFFER_LENGTH] = {1, -1, 0.79f, -0.39f};
227 scaleBuffer(HapticLevel::VERY_HIGH, -1.0f /* adaptiveScaleFactor */);
228 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
229 }
230
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestAdaptiveScaleFactorAppliedAfterLegacyScale,REQUIRES_FLAGS_DISABLED (ACONFIG_FLAG (FLAG_NS,fix_audio_coupled_haptics_scaling),ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))231 TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestAdaptiveScaleFactorAppliedAfterLegacyScale,
232 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling),
233 ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
234 // Adaptive scale mutes vibration
235 float expectedMuted[TEST_BUFFER_LENGTH];
236 std::fill(std::begin(expectedMuted), std::end(expectedMuted), 0);
237 scaleBuffer(HapticLevel::VERY_HIGH, 0.0f /* adaptiveScaleFactor */);
238 EXPECT_FLOATS_NEARLY_EQ(expectedMuted, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
239
240 // Haptic level scale up then adaptive scale down
241 float expectedVeryHigh[TEST_BUFFER_LENGTH] = { 0.2, -0.2, 0.16f, -0.13f };
242 scaleBuffer(HapticLevel::VERY_HIGH, 0.2f /* adaptiveScaleFactor */);
243 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
244
245 // Haptic level scale up then adaptive scale up
246 float expectedHigh[TEST_BUFFER_LENGTH] = { 1.5f, -1.5f, 1.06f, -0.67f };
247 scaleBuffer(HapticLevel::HIGH, 1.5f /* adaptiveScaleFactor */);
248 EXPECT_FLOATS_NEARLY_EQ(expectedHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
249
250 // Haptic level scale down then adaptive scale down
251 float expectedLow[TEST_BUFFER_LENGTH] = { 0.45f, -0.45f, 0.15f, -0.04f };
252 scaleBuffer(HapticLevel::LOW, 0.6f /* adaptiveScaleFactor */);
253 EXPECT_FLOATS_NEARLY_EQ(expectedLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
254
255 // Haptic level scale down then adaptive scale up
256 float expectedVeryLow[TEST_BUFFER_LENGTH] = { 1.33f, -1.33f, 0.33f, -0.05f };
257 scaleBuffer(HapticLevel::VERY_LOW, 2 /* adaptiveScaleFactor */);
258 EXPECT_FLOATS_NEARLY_EQ(expectedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
259 }
260
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestAdaptiveScaleFactorUndefinedIgnoredFixedScale,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,fix_audio_coupled_haptics_scaling)),REQUIRES_FLAGS_DISABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))261 TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestAdaptiveScaleFactorUndefinedIgnoredFixedScale,
262 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling)),
263 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
264 float expectedVeryHigh[TEST_BUFFER_LENGTH] = {1, -1, 0.79f, -0.39f};
265 scaleBuffer(HapticLevel::VERY_HIGH, -1.0f /* adaptiveScaleFactor */);
266 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
267 }
268
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestAdaptiveScaleFactorAppliedAfterFixedScale,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,fix_audio_coupled_haptics_scaling)),REQUIRES_FLAGS_DISABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))269 TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestAdaptiveScaleFactorAppliedAfterFixedScale,
270 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling)),
271 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
272 // Adaptive scale mutes vibration
273 float expectedMuted[TEST_BUFFER_LENGTH];
274 std::fill(std::begin(expectedMuted), std::end(expectedMuted), 0);
275 scaleBuffer(HapticLevel::VERY_HIGH, 0.0f /* adaptiveScaleFactor */);
276 EXPECT_FLOATS_NEARLY_EQ(expectedMuted, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
277
278 // Haptic level scale up then adaptive scale down
279 float expectedVeryHigh[TEST_BUFFER_LENGTH] = { 0.2, -0.2, 0.16f, -0.07f };
280 scaleBuffer(HapticLevel::VERY_HIGH, 0.2f /* adaptiveScaleFactor */);
281 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
282
283 // Haptic level scale up then adaptive scale up
284 float expectedHigh[TEST_BUFFER_LENGTH] = { 1.5f, -1.5f, 0.93f, -0.41f };
285 scaleBuffer(HapticLevel::HIGH, 1.5f /* adaptiveScaleFactor */);
286 EXPECT_FLOATS_NEARLY_EQ(expectedHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
287
288 // Haptic level scale down then adaptive scale down
289 float expectedLow[TEST_BUFFER_LENGTH] = { 0.42f, -0.42f, 0.21f, -0.08f };
290 scaleBuffer(HapticLevel::LOW, 0.6f /* adaptiveScaleFactor */);
291 EXPECT_FLOATS_NEARLY_EQ(expectedLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
292
293 // Haptic level scale down then adaptive scale up
294 float expectedVeryLow[TEST_BUFFER_LENGTH] = { 0.91f, -0.91f, 0.45f, -0.18f };
295 scaleBuffer(HapticLevel::VERY_LOW, 2 /* adaptiveScaleFactor */);
296 EXPECT_FLOATS_NEARLY_EQ(expectedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
297 }
298
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestAdaptiveScaleFactorUndefinedIgnoredScaleV2,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))299 TEST_F_WITH_FLAGS(
300 ExternalVibrationUtilsTest, TestAdaptiveScaleFactorUndefinedIgnoredScaleV2,
301 // Value of fix_audio_coupled_haptics_scaling is not important, should work with either
302 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
303 float expectedVeryHigh[TEST_BUFFER_LENGTH] = {1, -1, 0.8f, -0.38f};
304 scaleBuffer(HapticLevel::VERY_HIGH, -1.0f /* adaptiveScaleFactor */);
305 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
306 }
307
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestAdaptiveScaleFactorAppliedAfterScaleV2,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))308 TEST_F_WITH_FLAGS(
309 ExternalVibrationUtilsTest, TestAdaptiveScaleFactorAppliedAfterScaleV2,
310 // Value of fix_audio_coupled_haptics_scaling is not important, should work with either
311 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
312 // Adaptive scale mutes vibration
313 float expectedMuted[TEST_BUFFER_LENGTH];
314 std::fill(std::begin(expectedMuted), std::end(expectedMuted), 0);
315 scaleBuffer(HapticLevel::VERY_HIGH, 0.0f /* adaptiveScaleFactor */);
316 EXPECT_FLOATS_NEARLY_EQ(expectedMuted, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
317
318 // Haptic level scale up then adaptive scale down
319 float expectedVeryHigh[TEST_BUFFER_LENGTH] = { 0.2, -0.2, 0.15f, -0.07f };
320 scaleBuffer(HapticLevel::VERY_HIGH, 0.2f /* adaptiveScaleFactor */);
321 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
322
323 // Haptic level scale up then adaptive scale up
324 float expectedHigh[TEST_BUFFER_LENGTH] = { 1.5f, -1.5f, 0.95f, -0.41f };
325 scaleBuffer(HapticLevel::HIGH, 1.5f /* adaptiveScaleFactor */);
326 EXPECT_FLOATS_NEARLY_EQ(expectedHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
327
328 // Haptic level scale down then adaptive scale down
329 float expectedLow[TEST_BUFFER_LENGTH] = { 0.42f, -0.42f, 0.21f, -0.08f };
330 scaleBuffer(HapticLevel::LOW, 0.6f /* adaptiveScaleFactor */);
331 EXPECT_FLOATS_NEARLY_EQ(expectedLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
332
333 // Haptic level scale down then adaptive scale up
334 float expectedVeryLow[TEST_BUFFER_LENGTH] = { 1.02f, -1.02f, 0.51f, -0.2f };
335 scaleBuffer(HapticLevel::VERY_LOW, 2 /* adaptiveScaleFactor */);
336 EXPECT_FLOATS_NEARLY_EQ(expectedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
337 }
338
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestLimitAppliedAfterLegacyScale,REQUIRES_FLAGS_DISABLED (ACONFIG_FLAG (FLAG_NS,fix_audio_coupled_haptics_scaling),ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))339 TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestLimitAppliedAfterLegacyScale,
340 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling),
341 ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
342 // Scaled = { 0.2, -0.2, 0.16f, -0.13f };
343 float expectedClippedVeryHigh[TEST_BUFFER_LENGTH] = { 0.15f, -0.15f, 0.15f, -0.13f };
344 scaleBuffer(HapticLevel::VERY_HIGH, 0.2f /* adaptiveScaleFactor */, 0.15f /* limit */);
345 EXPECT_FLOATS_NEARLY_EQ(expectedClippedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
346
347 // Scaled = { 1, -1, 0.5f, -0.2f };
348 float expectedClippedVeryLow[TEST_BUFFER_LENGTH] = { 0.7f, -0.7f, 0.33f, -0.05f };
349 scaleBuffer(HapticLevel::VERY_LOW, 2 /* adaptiveScaleFactor */, 0.7f /* limit */);
350 EXPECT_FLOATS_NEARLY_EQ(expectedClippedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
351 }
352
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestLimitAppliedAfterFixedScale,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,fix_audio_coupled_haptics_scaling)),REQUIRES_FLAGS_DISABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))353 TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestLimitAppliedAfterFixedScale,
354 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling)),
355 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
356 // Scaled = { 0.2, -0.2, 0.16f, -0.13f };
357 float expectedClippedVeryHigh[TEST_BUFFER_LENGTH] = { 0.15f, -0.15f, 0.15f, -0.07f };
358 scaleBuffer(HapticLevel::VERY_HIGH, 0.2f /* adaptiveScaleFactor */, 0.15f /* limit */);
359 EXPECT_FLOATS_NEARLY_EQ(expectedClippedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
360
361 // Scaled = { 1, -1, 0.5f, -0.2f };
362 float expectedClippedVeryLow[TEST_BUFFER_LENGTH] = { 0.7f, -0.7f, 0.45f, -0.18f };
363 scaleBuffer(HapticLevel::VERY_LOW, 2 /* adaptiveScaleFactor */, 0.7f /* limit */);
364 EXPECT_FLOATS_NEARLY_EQ(expectedClippedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
365 }
366
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestLimitAppliedAfterScaleV2,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))367 TEST_F_WITH_FLAGS(
368 ExternalVibrationUtilsTest, TestLimitAppliedAfterScaleV2,
369 // Value of fix_audio_coupled_haptics_scaling is not important, should work with either
370 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
371 // Scaled = { 0.2, -0.2, 0.15f, -0.07f };
372 float expectedClippedVeryHigh[TEST_BUFFER_LENGTH] = { 0.15f, -0.15f, 0.15f, -0.07f };
373 scaleBuffer(HapticLevel::VERY_HIGH, 0.2f /* adaptiveScaleFactor */, 0.15f /* limit */);
374 EXPECT_FLOATS_NEARLY_EQ(expectedClippedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
375
376 // Scaled = { 1.02f, -1.02f, 0.51f, -0.2f }
377 float expectedClippedVeryLow[TEST_BUFFER_LENGTH] = { 0.7f, -0.7f, 0.51f, -0.2f };
378 scaleBuffer(HapticLevel::VERY_LOW, 2 /* adaptiveScaleFactor */, 0.7f /* limit */);
379 EXPECT_FLOATS_NEARLY_EQ(expectedClippedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
380 }
381