From ca520b45d427a864f90b4250b05d2e5c41280209 Mon Sep 17 00:00:00 2001 From: Darren Hsu Date: Tue, 6 Feb 2024 20:06:50 +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: I35b5769eddac6cbe7d4ec6f585b8c1448dccfe0a Signed-off-by: Darren Hsu --- powerstats/comet/service.cpp | 44 ++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/powerstats/comet/service.cpp b/powerstats/comet/service.cpp index 9b98027..346f30b 100644 --- a/powerstats/comet/service.cpp +++ b/powerstats/comet/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,10 +34,49 @@ using aidl::android::hardware::power::stats::PowerStatsEnergyConsumer; void addDisplay(std::shared_ptr p) { // Add display residency stats for inner display - addDisplayMrrByEntity(p, "Inner Display", "/sys/class/drm/card0/device/primary-panel/"); + struct stat primaryBuffer; + if (!stat("/sys/class/drm/card0/device/primary-panel/time_in_state", &primaryBuffer)) { + // time_in_state exists + addDisplayMrrByEntity(p, "Inner Display", "/sys/class/drm/card0/device/primary-panel/"); + } else { + // time_in_state doesn't exist + std::vector inner_states = { + "Off", + "LP: 2152x2076@1", + "LP: 2152x2076@30", + "On: 2152x2076@1", + "On: 2152x2076@10", + "On: 2152x2076@60", + "On: 2152x2076@120", + "HBM: 2152x2076@60", + "HBM: 2152x2076@120"}; + + p->addStateResidencyDataProvider(std::make_unique( + "Inner Display", + "/sys/class/backlight/panel0-backlight/state", + inner_states)); + } // Add display residency stats for outer display - addDisplayMrrByEntity(p, "Outer Display", "/sys/class/drm/card0/device/secondary-panel/"); + struct stat secondaryBuffer; + if (!stat("/sys/class/drm/card0/device/secondary-panel/time_in_state", &secondaryBuffer)) { + // time_in_state exists + addDisplayMrrByEntity(p, "Outer Display", "/sys/class/drm/card0/device/secondary-panel/"); + } else { + // time_in_state doesn't exist + std::vector outer_states = { + "Off", + "LP: 1080x2424@30", + "On: 1080x2424@60", + "On: 1080x2424@120", + "HBM: 1080x2424@60", + "HBM: 1080x2424@120"}; + + p->addStateResidencyDataProvider(std::make_unique( + "Outer Display", + "/sys/class/backlight/panel1-backlight/state", + outer_states)); + } // Add display energy consumer p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterConsumer(