summaryrefslogtreecommitdiff
path: root/transport/HidlTransportSupport.cpp
diff options
context:
space:
mode:
authorMartijn Coenen <maco@google.com>2017-10-24 09:33:28 +0200
committerMartijn Coenen <maco@google.com>2017-10-24 10:19:02 +0200
commit86c3abb2510d05eae0f816899059a230a6b9364f (patch)
tree09958a4f0546bf9b3af523fb6f626561eb8d3895 /transport/HidlTransportSupport.cpp
parent3f8c4164067e0239c7f1cdd020d397ce42a9e641 (diff)
downloadlibhidl-86c3abb2510d05eae0f816899059a230a6b9364f.tar.gz
Move getRawServiceInternal to ServiceManagement.
For easier optimization in a follow-up CL. Test: boot marlin, hidl_test, hidl_test_java Bug: 67425500 Change-Id: I0ad6e970652ea3399f2e634ae0f81d6649411f89
Diffstat (limited to 'transport/HidlTransportSupport.cpp')
-rw-r--r--transport/HidlTransportSupport.cpp114
1 files changed, 0 insertions, 114 deletions
diff --git a/transport/HidlTransportSupport.cpp b/transport/HidlTransportSupport.cpp
index 0d2f1bf..9bb8148 100644
--- a/transport/HidlTransportSupport.cpp
+++ b/transport/HidlTransportSupport.cpp
@@ -14,10 +14,7 @@
* limitations under the License.
*/
#include <hidl/HidlTransportSupport.h>
-
-#include <android/hidl/manager/1.0/IServiceManager.h>
#include <hidl/HidlBinderSupport.h>
-#include <hidl/ServiceManagement.h>
namespace android {
namespace hardware {
@@ -56,116 +53,5 @@ bool setMinSchedulerPolicy(const sp<::android::hidl::base::V1_0::IBase>& service
return true;
}
-namespace details {
-
-sp<::android::hidl::base::V1_0::IBase> getRawServiceInternal(const std::string& descriptor,
- const std::string& instance,
- bool retry, bool getStub) {
- using Transport = ::android::hidl::manager::V1_0::IServiceManager::Transport;
- using ::android::hidl::base::V1_0::IBase;
- using ::android::hidl::manager::V1_0::IServiceManager;
-
- const sp<IServiceManager> sm = defaultServiceManager();
- if (sm == nullptr) {
- ALOGE("getService: defaultServiceManager() is null");
- return nullptr;
- }
-
- Return<Transport> transportRet = sm->getTransport(descriptor, instance);
-
- if (!transportRet.isOk()) {
- ALOGE("getService: defaultServiceManager()->getTransport returns %s",
- transportRet.description().c_str());
- return nullptr;
- }
- Transport transport = transportRet;
- const bool vintfHwbinder = (transport == Transport::HWBINDER);
- const bool vintfPassthru = (transport == Transport::PASSTHROUGH);
-
-#ifdef LIBHIDL_TARGET_TREBLE
-
-#ifdef LIBHIDL_TARGET_DEBUGGABLE
- const char* env = std::getenv("TREBLE_TESTING_OVERRIDE");
- const bool trebleTestingOverride = env && !strcmp(env, "true");
- const bool vintfLegacy = (transport == Transport::EMPTY) && trebleTestingOverride;
-#else // LIBHIDL_TARGET_TREBLE but not LIBHIDL_TARGET_DEBUGGABLE
- const bool trebleTestingOverride = false;
- const bool vintfLegacy = false;
-#endif // LIBHIDL_TARGET_DEBUGGABLE
-
-#else // not LIBHIDL_TARGET_TREBLE
- const char* env = std::getenv("TREBLE_TESTING_OVERRIDE");
- const bool trebleTestingOverride = env && !strcmp(env, "true");
- const bool vintfLegacy = (transport == Transport::EMPTY);
-#endif // LIBHIDL_TARGET_TREBLE
-
- for (int tries = 0;
- !getStub && (vintfHwbinder || (vintfLegacy && tries == 0)) && (retry || tries < 1);
- tries++) {
- if (tries > 1) {
- ALOGI("getService: Will do try %d for %s/%s in 1s...", tries, descriptor.c_str(),
- instance.c_str());
- sleep(1); // TODO(b/67425500): remove and update waitForHwService function
- }
- if (vintfHwbinder && tries > 0) {
- waitForHwService(descriptor, instance);
- }
- Return<sp<IBase>> ret = sm->get(descriptor, instance);
- if (!ret.isOk()) {
- ALOGE("getService: defaultServiceManager()->get returns %s for %s/%s.",
- ret.description().c_str(), descriptor.c_str(), instance.c_str());
- break;
- }
- sp<IBase> base = ret;
- if (base == nullptr) {
- if (tries > 0) {
- ALOGW("getService: found unexpected null hwbinder interface for %s/%s.",
- descriptor.c_str(), instance.c_str());
- }
- continue;
- }
-
- Return<bool> canCastRet =
- details::canCastInterface(base.get(), descriptor.c_str(), true /* emitError */);
-
- if (!canCastRet.isOk()) {
- if (canCastRet.isDeadObject()) {
- ALOGW("getService: found dead hwbinder service for %s/%s.", descriptor.c_str(),
- instance.c_str());
- continue;
- }
- // TODO(b/67425500): breaks getService == nullptr => hal available assumptions if the
- // service has a transaction failure (one example of this is if the service's binder
- // buffer is full). If this isn't here, you get an infinite loop when you don't have
- // permission to talk to a service.
- ALOGW("getService: unable to call into hwbinder service for %s/%s.", descriptor.c_str(),
- instance.c_str());
- break;
- }
-
- if (!canCastRet) {
- ALOGW("getService: received incompatible service (bug in hwservicemanager?) for %s/%s.",
- descriptor.c_str(), instance.c_str());
- break;
- }
-
- return base; // still needs to be wrapped by Bp class.
- }
-
- if (getStub || vintfPassthru || vintfLegacy) {
- const sp<IServiceManager> pm = getPassthroughServiceManager();
- if (pm != nullptr) {
- sp<IBase> base = pm->get(descriptor, instance).withDefault(nullptr);
- if (!getStub || trebleTestingOverride) {
- base = wrapPassthrough(base);
- }
- return base;
- }
- }
-
- return nullptr;
-}
-
-} // namespace details
} // namespace hardware
} // namespace android