diff options
Diffstat (limited to 'libs/binder/BackendUnifiedServiceManager.cpp')
| -rw-r--r-- | libs/binder/BackendUnifiedServiceManager.cpp | 58 | 
1 files changed, 37 insertions, 21 deletions
| diff --git a/libs/binder/BackendUnifiedServiceManager.cpp b/libs/binder/BackendUnifiedServiceManager.cpp index d32eecdc60..123dfd2c05 100644 --- a/libs/binder/BackendUnifiedServiceManager.cpp +++ b/libs/binder/BackendUnifiedServiceManager.cpp @@ -30,6 +30,12 @@ constexpr bool kUseCache = true;  constexpr bool kUseCache = false;  #endif +#ifdef LIBBINDER_ADDSERVICE_CACHE +constexpr bool kUseCacheInAddService = true; +#else +constexpr bool kUseCacheInAddService = false; +#endif +  using AidlServiceManager = android::os::IServiceManager;  using android::os::IAccessor;  using binder::Status; @@ -125,31 +131,36 @@ Status BackendUnifiedServiceManager::updateCache(const std::string& serviceName,      if (!kUseCache) {          return Status::ok();      } + +    if (service.getTag() == os::Service::Tag::binder) { +        return updateCache(serviceName, service.get<os::Service::Tag::binder>()); +    } +    return Status::ok(); +} + +Status BackendUnifiedServiceManager::updateCache(const std::string& serviceName, +                                                 const sp<IBinder>& binder) {      std::string traceStr;      if (atrace_is_tag_enabled(ATRACE_TAG_AIDL)) {          traceStr = "BinderCacheWithInvalidation::updateCache : " + serviceName;      }      binder::ScopedTrace aidlTrace(ATRACE_TAG_AIDL, traceStr.c_str()); - -    if (service.getTag() == os::Service::Tag::binder) { -        sp<IBinder> binder = service.get<os::Service::Tag::binder>(); -        if (!binder) { -            binder::ScopedTrace -                    aidlTrace(ATRACE_TAG_AIDL, -                              "BinderCacheWithInvalidation::updateCache failed: binder_null"); -        } else if (!binder->isBinderAlive()) { -            binder::ScopedTrace aidlTrace(ATRACE_TAG_AIDL, -                                          "BinderCacheWithInvalidation::updateCache failed: " -                                          "isBinderAlive_false"); -        } else if (mCacheForGetService->isClientSideCachingEnabled(serviceName)) { -            binder::ScopedTrace aidlTrace(ATRACE_TAG_AIDL, -                                          "BinderCacheWithInvalidation::updateCache successful"); -            return mCacheForGetService->setItem(serviceName, binder); -        } else { -            binder::ScopedTrace aidlTrace(ATRACE_TAG_AIDL, -                                          "BinderCacheWithInvalidation::updateCache failed: " -                                          "caching_not_enabled"); -        } +    if (!binder) { +        binder::ScopedTrace +                aidlTrace(ATRACE_TAG_AIDL, +                          "BinderCacheWithInvalidation::updateCache failed: binder_null"); +    } else if (!binder->isBinderAlive()) { +        binder::ScopedTrace aidlTrace(ATRACE_TAG_AIDL, +                                      "BinderCacheWithInvalidation::updateCache failed: " +                                      "isBinderAlive_false"); +    } else if (mCacheForGetService->isClientSideCachingEnabled(serviceName)) { +        binder::ScopedTrace aidlTrace(ATRACE_TAG_AIDL, +                                      "BinderCacheWithInvalidation::updateCache successful"); +        return mCacheForGetService->setItem(serviceName, binder); +    } else { +        binder::ScopedTrace aidlTrace(ATRACE_TAG_AIDL, +                                      "BinderCacheWithInvalidation::updateCache failed: " +                                      "caching_not_enabled");      }      return Status::ok();  } @@ -277,7 +288,12 @@ Status BackendUnifiedServiceManager::toBinderService(const ::std::string& name,  Status BackendUnifiedServiceManager::addService(const ::std::string& name,                                                  const sp<IBinder>& service, bool allowIsolated,                                                  int32_t dumpPriority) { -    return mTheRealServiceManager->addService(name, service, allowIsolated, dumpPriority); +    Status status = mTheRealServiceManager->addService(name, service, allowIsolated, dumpPriority); +    // mEnableAddServiceCache is true by default. +    if (kUseCacheInAddService && mEnableAddServiceCache && status.isOk()) { +        return updateCache(name, service); +    } +    return status;  }  Status BackendUnifiedServiceManager::listServices(int32_t dumpPriority,                                                    ::std::vector<::std::string>* _aidl_return) { |