print log message for values retrieved from configstore

This CL adds a code for printing log messages in clients-side utility
library functions (getXXX) for configstore so that the developer can
figure out which configuration values are actually retrieved from the configstore.

Bug: 36275627
Test: Built and check the log message appears

Change-Id: I2c0895f8afbbb2947b62164acaf62a491c451dc0
This commit is contained in:
Jaesoo Lee
2017-03-24 14:08:24 +09:00
parent 0dff6286eb
commit 0dc72ecbb7
3 changed files with 85 additions and 10 deletions

View File

@@ -14,14 +14,22 @@
// limitations under the License.
//
cc_library_headers {
cc_library_shared {
name: "android.hardware.configstore-utils",
defaults: ["hidl_defaults"],
srcs: [ "ConfigStoreUtils.cpp" ],
export_include_dirs: ["include"],
shared_libs: [
"android.hardware.configstore@1.0",
"libbase",
"libhidlbase"
],
export_shared_lib_headers: [
"android.hardware.configstore@1.0",
"libbase",
"libhidlbase"
],
}

View File

@@ -0,0 +1,40 @@
//
// Copyright (C) 2017 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#define LOG_TAG "ConfigStore"
#include <android-base/logging.h>
#include <configstore/Utils.h>
namespace android {
namespace hardware {
namespace details {
bool wouldLogInfo() {
return WOULD_LOG(INFO);
}
void logAlwaysInfo(const std::string& message) {
LOG(INFO) << message;
}
void logAlwaysError(const std::string& message) {
LOG(ERROR) << message;
}
} // namespace details
} // namespace hardware
} // namespace android

View File

@@ -17,24 +17,31 @@
#ifndef ANDROID_HARDWARE_CONFIGSTORE_UTILS_H
#define ANDROID_HARDWARE_CONFIGSTORE_UTILS_H
#include <android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h>
#include <hidl/Status.h>
#include <stdatomic.h>
#pragma push_macro("LOG_TAG")
#undef LOG_TAG
#define LOG_TAG "ConfigStoreUtil"
#include <sstream>
namespace android {
namespace hardware {
namespace details {
// Templated classes can use the below method
// to avoid creating dependencies on liblog.
bool wouldLogInfo();
void logAlwaysInfo(const std::string& message);
void logAlwaysError(const std::string& message);
} // namespace details
namespace configstore {
using namespace android::hardware::configstore::V1_0;
// arguments V: type for the value (i.e., OptionalXXX)
// I: interface class name
// func: member function pointer
using namespace V1_0;
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;
auto getHelper = []()->V {
V ret;
sp<I> configs = I::getService();
@@ -47,7 +54,11 @@ decltype(V::value) get(const decltype(V::value) &defValue) {
ret = v;
});
if (!status.isOk()) {
ALOGE("HIDL call failed. %s", status.description().c_str());
std::ostringstream oss;
oss << "HIDL call failed for retrieving a config item from "
"configstore : "
<< status.description().c_str();
logAlwaysError(oss.str());
ret.specified = false;
}
}
@@ -56,6 +67,24 @@ decltype(V::value) get(const decltype(V::value) &defValue) {
};
static V cachedValue = getHelper();
if (wouldLogInfo()) {
std::string iname = __PRETTY_FUNCTION__;
// func name starts with "func = " in __PRETTY_FUNCTION__
auto pos = iname.find("func = ");
if (pos != std::string::npos) {
iname = iname.substr(pos + sizeof("func = "));
iname.pop_back(); // remove trailing ']'
} else {
iname += " (unknown)";
}
std::ostringstream oss;
oss << iname << " retrieved: "
<< (cachedValue.specified ? cachedValue.value : defValue)
<< (cachedValue.specified ? "" : " (default)");
logAlwaysInfo(oss.str());
}
return cachedValue.specified ? cachedValue.value : defValue;
}
@@ -99,6 +128,4 @@ std::string getString(const std::string &defValue) {
} // namespace hardware
} // namespace android
#pragma pop_macro("LOG_TAG")
#endif // ANDROID_HARDWARE_CONFIGSTORE_UTILS_H