Add manager controller to Android.bp
The vibrator manager controller introduced in a previous change was not
added to the build and test targets. Adding them now, with some fixed to
the header and cpp files.
Bug: 167946816
Test: atest libvibratorservice_test
Change-Id: I6601c50269b298aadc67fa96eea30733ac4a67c7
diff --git a/services/vibratorservice/Android.bp b/services/vibratorservice/Android.bp
index 75228d6..c18bf18 100644
--- a/services/vibratorservice/Android.bp
+++ b/services/vibratorservice/Android.bp
@@ -19,6 +19,7 @@
"VibratorCallbackScheduler.cpp",
"VibratorHalController.cpp",
"VibratorHalWrapper.cpp",
+ "VibratorManagerHalController.cpp",
"VibratorManagerHalWrapper.cpp",
],
diff --git a/services/vibratorservice/VibratorManagerHalController.cpp b/services/vibratorservice/VibratorManagerHalController.cpp
index b24e5c4..6bf6581 100644
--- a/services/vibratorservice/VibratorManagerHalController.cpp
+++ b/services/vibratorservice/VibratorManagerHalController.cpp
@@ -26,13 +26,13 @@
namespace vibrator {
-std::shared_ptr<ManagerHalWrapper> connectHal(std::shared_ptr<CallbackScheduler> scheduler) {
+std::shared_ptr<ManagerHalWrapper> connectManagerHal(std::shared_ptr<CallbackScheduler> scheduler) {
static bool gHalExists = true;
if (gHalExists) {
sp<Aidl::IVibratorManager> hal = waitForVintfService<Aidl::IVibratorManager>();
if (hal) {
ALOGV("Successfully connected to VibratorManager HAL AIDL service.");
- return std::make_shared<AidlManagerHalWrapper>(std::move(scheduler), aidlHal);
+ return std::make_shared<AidlManagerHalWrapper>(std::move(scheduler), hal);
}
}
@@ -80,12 +80,11 @@
// -------------------------------------------------------------------------------------------------
-bool ManagerHalController::init() {
+void ManagerHalController::init() {
std::lock_guard<std::mutex> lock(mConnectedHalMutex);
if (mConnectedHal == nullptr) {
mConnectedHal = mConnector(mCallbackScheduler);
}
- return mConnectedHal != nullptr;
}
HalResult<void> ManagerHalController::ping() {
diff --git a/services/vibratorservice/include/vibratorservice/VibratorManagerHalController.h b/services/vibratorservice/include/vibratorservice/VibratorManagerHalController.h
index cf82562..9168565 100644
--- a/services/vibratorservice/include/vibratorservice/VibratorManagerHalController.h
+++ b/services/vibratorservice/include/vibratorservice/VibratorManagerHalController.h
@@ -19,6 +19,7 @@
#include <android/hardware/vibrator/IVibratorManager.h>
#include <vibratorservice/VibratorHalController.h>
+#include <vibratorservice/VibratorManagerHalWrapper.h>
#include <unordered_map>
namespace android {
@@ -36,7 +37,7 @@
ManagerHalController()
: ManagerHalController(std::make_shared<CallbackScheduler>(), &connectManagerHal) {}
ManagerHalController(std::shared_ptr<CallbackScheduler> callbackScheduler, Connector connector)
- : mConnector(connector), mConnectedHal(nullptr) {}
+ : mConnector(connector), mCallbackScheduler(callbackScheduler), mConnectedHal(nullptr) {}
virtual ~ManagerHalController() = default;
/* Connects to the HAL service, possibly waiting for the registered service to
@@ -64,9 +65,10 @@
private:
Connector mConnector;
+ std::shared_ptr<CallbackScheduler> mCallbackScheduler;
std::mutex mConnectedHalMutex;
// Shared pointer to allow local copies to be used by different threads.
- std::shared_ptr<HalWrapper> mConnectedHal GUARDED_BY(mConnectedHalMutex);
+ std::shared_ptr<ManagerHalWrapper> mConnectedHal GUARDED_BY(mConnectedHalMutex);
template <typename T>
HalResult<T> processHalResult(HalResult<T> result, const char* functionName);
diff --git a/services/vibratorservice/test/Android.bp b/services/vibratorservice/test/Android.bp
index 6801f76..9af1b7b 100644
--- a/services/vibratorservice/test/Android.bp
+++ b/services/vibratorservice/test/Android.bp
@@ -23,6 +23,7 @@
"VibratorHalWrapperHidlV1_1Test.cpp",
"VibratorHalWrapperHidlV1_2Test.cpp",
"VibratorHalWrapperHidlV1_3Test.cpp",
+ "VibratorManagerHalControllerTest.cpp",
"VibratorManagerHalWrapperAidlTest.cpp",
"VibratorManagerHalWrapperLegacyTest.cpp",
],
diff --git a/services/vibratorservice/test/VibratorManagerHalControllerTest.cpp b/services/vibratorservice/test/VibratorManagerHalControllerTest.cpp
index 3b036ee..e5fbbae 100644
--- a/services/vibratorservice/test/VibratorManagerHalControllerTest.cpp
+++ b/services/vibratorservice/test/VibratorManagerHalControllerTest.cpp
@@ -22,22 +22,28 @@
#include <utils/Log.h>
-#include <vibratorservice/VibratorManagerHalWrapper.h>
+#include <vibratorservice/VibratorManagerHalController.h>
#include "test_utils.h"
+using android::vibrator::HalController;
+
using namespace android;
using namespace testing;
static constexpr int MAX_ATTEMPTS = 2;
+static const std::vector<int32_t> VIBRATOR_IDS = {1, 2};
+static constexpr int VIBRATOR_ID = 1;
class MockManagerHalWrapper : public vibrator::ManagerHalWrapper {
public:
+ MOCK_METHOD(void, tryReconnect, (), (override));
MOCK_METHOD(vibrator::HalResult<void>, ping, (), (override));
- MOCK_METHOD(vibrator::HalResult<int32_t>, getCapabilities, (), (override));
+ MOCK_METHOD(vibrator::HalResult<vibrator::ManagerCapabilities>, getCapabilities, (),
+ (override));
MOCK_METHOD(vibrator::HalResult<std::vector<int32_t>>, getVibratorIds, (), (override));
- MOCK_METHOD(vibrator::HalResult<std::shared_ptr<vibrator::HalController>>, getVibrator,
- (int32_t id), (override));
+ MOCK_METHOD(vibrator::HalResult<std::shared_ptr<HalController>>, getVibrator, (int32_t id),
+ (override));
MOCK_METHOD(vibrator::HalResult<void>, prepareSynced, (const std::vector<int32_t>& ids),
(override));
MOCK_METHOD(vibrator::HalResult<void>, triggerSynced,
@@ -50,13 +56,13 @@
void SetUp() override {
mConnectCounter = 0;
auto callbackScheduler = std::make_shared<vibrator::CallbackScheduler>();
- mMockHal = std::make_shared<StrictMock<MockHalWrapper>>(callbackScheduler);
- mController = std::make_unique<
- vibrator::HalController>(std::move(callbackScheduler),
- [&](std::shared_ptr<vibrator::CallbackScheduler>) {
- android_atomic_inc(&(this->mConnectCounter));
- return this->mMockHal;
- });
+ mMockHal = std::make_shared<StrictMock<MockManagerHalWrapper>>();
+ auto connector = [this](std::shared_ptr<vibrator::CallbackScheduler>) {
+ android_atomic_inc(&mConnectCounter);
+ return mMockHal;
+ };
+ mController = std::make_unique<vibrator::ManagerHalController>(std::move(callbackScheduler),
+ connector);
ASSERT_NE(mController, nullptr);
}
@@ -65,8 +71,7 @@
std::shared_ptr<MockManagerHalWrapper> mMockHal;
std::unique_ptr<vibrator::ManagerHalController> mController;
- void setHalExpectations(int32_t cardinality, std::vector<int32_t> ids,
- vibrator::HalResult<void> voidResult,
+ void setHalExpectations(int32_t cardinality, vibrator::HalResult<void> voidResult,
vibrator::HalResult<vibrator::ManagerCapabilities> capabilitiesResult,
vibrator::HalResult<std::vector<int32_t>> idsResult,
vibrator::HalResult<std::shared_ptr<HalController>> vibratorResult) {
@@ -100,24 +105,20 @@
};
TEST_F(VibratorManagerHalControllerTest, TestInit) {
- ASSERT_TRUE(mController->init());
+ mController->init();
ASSERT_EQ(1, mConnectCounter);
// Noop when wrapper was already initialized.
- ASSERT_TRUE(mController->init());
+ mController->init();
ASSERT_EQ(1, mConnectCounter);
}
TEST_F(VibratorManagerHalControllerTest, TestApiCallsAreForwardedToHal) {
- std::vector<int32_t> ids;
- ids.push_back(1);
- ids.push_back(2);
-
- setHalExpectations(/* cardinality= */ 1, ids, vibrator::HalResult<void>::ok(),
+ setHalExpectations(/* cardinality= */ 1, vibrator::HalResult<void>::ok(),
vibrator::HalResult<vibrator::ManagerCapabilities>::ok(
vibrator::ManagerCapabilities::SYNC),
- vibrator::HalResult<std::vector<int32_t>>::ok(ids),
- vibrator::HalResult<std::shared_ptr<vibrator::HalController>>::ok(nullptr));
+ vibrator::HalResult<std::vector<int32_t>>::ok(VIBRATOR_IDS),
+ vibrator::HalResult<std::shared_ptr<HalController>>::ok(nullptr));
ASSERT_TRUE(mController->ping().isOk());
@@ -127,13 +128,13 @@
auto getVibratorIdsResult = mController->getVibratorIds();
ASSERT_TRUE(getVibratorIdsResult.isOk());
- ASSERT_EQ(ids, getVibratorIdsResult.value());
+ ASSERT_EQ(VIBRATOR_IDS, getVibratorIdsResult.value());
- auto getVibratorResult = mController->getVibrator(1);
+ auto getVibratorResult = mController->getVibrator(VIBRATOR_ID);
ASSERT_TRUE(getVibratorResult.isOk());
ASSERT_EQ(nullptr, getVibratorResult.value());
- ASSERT_TRUE(mController->prepareSynced(ids).isOk());
+ ASSERT_TRUE(mController->prepareSynced(VIBRATOR_IDS).isOk());
ASSERT_TRUE(mController->triggerSynced([]() {}).isOk());
ASSERT_TRUE(mController->cancelSynced().isOk());
@@ -141,20 +142,18 @@
}
TEST_F(VibratorManagerHalControllerTest, TestUnsupportedApiResultDoNotResetHalConnection) {
- std::vector<int32_t> ids;
- setHalExpectations(/* cardinality= */ 1, ids, vibrator::HalResult<void>::unsupported(),
+ setHalExpectations(/* cardinality= */ 1, vibrator::HalResult<void>::unsupported(),
vibrator::HalResult<vibrator::ManagerCapabilities>::unsupported(),
vibrator::HalResult<std::vector<int32_t>>::unsupported(),
- vibrator::HalResult<
- std::shared_ptr<vibrator::HalController>>::unsupported());
+ vibrator::HalResult<std::shared_ptr<HalController>>::unsupported());
ASSERT_EQ(0, mConnectCounter);
ASSERT_TRUE(mController->ping().isUnsupported());
ASSERT_TRUE(mController->getCapabilities().isUnsupported());
ASSERT_TRUE(mController->getVibratorIds().isUnsupported());
- ASSERT_TRUE(mController->getVibrator(1).isUnsupported());
- ASSERT_TRUE(mController->prepareSynced(ids).isUnsupported());
+ ASSERT_TRUE(mController->getVibrator(VIBRATOR_ID).isUnsupported());
+ ASSERT_TRUE(mController->prepareSynced(VIBRATOR_IDS).isUnsupported());
ASSERT_TRUE(mController->triggerSynced([]() {}).isUnsupported());
ASSERT_TRUE(mController->cancelSynced().isUnsupported());
@@ -162,20 +161,18 @@
}
TEST_F(VibratorManagerHalControllerTest, TestFailedApiResultResetsHalConnection) {
- std::vector<int32_t> ids;
- setHalExpectations(/* cardinality= */ 1, ids, vibrator::HalResult<void>::failed("message"),
+ setHalExpectations(MAX_ATTEMPTS, vibrator::HalResult<void>::failed("message"),
vibrator::HalResult<vibrator::ManagerCapabilities>::failed("message"),
vibrator::HalResult<std::vector<int32_t>>::failed("message"),
- vibrator::HalResult<std::shared_ptr<vibrator::HalController>>::failed(
- "message"));
+ vibrator::HalResult<std::shared_ptr<HalController>>::failed("message"));
ASSERT_EQ(0, mConnectCounter);
ASSERT_TRUE(mController->ping().isFailed());
ASSERT_TRUE(mController->getCapabilities().isFailed());
ASSERT_TRUE(mController->getVibratorIds().isFailed());
- ASSERT_TRUE(mController->getVibrator(1).isFailed());
- ASSERT_TRUE(mController->prepareSynced(ids).isFailed());
+ ASSERT_TRUE(mController->getVibrator(VIBRATOR_ID).isFailed());
+ ASSERT_TRUE(mController->prepareSynced(VIBRATOR_IDS).isFailed());
ASSERT_TRUE(mController->triggerSynced([]() {}).isFailed());
ASSERT_TRUE(mController->cancelSynced().isFailed());