bcl: Support thismeal binary
Add command for dump_power to create thismeal.txt
from thismeal.bin.
Support BatteryMitigationService to monitor
brownout event and generate thismeal.bin.
Test: /vendor/bin/hw/battery_mitigation -d
Bug: 293899466
Change-Id: I3fcbd62af25204a7469dd3952a91cd6d281bccd7
Signed-off-by: samou <samou@google.com>
diff --git a/battery_mitigation/battery_mitigation.cpp b/battery_mitigation/battery_mitigation.cpp
index a09b8a4..79c7ec1 100644
--- a/battery_mitigation/battery_mitigation.cpp
+++ b/battery_mitigation/battery_mitigation.cpp
@@ -18,15 +18,18 @@
#include <android/binder_process.h>
#include <battery_mitigation/BatteryMitigation.h>
+#include <battery_mitigation/BatteryMitigationService.h>
#include <sys/resource.h>
#include <system/thread_defs.h>
#define COUNT_LIMIT 10
using android::hardware::google::pixel::BatteryMitigation;
+using android::hardware::google::pixel::BatteryMitigationService;
using android::hardware::google::pixel::MitigationConfig;
android::sp<BatteryMitigation> bmSp;
+android::sp<BatteryMitigationService> batteryMitigationService;
const struct MitigationConfig::Config cfg = {
.SystemPath = {
@@ -86,10 +89,52 @@
.TriggeredIdxPath = "/sys/devices/virtual/pmic/mitigation/br_stats/triggered_idx",
.BrownoutStatsPath = "/sys/devices/virtual/pmic/mitigation/br_stats/stats",
.StoringPath = "/data/vendor/mitigation/thismeal.bin",
- .BackupPath = "/data/vendor/mitigation/lastmeal.bin",
+ .ParsedThismealPath = "/data/vendor/mitigation/thismeal.txt",
+ .ParsedLastmealPath = "/data/vendor/mitigation/lastmeal.txt",
.FvpStatsPath = "/sys/devices/platform/acpm_stats/fvp_stats",
- .PcieModemPath = "/sys/devices/platform/12100000.pcie/power_stats",
- .PcieWifiPath = "/sys/devices/platform/13120000.pcie/power_stats",
+ .PmicCommon = {
+ /* Main Pmic */
+ {
+ .OdpmDir = "/sys/bus/iio/devices/iio:device0",
+ .OdpmEnabledRailsPath = "/sys/bus/iio/devices/iio:device0/enabled_rails",
+ .PmicNamePath = "/sys/bus/iio/devices/iio:device0/name",
+ },
+ /* Sub Pmic */
+ {
+ .OdpmDir = "/sys/bus/iio/devices/iio:device1",
+ .OdpmEnabledRailsPath = "/sys/bus/iio/devices/iio:device1/enabled_rails",
+ .PmicNamePath = "/sys/bus/iio/devices/iio:device1/name",
+ },
+ },
+ .PlatformSpecific = {
+ /* MIN_SUPPORTED_PLATFORM */
+ {
+ .MainPmicName = "s2mpg10-odpm\n",
+ .SubPmicName = "s2mpg11-odpm\n",
+ .PcieModemPath = "/sys/devices/platform/11920000.pcie/power_stats",
+ .PcieWifiPath = "/sys/devices/platform/14520000.pcie/power_stats",
+ },
+ {
+ .MainPmicName = "s2mpg12-odpm\n",
+ .SubPmicName = "s2mpg13-odpm\n",
+ .PcieModemPath = "/sys/devices/platform/11920000.pcie/power_stats",
+ .PcieWifiPath = "/sys/devices/platform/14520000.pcie/power_stats",
+ },
+ {
+ .MainPmicName = "s2mpg14-odpm\n",
+ .SubPmicName = "s2mpg15-odpm\n",
+ .PcieModemPath = "/sys/devices/platform/12100000.pcie/power_stats",
+ .PcieWifiPath = "/sys/devices/platform/13120000.pcie/power_stats",
+ },
+ /* MAX_SUPPORTED_PLATFORM */
+ {
+ .MainPmicName = "s2mpg14-odpm\n",
+ .SubPmicName = "s2mpg15-odpm\n",
+ .PcieModemPath = "/sys/devices/platform/12100000.pcie/power_stats",
+ .PcieWifiPath = "/sys/devices/platform/13120000.pcie/power_stats",
+ },
+
+ },
};
const char kReadyFilePath[] = "/sys/devices/virtual/pmic/mitigation/instruction/ready";
@@ -106,31 +151,60 @@
return std::string(value);
}
-int main(int /*argc*/, char ** /*argv*/) {
+int main(int argc, char **argv) {
+ std::string cdt = GetSystemProperty(kCDTProperty);
+ int platformNum = atoi(cdt.substr(5, 1).c_str());
+ batteryMitigationService = new BatteryMitigationService(eventThreadCfg,
+ platformNum);
+ if (!batteryMitigationService) {
+ return 0;
+ }
+ bool platformSupported = batteryMitigationService->isPlatformSupported();
+ bool brownoutStatsBinarySupported = batteryMitigationService->isBrownoutStatsBinarySupported();
+ if (argc == 2) {
+ if(strcmp(argv[1], "-d") == 0 &&
+ brownoutStatsBinarySupported &&
+ platformSupported) {
+ /* Create thismeal.txt from thismeal.bin */
+ batteryMitigationService->genParsedMeal(eventThreadCfg.ParsedThismealPath);
+ }
+ return 0;
+ }
+
setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_AUDIO);
auto batteryMitigationStartTime = std::chrono::system_clock::now();
ABinderProcess_setThreadPoolMaxThreadCount(1);
ABinderProcess_startThreadPool();
- bmSp = new BatteryMitigation(cfg, eventThreadCfg);
- if (!bmSp) {
- return 0;
- }
- std::string cdt = GetSystemProperty(kCDTProperty);
- int platform_num = atoi(cdt.substr(5, 1).c_str());
- if (platform_num >= MIN_SUPPORTED_PLATFORM) {
- bmSp->startBrownoutEventThread();
- }
- bool mitigationLogTimeValid = bmSp->isMitigationLogTimeValid(batteryMitigationStartTime,
- cfg.LogFilePath,
- cfg.TimestampFormat,
- kTimestampRegex);
+
+ bool mitigationLogTimeValid;
std::string reason = android::base::GetProperty(kBRRequestedProperty, "");
- if (!reason.empty() && mitigationLogTimeValid) {
- std::ifstream src(cfg.LogFilePath, std::ios::in);
- std::ofstream dst(kLastMealPath, std::ios::out);
- dst << src.rdbuf();
- android::base::SetProperty(kLastMealProperty, "1");
+ if (brownoutStatsBinarySupported) {
+ /* Create lastmeal.txt if the dump time in thismeal.bin are valid */
+ mitigationLogTimeValid = batteryMitigationService->isTimeValid(eventThreadCfg.StoringPath,
+ batteryMitigationStartTime);
+ if (!reason.empty() && mitigationLogTimeValid &&
+ batteryMitigationService->genParsedMeal(eventThreadCfg.ParsedLastmealPath)) {
+ android::base::SetProperty(kLastMealProperty, "1");
+ }
+ /* Start BrownoutEventThread to poll brownout event from kernel */
+ batteryMitigationService->startBrownoutEventThread();
+ } else{
+ bmSp = new BatteryMitigation(cfg);
+ if (!bmSp) {
+ return 0;
+ }
+ mitigationLogTimeValid = bmSp->isMitigationLogTimeValid(batteryMitigationStartTime,
+ cfg.LogFilePath,
+ cfg.TimestampFormat,
+ kTimestampRegex);
+ if (!reason.empty() && mitigationLogTimeValid) {
+ std::ifstream src(cfg.LogFilePath, std::ios::in);
+ std::ofstream dst(kLastMealPath, std::ios::out);
+ dst << src.rdbuf();
+ android::base::SetProperty(kLastMealProperty, "1");
+ }
}
+
bool isBatteryMitigationReady = false;
std::string ready_str;
int val = 0;