From 3cda5eb2b1fc1c904e5138cdcd8abc29180d5ac9 Mon Sep 17 00:00:00 2001 From: Darren Hsu Date: Mon, 13 Mar 2023 11:33:39 +0800 Subject: [PATCH] powerstats: use AdaptiveDvfsStateResidency data provider for CPUCL DVFS data provider is using predefined frequency table for CPU DVFS power stats reporting. If different SoC versions define different CPU frequencies, the predefined table should be updated, otherwise the residencies of some impacted frequencies will be always 0. So Make it adaptive to reduce the maintenance efforts. Bug: 272642210 Bug: 267638537 Test: dumpsys android.hardware.power.stats.IPowerStats/default Change-Id: Ifa39227b9a8b0cc89d8f5a78373f615348a49d4d Signed-off-by: Darren Hsu --- powerstats/ZumaCommonDataProviders.cpp | 73 +++++--------------------- 1 file changed, 13 insertions(+), 60 deletions(-) diff --git a/powerstats/ZumaCommonDataProviders.cpp b/powerstats/ZumaCommonDataProviders.cpp index 3f313edd..862173a5 100644 --- a/powerstats/ZumaCommonDataProviders.cpp +++ b/powerstats/ZumaCommonDataProviders.cpp @@ -19,7 +19,7 @@ #include #include #include -#include +#include #include #include #include @@ -33,6 +33,7 @@ #include #include +using aidl::android::hardware::power::stats::AdaptiveDvfsStateResidencyDataProvider; using aidl::android::hardware::power::stats::AocStateResidencyDataProvider; using aidl::android::hardware::power::stats::CpupmStateResidencyDataProvider; using aidl::android::hardware::power::stats::DevfreqStateResidencyDataProvider; @@ -163,67 +164,10 @@ void addAoC(std::shared_ptr p) { void addDvfsStats(std::shared_ptr p) { // A constant to represent the number of nanoseconds in one millisecond const int NS_TO_MS = 1000000; + std::string path = "/sys/devices/platform/acpm_stats/fvp_stats"; std::vector cfgs; - cfgs.push_back({"CL0", { - std::make_pair("2147MHz", "2147000"), - std::make_pair("2098MHz", "2098000"), - std::make_pair("2024MHz", "2024000"), - std::make_pair("1950MHz", "1950000"), - std::make_pair("1844MHz", "1844000"), - std::make_pair("1704MHz", "1704000"), - std::make_pair("1548MHz", "1548000"), - std::make_pair("1475MHz", "1475000"), - std::make_pair("1328MHz", "1328000"), - std::make_pair("1197MHz", "1197000"), - std::make_pair("1098MHz", "1098000"), - std::make_pair("975MHz", "975000"), - std::make_pair("820MHz", "820000"), - std::make_pair("615MHz", "615000"), - std::make_pair("324MHz", "324000"), - }}); - - cfgs.push_back({"CL1", { - std::make_pair("2450MHz", "2450000"), - std::make_pair("2352MHz", "2352000"), - std::make_pair("2245MHz", "2245000"), - std::make_pair("2130MHz", "2130000"), - std::make_pair("1999MHz", "1999000"), - std::make_pair("1836MHz", "1836000"), - std::make_pair("1622MHz", "1622000"), - std::make_pair("1549MHz", "1549000"), - std::make_pair("1418MHz", "1418000"), - std::make_pair("1328MHz", "1328000"), - std::make_pair("1221MHz", "1221000"), - std::make_pair("1082MHz", "1082000"), - std::make_pair("910MHz", "910000"), - std::make_pair("721MHz", "721000"), - std::make_pair("697MHz", "697000"), - std::make_pair("578MHz", "578000"), - std::make_pair("402MHz", "402000"), - }}); - - cfgs.push_back({"CL2", { - std::make_pair("3015MHz", "3015000"), - std::make_pair("2914MHz", "2914000"), - std::make_pair("2802MHz", "2802000"), - std::make_pair("2687MHz", "2687000"), - std::make_pair("2556MHz", "2556000"), - std::make_pair("2409MHz", "2409000"), - std::make_pair("2294MHz", "2294000"), - std::make_pair("2147MHz", "2147000"), - std::make_pair("2049MHz", "2049000"), - std::make_pair("1901MHz", "1901000"), - std::make_pair("1852MHz", "1852000"), - std::make_pair("1745MHz", "1745000"), - std::make_pair("1557MHz", "1557000"), - std::make_pair("1328MHz", "1328000"), - std::make_pair("1164MHz", "1164000"), - std::make_pair("893MHz", "893000"), - std::make_pair("500MHz", "500000"), - }}); - cfgs.push_back({"MIF", { std::make_pair("3744MHz", "3744000"), std::make_pair("3172MHz", "3172000"), @@ -261,8 +205,17 @@ void addDvfsStats(std::shared_ptr p) { std::make_pair("178MHz", "178000"), }}); + p->addStateResidencyDataProvider(std::make_unique( + path, NS_TO_MS, "CL0", "/sys/devices/system/cpu/cpufreq/policy0/stats/time_in_state")); + + p->addStateResidencyDataProvider(std::make_unique( + path, NS_TO_MS, "CL1", "/sys/devices/system/cpu/cpufreq/policy4/stats/time_in_state")); + + p->addStateResidencyDataProvider(std::make_unique( + path, NS_TO_MS, "CL2", "/sys/devices/system/cpu/cpufreq/policy8/stats/time_in_state")); + p->addStateResidencyDataProvider(std::make_unique( - "/sys/devices/platform/acpm_stats/fvp_stats", NS_TO_MS, cfgs)); + path, NS_TO_MS, cfgs)); } void addSoC(std::shared_ptr p) {