diff options
| author | 2017-10-20 04:32:10 +0000 | |
|---|---|---|
| committer | 2017-10-20 04:32:10 +0000 | |
| commit | cb2bde9c7f79c910cc9d2c260a9d39a75ce85d95 (patch) | |
| tree | e51a172ede29dc67cd48e5462e37e3e5492d04da | |
| parent | ff426ec10ca802eb87b42e4f5a8d7cc9326d4265 (diff) | |
| parent | 3147d2f429a149bc5fd322839015afa90c4541f7 (diff) | |
Merge "HwBinder: don't re-implement libhidl's getService" am: 992f9e7e0b
am: 3147d2f429
Change-Id: I588305d25372f4c2465d0e1f3a0610599aea28b7
| -rw-r--r-- | core/jni/Android.bp | 9 | ||||
| -rw-r--r-- | core/jni/android_os_HwBinder.cpp | 57 |
2 files changed, 3 insertions, 63 deletions
diff --git a/core/jni/Android.bp b/core/jni/Android.bp index 3d71d1db52c5..e7667ca191fd 100644 --- a/core/jni/Android.bp +++ b/core/jni/Android.bp @@ -292,13 +292,4 @@ cc_library_shared { // GraphicsJNI.h includes hwui headers "libhwui", ], - - product_variables: { - debuggable: { - cflags: ["-D__ANDROID_DEBUGGABLE__"] - }, - treble: { - cflags: ["-D__ANDROID_TREBLE__"] - }, - }, } diff --git a/core/jni/android_os_HwBinder.cpp b/core/jni/android_os_HwBinder.cpp index 59ca050a23e1..fe14d483743f 100644 --- a/core/jni/android_os_HwBinder.cpp +++ b/core/jni/android_os_HwBinder.cpp @@ -306,7 +306,7 @@ static jobject JHwBinder_native_getService( jstring serviceNameObj) { using ::android::hidl::base::V1_0::IBase; - using ::android::hidl::manager::V1_0::IServiceManager; + using ::android::hardware::details::getRawServiceInternal; if (ifaceNameObj == NULL) { jniThrowException(env, "java/lang/NullPointerException", NULL); @@ -317,22 +317,12 @@ static jobject JHwBinder_native_getService( return NULL; } - auto manager = hardware::defaultServiceManager(); - - if (manager == nullptr) { - LOG(ERROR) << "Could not get hwservicemanager."; - signalExceptionForError(env, UNKNOWN_ERROR, true /* canThrowRemoteException */); - return NULL; - } - const char *ifaceNameCStr = env->GetStringUTFChars(ifaceNameObj, NULL); if (ifaceNameCStr == NULL) { return NULL; // XXX exception already pending? } std::string ifaceName(ifaceNameCStr); env->ReleaseStringUTFChars(ifaceNameObj, ifaceNameCStr); - ::android::hardware::hidl_string ifaceNameHStr; - ifaceNameHStr.setToExternal(ifaceName.c_str(), ifaceName.size()); const char *serviceNameCStr = env->GetStringUTFChars(serviceNameObj, NULL); if (serviceNameCStr == NULL) { @@ -340,50 +330,9 @@ static jobject JHwBinder_native_getService( } std::string serviceName(serviceNameCStr); env->ReleaseStringUTFChars(serviceNameObj, serviceNameCStr); - ::android::hardware::hidl_string serviceNameHStr; - serviceNameHStr.setToExternal(serviceName.c_str(), serviceName.size()); - - LOG(INFO) << "Looking for service " - << ifaceName - << "/" - << serviceName; - - Return<IServiceManager::Transport> transportRet = - manager->getTransport(ifaceNameHStr, serviceNameHStr); - - if (!transportRet.isOk()) { - signalExceptionForError(env, UNKNOWN_ERROR, true /* canThrowRemoteException */); - return NULL; - } - - IServiceManager::Transport transport = transportRet; - -#ifdef __ANDROID_TREBLE__ -#ifdef __ANDROID_DEBUGGABLE__ - const char* testingOverride = std::getenv("TREBLE_TESTING_OVERRIDE"); - const bool vintfLegacy = (transport == IServiceManager::Transport::EMPTY) - && testingOverride && !strcmp(testingOverride, "true"); -#else // __ANDROID_TREBLE__ but not __ANDROID_DEBUGGABLE__ - const bool vintfLegacy = false; -#endif // __ANDROID_DEBUGGABLE__ -#else // not __ANDROID_TREBLE__ - const bool vintfLegacy = (transport == IServiceManager::Transport::EMPTY); -#endif // __ANDROID_TREBLE__"; - - if (transport != IServiceManager::Transport::HWBINDER && !vintfLegacy) { - LOG(ERROR) << "service " << ifaceName << " declares transport method " - << toString(transport) << " but framework expects hwbinder."; - signalExceptionForError(env, NAME_NOT_FOUND, true /* canThrowRemoteException */); - return NULL; - } - - Return<sp<hidl::base::V1_0::IBase>> ret = manager->get(ifaceNameHStr, serviceNameHStr); - - if (!ret.isOk()) { - signalExceptionForError(env, UNKNOWN_ERROR, true /* canThrowRemoteException */); - return NULL; - } + // TODO(b/67981006): true /* retry */ + sp<IBase> ret = getRawServiceInternal(ifaceName, serviceName, false /* retry */, false /* getStub */); sp<hardware::IBinder> service = hardware::toBinder<hidl::base::V1_0::IBase>(ret); if (service == NULL) { |