From bf46132fe532a533c8dcb5aeb3301be579d6198a Mon Sep 17 00:00:00 2001 From: Stan Rokita Date: Thu, 17 Oct 2019 13:40:35 -0700 Subject: [PATCH] MH2 | Implement debug method of HalProxy Bug: 9569382 Test: Observed debug output from $ adb shell lshal debug android.hardware.sensors@2.0::ISensors/default Change-Id: I9f2627a05d37bd8407a22e263b7557834a9677b8 --- sensors/2.0/multihal/Android.bp | 1 + sensors/2.0/multihal/HalProxy.cpp | 53 ++++++++++++++++++++++++++- sensors/2.0/multihal/tests/Android.bp | 1 + 3 files changed, 53 insertions(+), 2 deletions(-) diff --git a/sensors/2.0/multihal/Android.bp b/sensors/2.0/multihal/Android.bp index 5c6767671e..c13eaf2e92 100644 --- a/sensors/2.0/multihal/Android.bp +++ b/sensors/2.0/multihal/Android.bp @@ -21,6 +21,7 @@ cc_defaults { shared_libs: [ "android.hardware.sensors@1.0", "android.hardware.sensors@2.0", + "libbase", "libcutils", "libfmq", "libhidlbase", diff --git a/sensors/2.0/multihal/HalProxy.cpp b/sensors/2.0/multihal/HalProxy.cpp index fe2b98b21a..43e3af658c 100644 --- a/sensors/2.0/multihal/HalProxy.cpp +++ b/sensors/2.0/multihal/HalProxy.cpp @@ -20,11 +20,13 @@ #include +#include #include "hardware_legacy/power.h" #include #include +#include #include #include #include @@ -54,6 +56,18 @@ uint32_t setSubHalIndex(uint32_t sensorHandle, size_t subHalIndex) { return sensorHandle | (subHalIndex << 24); } +/** + * Convert nanoseconds to milliseconds. + * + * @param nanos The nanoseconds input. + * + * @return The milliseconds count. + */ +int64_t msFromNs(int64_t nanos) { + constexpr int64_t nanosecondsInAMillsecond = 1000000; + return nanos / nanosecondsInAMillsecond; +} + HalProxy::HalProxy() { const char* kMultiHalConfigFile = "/vendor/etc/sensors/hals.conf"; initializeSubHalListFromConfigFile(kMultiHalConfigFile); @@ -229,8 +243,43 @@ Return HalProxy::configDirectReport(int32_t sensorHandle, int32_t channelH return Return(); } -Return HalProxy::debug(const hidl_handle& /* fd */, const hidl_vec& /* args */) { - // TODO: output debug information +Return HalProxy::debug(const hidl_handle& fd, const hidl_vec& /*args*/) { + if (fd.getNativeHandle() == nullptr || fd->numFds < 1) { + ALOGE("%s: missing fd for writing", __FUNCTION__); + return Void(); + } + + android::base::borrowed_fd writeFd = dup(fd->data[0]); + + std::ostringstream stream; + stream << "===HalProxy===" << std::endl; + stream << "Internal values:" << std::endl; + stream << " Threads are running: " << (mThreadsRun.load() ? "true" : "false") << std::endl; + int64_t now = getTimeNow(); + stream << " Wakelock timeout start time: " << msFromNs(now - mWakelockTimeoutStartTime) + << " ms ago" << std::endl; + stream << " Wakelock timeout reset time: " << msFromNs(now - mWakelockTimeoutResetTime) + << " ms ago" << std::endl; + // TODO(b/142969448): Add logging for history of wakelock acquisition per subhal. + stream << " Wakelock ref count: " << mWakelockRefCount << std::endl; + stream << " Size of pending write events queue: " << mPendingWriteEventsQueue.size() + << std::endl; + if (!mPendingWriteEventsQueue.empty()) { + stream << " Size of events list on front of pending writes queue: " + << mPendingWriteEventsQueue.front().first.size() << std::endl; + } + stream << " # of non-dynamic sensors across all subhals: " << mSensors.size() << std::endl; + stream << " # of dynamic sensors across all subhals: " << mDynamicSensors.size() << std::endl; + stream << "SubHals (" << mSubHalList.size() << "):" << std::endl; + for (ISensorsSubHal* subHal : mSubHalList) { + stream << " Name: " << subHal->getName() << std::endl; + stream << " Debug dump: " << std::endl; + android::base::WriteStringToFd(stream.str(), writeFd); + subHal->debug(fd, {}); + stream.str(""); + stream << std::endl; + } + android::base::WriteStringToFd(stream.str(), writeFd); return Return(); } diff --git a/sensors/2.0/multihal/tests/Android.bp b/sensors/2.0/multihal/tests/Android.bp index e3a4af1e5a..50a55f946e 100644 --- a/sensors/2.0/multihal/tests/Android.bp +++ b/sensors/2.0/multihal/tests/Android.bp @@ -82,6 +82,7 @@ cc_test { shared_libs: [ "android.hardware.sensors@1.0", "android.hardware.sensors@2.0", + "libbase", "libcutils", "libfmq", "libhidlbase",