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
diff --git a/configstore/utils/include/configstore/Utils.h b/configstore/utils/include/configstore/Utils.h
index 862e812..ee85549 100644
--- a/configstore/utils/include/configstore/Utils.h
+++ b/configstore/utils/include/configstore/Utils.h
@@ -42,6 +42,15 @@
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 @@
(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