From 3cc937165b2d8f2d8cf79b5ad541dc51bd5fde42 Mon Sep 17 00:00:00 2001 From: Benjamin Schwartz Date: Tue, 6 Apr 2021 16:00:58 -0700 Subject: [PATCH] powerstats: Add GPS state residency Bug: 181577366 Test: dumpsys android.hardware.power.stats.IPowerStats/default Change-Id: I0fa4356542a838618e712e9b0abbf02b99db7f3a --- conf/init.gs101.rc | 3 +++ powerstats/Gs101CommonDataProviders.cpp | 30 +++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/conf/init.gs101.rc b/conf/init.gs101.rc index cdf992f0..f4c2dd17 100644 --- a/conf/init.gs101.rc +++ b/conf/init.gs101.rc @@ -169,6 +169,9 @@ on init # Charge stats (write 0) chown system system /sys/class/power_supply/battery/charge_stats + # Power Stats HAL + chown system system /dev/bbd_pwrstat + # start watchdogd start watchdogd diff --git a/powerstats/Gs101CommonDataProviders.cpp b/powerstats/Gs101CommonDataProviders.cpp index d9d435bf..87dc8648 100644 --- a/powerstats/Gs101CommonDataProviders.cpp +++ b/powerstats/Gs101CommonDataProviders.cpp @@ -494,6 +494,36 @@ void addMobileRadio(std::shared_ptr p) void addGNSS(std::shared_ptr p) { + // A constant to represent the number of microseconds in one millisecond. + const int US_TO_MS = 1000; + + // gnss power_stats are reported in microseconds. The transform function + // converts microseconds to milliseconds. + std::function gnssUsToMs = [](uint64_t a) { return a / US_TO_MS; }; + + const GenericStateResidencyDataProvider::StateResidencyConfig gnssStateConfig = { + .entryCountSupported = true, + .entryCountPrefix = "count:", + .totalTimeSupported = true, + .totalTimePrefix = "duration_usec:", + .totalTimeTransform = gnssUsToMs, + .lastEntrySupported = true, + .lastEntryPrefix = "last_entry_timestamp_usec:", + .lastEntryTransform = gnssUsToMs, + }; + + const std::vector> gnssStateHeaders = { + std::make_pair("ON", "GPS_ON:"), + std::make_pair("OFF", "GPS_OFF:"), + }; + + std::vector cfgs; + cfgs.emplace_back(generateGenericStateResidencyConfigs(gnssStateConfig, gnssStateHeaders), + "GPS", ""); + + p->addStateResidencyDataProvider(std::make_unique( + "/dev/bbd_pwrstat", cfgs)); + p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterConsumer(p, EnergyConsumerType::GNSS, "GPS", {"L9S_GNSS_CORE"})); }