From eeaf5ea6725b20c7344d89adcbda6cfe5536a66b Mon Sep 17 00:00:00 2001 From: Benjamin Schwartz Date: Wed, 14 Apr 2021 14:49:31 -0700 Subject: [PATCH] powerstats: Add Uwb stats Bug: 180956351 Test: dumpsys android.hardware.power.stats.IPowerStats/default Change-Id: Ib528558b2efae9a35494bafcf2c675325cbcf6fe --- conf/init.raven.rc | 3 +++ powerstats/raven/service.cpp | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/conf/init.raven.rc b/conf/init.raven.rc index 7e49991..3d85756 100644 --- a/conf/init.raven.rc +++ b/conf/init.raven.rc @@ -11,6 +11,9 @@ on init chown system system /d/regmap/6-0036/registers chown system system /sys/bus/nvmem/devices/5-00500/nvmem + # Power Stats HAL + chown system system /sys/devices/platform/10d30000.spi/spi_master/spi10/spi10.0/uwb/power_stats + on early-boot # Wait for insmod_sh to finish all common modules wait_for_prop vendor.common.modules.ready 1 diff --git a/powerstats/raven/service.cpp b/powerstats/raven/service.cpp index 8ccc616..f1322a9 100644 --- a/powerstats/raven/service.cpp +++ b/powerstats/raven/service.cpp @@ -17,6 +17,7 @@ #define LOG_TAG "android.hardware.power.stats-service.pixel" #include +#include #include #include #include @@ -29,6 +30,7 @@ using aidl::android::hardware::power::stats::DisplayStateResidencyDataProvider; using aidl::android::hardware::power::stats::EnergyConsumerType; +using aidl::android::hardware::power::stats::GenericStateResidencyDataProvider; using aidl::android::hardware::power::stats::PowerStatsEnergyConsumer; void addDisplay(std::shared_ptr p) { @@ -66,6 +68,38 @@ void addDisplay(std::shared_ptr p) { {"HBM: 1440x3120@60", 8}})); } +void addUwb(std::shared_ptr p) { + // A constant to represent the number of nanoseconds in one millisecond. + const int NS_TO_MS = 1000000; + + // ACPM stats are reported in nanoseconds. The transform function + // converts nanoseconds to milliseconds. + std::function uwbNsToMs = [](uint64_t a) { return a / NS_TO_MS; }; + const GenericStateResidencyDataProvider::StateResidencyConfig stateConfig = { + .entryCountSupported = true, + .entryCountPrefix = "count:", + .totalTimeSupported = true, + .totalTimePrefix = "dur ns:", + .totalTimeTransform = uwbNsToMs, + .lastEntrySupported = false, + }; + + const std::vector> stateHeaders = { + std::make_pair("Off", "Off state:"), + std::make_pair("Run", "Run state:"), + std::make_pair("Idle", "Idle state:"), + std::make_pair("Tx", "Tx state:"), + std::make_pair("Rx", "Rx state:"), + }; + + std::vector cfgs; + cfgs.emplace_back(generateGenericStateResidencyConfigs(stateConfig, stateHeaders), + "UWB", ""); + + p->addStateResidencyDataProvider(std::make_unique( + "/sys/devices/platform/10d30000.spi/spi_master/spi10/spi10.0/uwb/power_stats", cfgs)); +} + int main() { LOG(INFO) << "Pixel PowerStats HAL AIDL Service is starting."; @@ -76,6 +110,7 @@ int main() { addGs101CommonDataProviders(p); addDisplay(p); + addUwb(p); const std::string instance = std::string() + PowerStats::descriptor + "/default"; binder_status_t status = AServiceManager_addService(p->asBinder().get(), instance.c_str());