diff options
author | Martijn Coenen <maco@google.com> | 2017-10-24 09:33:28 +0200 |
---|---|---|
committer | Martijn Coenen <maco@google.com> | 2017-10-24 10:19:02 +0200 |
commit | 86c3abb2510d05eae0f816899059a230a6b9364f (patch) | |
tree | 09958a4f0546bf9b3af523fb6f626561eb8d3895 /transport/HidlTransportSupport.cpp | |
parent | 3f8c4164067e0239c7f1cdd020d397ce42a9e641 (diff) | |
download | libhidl-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.cpp | 114 |
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 |