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 <darrenhsu@google.com>
This commit is contained in:
Darren Hsu 2023-03-13 11:33:39 +08:00
parent 59829e247c
commit 3cda5eb2b1

View file

@ -19,7 +19,7 @@
#include <AocStateResidencyDataProvider.h>
#include <CpupmStateResidencyDataProvider.h>
#include <DevfreqStateResidencyDataProvider.h>
#include <DvfsStateResidencyDataProvider.h>
#include <AdaptiveDvfsStateResidencyDataProvider.h>
#include <UfsStateResidencyDataProvider.h>
#include <dataproviders/GenericStateResidencyDataProvider.h>
#include <dataproviders/IioEnergyMeterDataProvider.h>
@ -33,6 +33,7 @@
#include <android/binder_process.h>
#include <log/log.h>
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<PowerStats> p) {
void addDvfsStats(std::shared_ptr<PowerStats> 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<DvfsStateResidencyDataProvider::Config> 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<PowerStats> p) {
std::make_pair("178MHz", "178000"),
}});
p->addStateResidencyDataProvider(std::make_unique<AdaptiveDvfsStateResidencyDataProvider>(
path, NS_TO_MS, "CL0", "/sys/devices/system/cpu/cpufreq/policy0/stats/time_in_state"));
p->addStateResidencyDataProvider(std::make_unique<AdaptiveDvfsStateResidencyDataProvider>(
path, NS_TO_MS, "CL1", "/sys/devices/system/cpu/cpufreq/policy4/stats/time_in_state"));
p->addStateResidencyDataProvider(std::make_unique<AdaptiveDvfsStateResidencyDataProvider>(
path, NS_TO_MS, "CL2", "/sys/devices/system/cpu/cpufreq/policy8/stats/time_in_state"));
p->addStateResidencyDataProvider(std::make_unique<DvfsStateResidencyDataProvider>(
"/sys/devices/platform/acpm_stats/fvp_stats", NS_TO_MS, cfgs));
path, NS_TO_MS, cfgs));
}
void addSoC(std::shared_ptr<PowerStats> p) {