From da983cb5c2f4eb9d76b094d6dad9f78ad9e70cce Mon Sep 17 00:00:00 2001 From: Benjamin Schwartz Date: Tue, 9 Mar 2021 15:52:55 -0800 Subject: [PATCH] powerstats: Add core stats Bug: 182273949 Test: dumpsys android.hardware.power.stats.IPowerStats/default Change-Id: I4151f57ebd68102a58fd7035356279e68805a0f9 --- powerstats/service.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/powerstats/service.cpp b/powerstats/service.cpp index 7e826e13..acf4b8a8 100644 --- a/powerstats/service.cpp +++ b/powerstats/service.cpp @@ -286,6 +286,37 @@ void addDisplay(std::shared_ptr p) { } void addCPUclusters(std::shared_ptr p) { + // A constant to represent the number of nanoseconds in one millisecond. + const int NS_TO_MS = 1000000; + + std::function acpmNsToMs = [](uint64_t a) { return a / NS_TO_MS; }; + const GenericStateResidencyDataProvider::StateResidencyConfig cpuStateConfig = { + .entryCountSupported = true, + .entryCountPrefix = "down_count:", + .totalTimeSupported = true, + .totalTimePrefix = "total_down_time_ns:", + .totalTimeTransform = acpmNsToMs, + .lastEntrySupported = true, + .lastEntryPrefix = "last_down_time_ns:", + .lastEntryTransform = acpmNsToMs, + }; + + const std::vector> cpuStateHeaders = { + std::make_pair("DOWN", ""), + }; + + std::vector cfgs; + for (std::string name : {"CORE00", "CORE01", "CORE02", "CORE03", "CORE10", "CORE11", + "CORE20", "CORE21", "CLUSTER0", "CLUSTER1", "CLUSTER2"}) { + cfgs.emplace_back(generateGenericStateResidencyConfigs(cpuStateConfig, cpuStateHeaders), + name, name); + } + + auto cpuSdp = std::make_shared( + "/sys/devices/platform/acpm_stats/core_stats", cfgs); + + p->addStateResidencyDataProvider(cpuSdp); + p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterConsumer(p, EnergyConsumerType::CPU_CLUSTER, "CPUCL0", {"S4M_VDD_CPUCL0"})); p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterConsumer(p,