From 7f2a1321a2792be32f6eb6c151ae9606428f5cb3 Mon Sep 17 00:00:00 2001 From: George Lee Date: Mon, 10 Oct 2022 17:13:30 -0700 Subject: [PATCH] battery_mitigation: Fix lastmeal timestamp Lastmeal.txt may be generated from after device rebooted from IRQ triggering. By applying limit on the time when it generates, lastmeal.txt will not be generated after device rebooted. Bug: 246817058 Test: Trigger brownout and confirm lastmeal.txt has correct timestamp Signed-off-by: George Lee Change-Id: I8b52f44fdc64f5ef74e0059720ed58c845e5bf60 --- battery_mitigation/battery_mitigation.cpp | 18 ++++ battery_mitigation/battery_mitigation.rc | 100 ++++++++++++++++++---- 2 files changed, 102 insertions(+), 16 deletions(-) diff --git a/battery_mitigation/battery_mitigation.cpp b/battery_mitigation/battery_mitigation.cpp index 2204bd50..2fa67213 100644 --- a/battery_mitigation/battery_mitigation.cpp +++ b/battery_mitigation/battery_mitigation.cpp @@ -61,13 +61,31 @@ const struct MitigationConfig::Config cfg = { "voltage_now", "current_now", }, .LogFilePath = "/data/vendor/mitigation/thismeal.txt", + .TimestampFormat = "%Y-%m-%d %H:%M:%S", }; const char kReadyFilePath[] = "/sys/devices/virtual/pmic/mitigation/instruction/ready"; const char kReadyProperty[] = "vendor.brownout.mitigation.ready"; +const char kLastMealPath[] = "/data/vendor/mitigation/lastmeal.txt"; +const char kBRRequestedProperty[] = "vendor.startup_bugreport_requested"; +const std::regex kTimestampRegex("^\\S+\\s[0-9]+:[0-9]+:[0-9]+\\S+$"); int main(int /*argc*/, char ** /*argv*/) { + auto batteryMitigationStartTime = std::chrono::system_clock::now(); bmSp = new BatteryMitigation(cfg); + if (!bmSp) { + return 0; + } + bool mitigationLogTimeValid = bmSp->isMitigationLogTimeValid(batteryMitigationStartTime, + cfg.LogFilePath, + cfg.TimestampFormat, + kTimestampRegex); + int startupBugreport = android::base::GetIntProperty(kBRRequestedProperty, 0); + if (startupBugreport && mitigationLogTimeValid) { + std::ifstream src(cfg.LogFilePath, std::ios::in); + std::ofstream dst(kLastMealPath, std::ios::out); + dst << src.rdbuf(); + } bool isBatteryMitigationReady = false; std::string ready_str; int val = 0; diff --git a/battery_mitigation/battery_mitigation.rc b/battery_mitigation/battery_mitigation.rc index c50811cf..4c4e2c1b 100644 --- a/battery_mitigation/battery_mitigation.rc +++ b/battery_mitigation/battery_mitigation.rc @@ -1,24 +1,92 @@ -on property:sys.boot_completed=1 && property:ro.boot.bootreason=reboot,ocp,pmic,if - copy data/vendor/mitigation/thismeal.txt data/vendor/mitigation/lastmeal.txt - chown system system data/vendor/mitigation/lastmeal.txt - -on property:sys.boot_completed=1 && property:ro.boot.bootreason=reboot,uvlo,pmic,if - copy data/vendor/mitigation/thismeal.txt data/vendor/mitigation/lastmeal.txt - chown system system data/vendor/mitigation/lastmeal.txt - -on property:sys.boot_completed=1 && property:ro.boot.bootreason=reboot,uvlo,pmic,main - copy data/vendor/mitigation/thismeal.txt data/vendor/mitigation/lastmeal.txt - chown system system data/vendor/mitigation/lastmeal.txt - -on property:sys.boot_completed=1 && property:ro.boot.bootreason=reboot,uvlo,pmic,sub - copy data/vendor/mitigation/thismeal.txt data/vendor/mitigation/lastmeal.txt - chown system system data/vendor/mitigation/lastmeal.txt - on property:vendor.thermal.link_ready=1 mkdir /data/vendor/mitigation 0755 system system chown system system /data/vendor/mitigation start vendor.battery_mitigation +on property:ro.boot.bootreason=reboot,uvlo,pmic,if + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,pmic,if + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,uvlo,pmic,main + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,uvlo,pmic,sub + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck1m + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck2m + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck3m + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck4m + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck5m + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck6m + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck7m + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck8m + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck9m + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck10m + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck1s + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck2s + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck3s + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck4s + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck5s + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck6s + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck7s + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck8s + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck9s + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck10s + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buckds + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buckas + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buckcs + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buckbs + setprop vendor.startup_bugreport_requested 1 + service vendor.battery_mitigation /vendor/bin/hw/battery_mitigation user system group system