configstore-utils: add feature to cache service handles
Previously, the service handle for the configstore needs to be retrieved for every calls. This change reduces the time for retrieving multiple configstore items from a same client by caching the service handle per a configstore interface class. Bug: 38411900 Test: built and tested on sailfish. Change-Id: Iaff81e9f2b026aee0bd3865f5d5ed3fb7b6056e0
This commit is contained in:
parent
9119d4ccd1
commit
056d77d523
1 changed files with 11 additions and 1 deletions
|
@ -42,6 +42,15 @@ using ::android::hardware::configstore::V1_0::OptionalInt64;
|
|||
using ::android::hardware::configstore::V1_0::OptionalUInt64;
|
||||
using ::android::hardware::configstore::V1_0::OptionalString;
|
||||
|
||||
// a function to retrieve and cache the service handle
|
||||
// for a particular interface
|
||||
template <typename I>
|
||||
sp<I> getService() {
|
||||
// static initializer used for synchronizations
|
||||
static sp<I> configs = I::getService();
|
||||
return configs;
|
||||
}
|
||||
|
||||
// arguments V: type for the value (i.e., OptionalXXX)
|
||||
// I: interface class name
|
||||
// func: member function pointer
|
||||
|
@ -49,9 +58,10 @@ template<typename V, typename I, android::hardware::Return<void> (I::* func)
|
|||
(std::function<void(const V&)>)>
|
||||
decltype(V::value) get(const decltype(V::value) &defValue) {
|
||||
using namespace android::hardware::details;
|
||||
// static initializer used for synchronizations
|
||||
auto getHelper = []()->V {
|
||||
V ret;
|
||||
sp<I> configs = I::getService();
|
||||
sp<I> configs = getService<I>();
|
||||
|
||||
if (!configs.get()) {
|
||||
// fallback to the default value
|
||||
|
|
Loading…
Reference in a new issue