Add a helper function to get service runtime
The bufferhub binder service would be used a lot after migrated to
binder, so have a helper function and including all the checks inside it
should help a lot.
Also rewrite the test to use and check this function as well.
Test: "atest buffer_hub_binder_service-test" passed.
Bug: 112338294
Change-Id: Ifa66f25cc284b2c03586b8dc75e05801bf393fa6
diff --git a/services/vr/bufferhubd/buffer_hub_binder.cpp b/services/vr/bufferhubd/buffer_hub_binder.cpp
index 26de45d..b507717 100644
--- a/services/vr/bufferhubd/buffer_hub_binder.cpp
+++ b/services/vr/bufferhubd/buffer_hub_binder.cpp
@@ -58,5 +58,24 @@
return NO_ERROR;
}
+sp<IBufferHub> BufferHubBinderService::getServiceProxy() {
+ sp<IServiceManager> sm = defaultServiceManager();
+ sp<IBinder> service = sm->checkService(String16(getServiceName()));
+
+ if (service == nullptr) {
+ ALOGE("getServiceProxy(): %s binder service not found!", getServiceName());
+ return nullptr;
+ }
+
+ sp<IBufferHub> ret = interface_cast<IBufferHub>(service);
+ if (ret == nullptr) {
+ ALOGE("getServiceProxy(): %s binder service type casting error!",
+ getServiceName());
+ return nullptr;
+ }
+
+ return ret;
+}
+
} // namespace dvr
} // namespace android
diff --git a/services/vr/bufferhubd/include/private/dvr/buffer_hub_binder.h b/services/vr/bufferhubd/include/private/dvr/buffer_hub_binder.h
index b47c34b..672a348 100644
--- a/services/vr/bufferhubd/include/private/dvr/buffer_hub_binder.h
+++ b/services/vr/bufferhubd/include/private/dvr/buffer_hub_binder.h
@@ -18,6 +18,9 @@
// usage: adb shell dumpsys bufferhubd
virtual status_t dump(int fd, const Vector<String16>& args) override;
+ // Helper function to get the BpReference to this service
+ static sp<IBufferHub> getServiceProxy();
+
private:
std::shared_ptr<BufferHubService> pdx_service_;
};
diff --git a/services/vr/bufferhubd/tests/buffer_hub_binder_service-test.cpp b/services/vr/bufferhubd/tests/buffer_hub_binder_service-test.cpp
index 67ac1cb..587e6db 100644
--- a/services/vr/bufferhubd/tests/buffer_hub_binder_service-test.cpp
+++ b/services/vr/bufferhubd/tests/buffer_hub_binder_service-test.cpp
@@ -1,4 +1,3 @@
-#include <binder/IServiceManager.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <private/dvr/buffer_hub_binder.h>
@@ -8,6 +7,8 @@
namespace {
+using testing::Ne;
+
class BufferHubBinderServiceTest : public ::testing::Test {
// Add setup and teardown if necessary
};
@@ -15,10 +16,8 @@
TEST_F(BufferHubBinderServiceTest, TestInitialize) {
// Create a new service will kill the current one.
// So just check if Binder service is running
- sp<IServiceManager> sm = defaultServiceManager();
- sp<IBinder> service =
- sm->checkService(String16(BufferHubBinderService::getServiceName()));
- EXPECT_THAT(service, ::testing::Ne(nullptr));
+ sp<IBufferHub> service = BufferHubBinderService::getServiceProxy();
+ EXPECT_THAT(service, Ne(nullptr));
}
} // namespace