blob: f5c4fc547c87d1d6c6b6377a4b57b13ddee2317f [file] [log] [blame]
Lais Andrade4d51f6c2020-03-25 10:58:31 +00001/*
2 * Copyright (C) 2020 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#define LOG_TAG "PowerHalWrapperAidlTest"
18
Xiang Wang99f6f3c2023-05-22 13:12:16 -070019#include <aidl/android/hardware/power/Boost.h>
20#include <aidl/android/hardware/power/IPowerHintSession.h>
21#include <aidl/android/hardware/power/Mode.h>
Lais Andrade4d51f6c2020-03-25 10:58:31 +000022#include <binder/IServiceManager.h>
Lais Andrade4d51f6c2020-03-25 10:58:31 +000023#include <gmock/gmock.h>
24#include <gtest/gtest.h>
Lais Andrade4d51f6c2020-03-25 10:58:31 +000025#include <powermanager/PowerHalWrapper.h>
Lais Andradeb59a9b52020-05-07 17:23:42 +010026#include <utils/Log.h>
Lais Andrade4d51f6c2020-03-25 10:58:31 +000027
Jimmy Shiu0b264bb2021-03-03 00:30:50 +080028#include <unistd.h>
Lais Andrade4d51f6c2020-03-25 10:58:31 +000029#include <thread>
Lais Andrade4d51f6c2020-03-25 10:58:31 +000030
Xiang Wang99f6f3c2023-05-22 13:12:16 -070031using aidl::android::hardware::power::Boost;
Matt Buckley104f53a2023-12-14 00:19:20 +000032using aidl::android::hardware::power::ChannelConfig;
Xiang Wang99f6f3c2023-05-22 13:12:16 -070033using aidl::android::hardware::power::IPower;
34using aidl::android::hardware::power::IPowerHintSession;
35using aidl::android::hardware::power::Mode;
Matt Buckley104f53a2023-12-14 00:19:20 +000036using aidl::android::hardware::power::SessionConfig;
37using aidl::android::hardware::power::SessionTag;
Matt Buckley666659a2024-10-28 18:41:40 +000038using aidl::android::hardware::power::SupportInfo;
Lais Andrade4d51f6c2020-03-25 10:58:31 +000039using android::binder::Status;
Lais Andrade4d51f6c2020-03-25 10:58:31 +000040
41using namespace android;
Lais Andradeb59a9b52020-05-07 17:23:42 +010042using namespace android::power;
Lais Andrade4d51f6c2020-03-25 10:58:31 +000043using namespace std::chrono_literals;
44using namespace testing;
45
46// -------------------------------------------------------------------------------------------------
47
48class MockIPower : public IPower {
49public:
Xiang Wang99f6f3c2023-05-22 13:12:16 -070050 MockIPower() = default;
51
52 MOCK_METHOD(ndk::ScopedAStatus, isBoostSupported, (Boost boost, bool* ret), (override));
53 MOCK_METHOD(ndk::ScopedAStatus, setBoost, (Boost boost, int32_t durationMs), (override));
54 MOCK_METHOD(ndk::ScopedAStatus, isModeSupported, (Mode mode, bool* ret), (override));
55 MOCK_METHOD(ndk::ScopedAStatus, setMode, (Mode mode, bool enabled), (override));
56 MOCK_METHOD(ndk::ScopedAStatus, createHintSession,
Jimmy Shiu0b264bb2021-03-03 00:30:50 +080057 (int32_t tgid, int32_t uid, const std::vector<int32_t>& threadIds,
Xiang Wang99f6f3c2023-05-22 13:12:16 -070058 int64_t durationNanos, std::shared_ptr<IPowerHintSession>* session),
Jimmy Shiu0b264bb2021-03-03 00:30:50 +080059 (override));
Matt Buckley104f53a2023-12-14 00:19:20 +000060 MOCK_METHOD(ndk::ScopedAStatus, createHintSessionWithConfig,
61 (int32_t tgid, int32_t uid, const std::vector<int32_t>& threadIds,
62 int64_t durationNanos, SessionTag tag, SessionConfig* config,
63 std::shared_ptr<IPowerHintSession>* _aidl_return),
64 (override));
65 MOCK_METHOD(ndk::ScopedAStatus, getSessionChannel,
66 (int32_t tgid, int32_t uid, ChannelConfig* _aidl_return), (override));
67 MOCK_METHOD(ndk::ScopedAStatus, closeSessionChannel, (int32_t tgid, int32_t uid), (override));
Xiang Wang99f6f3c2023-05-22 13:12:16 -070068 MOCK_METHOD(ndk::ScopedAStatus, getHintSessionPreferredRate, (int64_t * rate), (override));
Matt Buckley666659a2024-10-28 18:41:40 +000069 MOCK_METHOD(ndk::ScopedAStatus, getSupportInfo, (SupportInfo * _aidl_return), (override));
Xiang Wang99f6f3c2023-05-22 13:12:16 -070070 MOCK_METHOD(ndk::ScopedAStatus, getInterfaceVersion, (int32_t * version), (override));
71 MOCK_METHOD(ndk::ScopedAStatus, getInterfaceHash, (std::string * hash), (override));
72 MOCK_METHOD(ndk::SpAIBinder, asBinder, (), (override));
73 MOCK_METHOD(bool, isRemote, (), (override));
Lais Andrade4d51f6c2020-03-25 10:58:31 +000074};
75
76// -------------------------------------------------------------------------------------------------
77
78class PowerHalWrapperAidlTest : public Test {
79public:
80 void SetUp() override;
81
82protected:
Lais Andradeb59a9b52020-05-07 17:23:42 +010083 std::unique_ptr<HalWrapper> mWrapper = nullptr;
Xiang Wang99f6f3c2023-05-22 13:12:16 -070084 std::shared_ptr<StrictMock<MockIPower>> mMockHal = nullptr;
Lais Andrade4d51f6c2020-03-25 10:58:31 +000085};
86
87// -------------------------------------------------------------------------------------------------
88
89void PowerHalWrapperAidlTest::SetUp() {
Xiang Wang99f6f3c2023-05-22 13:12:16 -070090 mMockHal = ndk::SharedRefBase::make<StrictMock<MockIPower>>();
Matt Buckley6c18e6d2024-02-07 23:39:50 +000091 EXPECT_CALL(*mMockHal, getInterfaceVersion(_)).WillRepeatedly(([](int32_t* ret) {
92 *ret = 5;
93 return ndk::ScopedAStatus::ok();
94 }));
Lais Andradeb59a9b52020-05-07 17:23:42 +010095 mWrapper = std::make_unique<AidlHalWrapper>(mMockHal);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +080096 ASSERT_NE(nullptr, mWrapper);
Lais Andrade4d51f6c2020-03-25 10:58:31 +000097}
98
99// -------------------------------------------------------------------------------------------------
100
101TEST_F(PowerHalWrapperAidlTest, TestSetBoostSuccessful) {
102 {
103 InSequence seq;
104 EXPECT_CALL(*mMockHal.get(), isBoostSupported(Eq(Boost::DISPLAY_UPDATE_IMMINENT), _))
Lais Andradeb59a9b52020-05-07 17:23:42 +0100105 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700106 .WillOnce(DoAll(SetArgPointee<1>(true),
107 Return(testing::ByMove(ndk::ScopedAStatus::ok()))));
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000108 EXPECT_CALL(*mMockHal.get(), setBoost(Eq(Boost::DISPLAY_UPDATE_IMMINENT), Eq(100)))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700109 .Times(Exactly(1))
110 .WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::ok())));
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000111 }
112
113 auto result = mWrapper->setBoost(Boost::DISPLAY_UPDATE_IMMINENT, 100);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800114 ASSERT_TRUE(result.isOk());
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000115}
116
117TEST_F(PowerHalWrapperAidlTest, TestSetBoostFailed) {
118 {
119 InSequence seq;
120 EXPECT_CALL(*mMockHal.get(), isBoostSupported(Eq(Boost::INTERACTION), _))
Lais Andradeb59a9b52020-05-07 17:23:42 +0100121 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700122 .WillOnce(DoAll(SetArgPointee<1>(true),
123 Return(testing::ByMove(ndk::ScopedAStatus::ok()))));
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000124 EXPECT_CALL(*mMockHal.get(), setBoost(Eq(Boost::INTERACTION), Eq(100)))
Lais Andradeb59a9b52020-05-07 17:23:42 +0100125 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700126 .WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::fromExceptionCode(-1))));
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000127 EXPECT_CALL(*mMockHal.get(), isBoostSupported(Eq(Boost::DISPLAY_UPDATE_IMMINENT), _))
Lais Andradeb59a9b52020-05-07 17:23:42 +0100128 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700129 .WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::fromExceptionCode(-1))));
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000130 }
131
132 auto result = mWrapper->setBoost(Boost::INTERACTION, 100);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800133 ASSERT_TRUE(result.isFailed());
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000134 result = mWrapper->setBoost(Boost::DISPLAY_UPDATE_IMMINENT, 1000);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800135 ASSERT_TRUE(result.isFailed());
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000136}
137
138TEST_F(PowerHalWrapperAidlTest, TestSetBoostUnsupported) {
Matt Buckley6c18e6d2024-02-07 23:39:50 +0000139 EXPECT_CALL(*mMockHal.get(), isBoostSupported(_, _))
140 .Times(Exactly(2))
141 .WillRepeatedly([](Boost, bool* ret) {
142 *ret = false;
143 return ndk::ScopedAStatus::ok();
144 });
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000145
146 auto result = mWrapper->setBoost(Boost::INTERACTION, 1000);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800147 ASSERT_TRUE(result.isUnsupported());
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000148 result = mWrapper->setBoost(Boost::CAMERA_SHOT, 10);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800149 ASSERT_TRUE(result.isUnsupported());
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000150}
151
152TEST_F(PowerHalWrapperAidlTest, TestSetBoostMultiThreadCheckSupportedOnlyOnce) {
153 {
154 InSequence seq;
155 EXPECT_CALL(*mMockHal.get(), isBoostSupported(Eq(Boost::INTERACTION), _))
Lais Andradeb59a9b52020-05-07 17:23:42 +0100156 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700157 .WillOnce(DoAll(SetArgPointee<1>(true),
158 Return(testing::ByMove(ndk::ScopedAStatus::ok()))));
159 auto& exp = EXPECT_CALL(*mMockHal.get(), setBoost(Eq(Boost::INTERACTION), Eq(100)))
160 .Times(Exactly(10));
161 for (int i = 0; i < 10; i++) {
162 exp.WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::ok())));
163 }
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000164 }
165
166 std::vector<std::thread> threads;
167 for (int i = 0; i < 10; i++) {
168 threads.push_back(std::thread([&]() {
169 auto result = mWrapper->setBoost(Boost::INTERACTION, 100);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800170 ASSERT_TRUE(result.isOk());
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000171 }));
172 }
173 std::for_each(threads.begin(), threads.end(), [](std::thread& t) { t.join(); });
174}
175
176TEST_F(PowerHalWrapperAidlTest, TestSetModeSuccessful) {
177 {
178 InSequence seq;
179 EXPECT_CALL(*mMockHal.get(), isModeSupported(Eq(Mode::DISPLAY_INACTIVE), _))
Lais Andradeb59a9b52020-05-07 17:23:42 +0100180 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700181 .WillOnce(DoAll(SetArgPointee<1>(true),
182 Return(testing::ByMove(ndk::ScopedAStatus::ok()))));
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000183 EXPECT_CALL(*mMockHal.get(), setMode(Eq(Mode::DISPLAY_INACTIVE), Eq(false)))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700184 .Times(Exactly(1))
185 .WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::ok())));
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000186 }
187
188 auto result = mWrapper->setMode(Mode::DISPLAY_INACTIVE, false);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800189 ASSERT_TRUE(result.isOk());
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000190}
191
192TEST_F(PowerHalWrapperAidlTest, TestSetModeFailed) {
193 {
194 InSequence seq;
195 EXPECT_CALL(*mMockHal.get(), isModeSupported(Eq(Mode::LAUNCH), _))
Lais Andradeb59a9b52020-05-07 17:23:42 +0100196 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700197 .WillOnce(DoAll(SetArgPointee<1>(true),
198 Return(testing::ByMove(ndk::ScopedAStatus::ok()))));
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000199 EXPECT_CALL(*mMockHal.get(), setMode(Eq(Mode::LAUNCH), Eq(true)))
Lais Andradeb59a9b52020-05-07 17:23:42 +0100200 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700201 .WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::fromExceptionCode(-1))));
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000202 EXPECT_CALL(*mMockHal.get(), isModeSupported(Eq(Mode::DISPLAY_INACTIVE), _))
Lais Andradeb59a9b52020-05-07 17:23:42 +0100203 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700204 .WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::fromExceptionCode(-1))));
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000205 }
206
207 auto result = mWrapper->setMode(Mode::LAUNCH, true);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800208 ASSERT_TRUE(result.isFailed());
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000209 result = mWrapper->setMode(Mode::DISPLAY_INACTIVE, false);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800210 ASSERT_TRUE(result.isFailed());
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000211}
212
213TEST_F(PowerHalWrapperAidlTest, TestSetModeUnsupported) {
214 EXPECT_CALL(*mMockHal.get(), isModeSupported(Eq(Mode::LAUNCH), _))
Lais Andradeb59a9b52020-05-07 17:23:42 +0100215 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700216 .WillOnce(DoAll(SetArgPointee<1>(false),
217 Return(testing::ByMove(ndk::ScopedAStatus::ok()))));
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000218
219 auto result = mWrapper->setMode(Mode::LAUNCH, true);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800220 ASSERT_TRUE(result.isUnsupported());
Jim Blackler559361b2021-11-29 00:07:39 +0000221
222 EXPECT_CALL(*mMockHal.get(), isModeSupported(Eq(Mode::CAMERA_STREAMING_HIGH), _))
223 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700224 .WillOnce(DoAll(SetArgPointee<1>(false),
225 Return(testing::ByMove(ndk::ScopedAStatus::ok()))));
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000226 result = mWrapper->setMode(Mode::CAMERA_STREAMING_HIGH, true);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800227 ASSERT_TRUE(result.isUnsupported());
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000228}
229
230TEST_F(PowerHalWrapperAidlTest, TestSetModeMultiThreadCheckSupportedOnlyOnce) {
231 {
232 InSequence seq;
233 EXPECT_CALL(*mMockHal.get(), isModeSupported(Eq(Mode::LAUNCH), _))
Lais Andradeb59a9b52020-05-07 17:23:42 +0100234 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700235 .WillOnce(DoAll(SetArgPointee<1>(true),
236 Return(testing::ByMove(ndk::ScopedAStatus::ok()))));
237 auto& exp = EXPECT_CALL(*mMockHal.get(), setMode(Eq(Mode::LAUNCH), Eq(false)))
238 .Times(Exactly(10));
239 for (int i = 0; i < 10; i++) {
240 exp.WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::ok())));
241 }
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000242 }
243
244 std::vector<std::thread> threads;
245 for (int i = 0; i < 10; i++) {
246 threads.push_back(std::thread([&]() {
247 auto result = mWrapper->setMode(Mode::LAUNCH, false);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800248 ASSERT_TRUE(result.isOk());
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000249 }));
250 }
251 std::for_each(threads.begin(), threads.end(), [](std::thread& t) { t.join(); });
252}
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800253
254TEST_F(PowerHalWrapperAidlTest, TestCreateHintSessionSuccessful) {
255 std::vector<int> threadIds{gettid()};
256 int32_t tgid = 999;
257 int32_t uid = 1001;
258 int64_t durationNanos = 16666666L;
259 EXPECT_CALL(*mMockHal.get(),
260 createHintSession(Eq(tgid), Eq(uid), Eq(threadIds), Eq(durationNanos), _))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700261 .Times(Exactly(1))
262 .WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::ok())));
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800263 auto result = mWrapper->createHintSession(tgid, uid, threadIds, durationNanos);
264 ASSERT_TRUE(result.isOk());
265}
266
Matt Buckleydb4192a2023-12-21 20:00:32 +0000267TEST_F(PowerHalWrapperAidlTest, TestCreateHintSessionWithConfigSuccessful) {
268 std::vector<int> threadIds{gettid()};
269 int32_t tgid = 999;
270 int32_t uid = 1001;
271 int64_t durationNanos = 16666666L;
272 SessionTag tag = SessionTag::OTHER;
273 SessionConfig out;
274 EXPECT_CALL(*mMockHal.get(),
275 createHintSessionWithConfig(Eq(tgid), Eq(uid), Eq(threadIds), Eq(durationNanos),
276 Eq(tag), _, _))
277 .Times(Exactly(1))
278 .WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::ok())));
279 auto result =
280 mWrapper->createHintSessionWithConfig(tgid, uid, threadIds, durationNanos, tag, &out);
281 ASSERT_TRUE(result.isOk());
282}
283
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800284TEST_F(PowerHalWrapperAidlTest, TestCreateHintSessionFailed) {
285 int32_t tgid = 999;
286 int32_t uid = 1001;
287 std::vector<int> threadIds{};
288 int64_t durationNanos = 16666666L;
289 EXPECT_CALL(*mMockHal.get(),
290 createHintSession(Eq(tgid), Eq(uid), Eq(threadIds), Eq(durationNanos), _))
291 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700292 .WillOnce(Return(testing::ByMove(
293 ndk::ScopedAStatus::fromExceptionCode(Status::EX_ILLEGAL_ARGUMENT))));
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800294 auto result = mWrapper->createHintSession(tgid, uid, threadIds, durationNanos);
295 ASSERT_TRUE(result.isFailed());
296}
297
298TEST_F(PowerHalWrapperAidlTest, TestGetHintSessionPreferredRate) {
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700299 EXPECT_CALL(*mMockHal.get(), getHintSessionPreferredRate(_))
300 .Times(Exactly(1))
301 .WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::ok())));
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800302 auto result = mWrapper->getHintSessionPreferredRate();
303 ASSERT_TRUE(result.isOk());
304 int64_t rate = result.value();
305 ASSERT_GE(0, rate);
306}
Matt Buckleydb4192a2023-12-21 20:00:32 +0000307
308TEST_F(PowerHalWrapperAidlTest, TestSessionChannel) {
309 int32_t tgid = 999;
310 int32_t uid = 1001;
311 EXPECT_CALL(*mMockHal.get(), getSessionChannel(Eq(tgid), Eq(uid), _))
312 .Times(Exactly(1))
313 .WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::ok())));
314 EXPECT_CALL(*mMockHal.get(), closeSessionChannel(Eq(tgid), Eq(uid)))
315 .Times(Exactly(1))
316 .WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::ok())));
317 auto createResult = mWrapper->getSessionChannel(tgid, uid);
318 ASSERT_TRUE(createResult.isOk());
319 auto closeResult = mWrapper->closeSessionChannel(tgid, uid);
320 ASSERT_TRUE(closeResult.isOk());
321}
Matt Buckley6c18e6d2024-02-07 23:39:50 +0000322
323TEST_F(PowerHalWrapperAidlTest, TestCreateHintSessionWithConfigUnsupported) {
324 std::vector<int> threadIds{gettid()};
325 int32_t tgid = 999;
326 int32_t uid = 1001;
327 int64_t durationNanos = 16666666L;
328 SessionTag tag = SessionTag::OTHER;
329 SessionConfig out;
330 EXPECT_CALL(*mMockHal.get(),
331 createHintSessionWithConfig(Eq(tgid), Eq(uid), Eq(threadIds), Eq(durationNanos),
332 Eq(tag), _, _))
333 .Times(1)
334 .WillOnce(Return(testing::ByMove(
335 ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION))));
336 auto result =
337 mWrapper->createHintSessionWithConfig(tgid, uid, threadIds, durationNanos, tag, &out);
338 ASSERT_TRUE(result.isUnsupported());
339 Mock::VerifyAndClearExpectations(mMockHal.get());
340 EXPECT_CALL(*mMockHal.get(),
341 createHintSessionWithConfig(Eq(tgid), Eq(uid), Eq(threadIds), Eq(durationNanos),
342 Eq(tag), _, _))
343 .WillOnce(Return(
344 testing::ByMove(ndk::ScopedAStatus::fromStatus(STATUS_UNKNOWN_TRANSACTION))));
345 result = mWrapper->createHintSessionWithConfig(tgid, uid, threadIds, durationNanos, tag, &out);
346 ASSERT_TRUE(result.isUnsupported());
347}