From e75b810751108c60adad121a7c00e1febb8caa03 Mon Sep 17 00:00:00 2001 From: Darren Hsu Date: Tue, 6 Feb 2024 19:53:30 +0800 Subject: [PATCH] powerstats: use legacy data provider if MRR sysfs doesn't exist Bug: 323590299 Test: vts-tradefed run vts -m VtsHalPowerStatsTargetTest Change-Id: Ia31814c852f173a56361a3df88b6d20a5475ee03 Signed-off-by: Darren Hsu --- powerstats/caiman/service.cpp | 32 +++++++++++++++++++++++++++++++- powerstats/komodo/service.cpp | 32 +++++++++++++++++++++++++++++++- 2 files changed, 62 insertions(+), 2 deletions(-) diff --git a/powerstats/caiman/service.cpp b/powerstats/caiman/service.cpp index 9228fead..3ed20dd5 100644 --- a/powerstats/caiman/service.cpp +++ b/powerstats/caiman/service.cpp @@ -26,6 +26,7 @@ #include #include #include +#include using aidl::android::hardware::power::stats::DisplayStateResidencyDataProvider; using aidl::android::hardware::power::stats::EnergyConsumerType; @@ -33,7 +34,36 @@ using aidl::android::hardware::power::stats::PowerStatsEnergyConsumer; void addDisplay(std::shared_ptr p) { // Add display residency stats - addDisplayMrr(p); + struct stat buffer; + if (!stat("/sys/class/drm/card0/device/primary-panel/time_in_state", &buffer)) { + // time_in_state exists + addDisplayMrr(p); + } else { + // time_in_state doesn't exist + std::vector states = { + "Off", + "LP: 960x2142@1", + "LP: 960x2142@30", + "On: 960x2142@1", + "On: 960x2142@30", + "On: 960x2142@60", + "On: 960x2142@120", + "HBM: 960x2142@60", + "HBM: 960x2142@120", + "LP: 1280x2856@1", + "LP: 1280x2856@30", + "On: 1280x2856@1", + "On: 1280x2856@30", + "On: 1280x2856@60", + "On: 1280x2856@120", + "HBM: 1280x2856@60", + "HBM: 1280x2856@120"}; + + p->addStateResidencyDataProvider(std::make_unique( + "Display", + "/sys/class/backlight/panel0-backlight/state", + states)); + } // Add display energy consumer p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterConsumer( diff --git a/powerstats/komodo/service.cpp b/powerstats/komodo/service.cpp index 9228fead..2d873333 100644 --- a/powerstats/komodo/service.cpp +++ b/powerstats/komodo/service.cpp @@ -26,6 +26,7 @@ #include #include #include +#include using aidl::android::hardware::power::stats::DisplayStateResidencyDataProvider; using aidl::android::hardware::power::stats::EnergyConsumerType; @@ -33,7 +34,36 @@ using aidl::android::hardware::power::stats::PowerStatsEnergyConsumer; void addDisplay(std::shared_ptr p) { // Add display residency stats - addDisplayMrr(p); + struct stat buffer; + if (!stat("/sys/class/drm/card0/device/primary-panel/time_in_state", &buffer)) { + // time_in_state exists + addDisplayMrr(p); + } else { + // time_in_state doesn't exist + std::vector states = { + "Off", + "LP: 1008x2244@1", + "LP: 1008x2244@30", + "On: 1008x2244@1", + "On: 1008x2244@30", + "On: 1008x2244@60", + "On: 1008x2244@120", + "HBM: 1008x2244@60", + "HBM: 1008x2244@120", + "LP: 1344x2992@1", + "LP: 1344x2992@30", + "On: 1344x2992@1", + "On: 1344x2992@30", + "On: 1344x2992@60", + "On: 1344x2992@120", + "HBM: 1344x2992@60", + "HBM: 1344x2992@120"}; + + p->addStateResidencyDataProvider(std::make_unique( + "Display", + "/sys/class/backlight/panel0-backlight/state", + states)); + } // Add display energy consumer p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterConsumer(