Merge "bootstat: enhance last reboot reason property with file backing"
This commit is contained in:
commit
7550e6f882
4 changed files with 12 additions and 2 deletions
|
|
@ -870,6 +870,7 @@ bool addKernelPanicSubReason(const std::string& content, std::string& ret) {
|
||||||
|
|
||||||
const char system_reboot_reason_property[] = "sys.boot.reason";
|
const char system_reboot_reason_property[] = "sys.boot.reason";
|
||||||
const char last_reboot_reason_property[] = LAST_REBOOT_REASON_PROPERTY;
|
const char last_reboot_reason_property[] = LAST_REBOOT_REASON_PROPERTY;
|
||||||
|
const char last_reboot_reason_file[] = LAST_REBOOT_REASON_FILE;
|
||||||
const char last_last_reboot_reason_property[] = "sys.boot.reason.last";
|
const char last_last_reboot_reason_property[] = "sys.boot.reason.last";
|
||||||
constexpr size_t history_reboot_reason_size = 4;
|
constexpr size_t history_reboot_reason_size = 4;
|
||||||
const char history_reboot_reason_property[] = LAST_REBOOT_REASON_PROPERTY ".history";
|
const char history_reboot_reason_property[] = LAST_REBOOT_REASON_PROPERTY ".history";
|
||||||
|
|
@ -1059,7 +1060,9 @@ std::string BootReasonStrToReason(const std::string& boot_reason) {
|
||||||
if (isBluntRebootReason(ret)) {
|
if (isBluntRebootReason(ret)) {
|
||||||
// Content buffer no longer will have console data. Beware if more
|
// Content buffer no longer will have console data. Beware if more
|
||||||
// checks added below, that depend on parsing console content.
|
// checks added below, that depend on parsing console content.
|
||||||
content = android::base::GetProperty(last_reboot_reason_property, "");
|
if (!android::base::ReadFileToString(last_reboot_reason_file, &content)) {
|
||||||
|
content = android::base::GetProperty(last_reboot_reason_property, "");
|
||||||
|
}
|
||||||
transformReason(content);
|
transformReason(content);
|
||||||
|
|
||||||
// Anything in last is better than 'super-blunt' reboot or shutdown.
|
// Anything in last is better than 'super-blunt' reboot or shutdown.
|
||||||
|
|
@ -1233,7 +1236,10 @@ void SetSystemBootReason() {
|
||||||
// Record the scrubbed system_boot_reason to the property
|
// Record the scrubbed system_boot_reason to the property
|
||||||
BootReasonAddToHistory(system_boot_reason);
|
BootReasonAddToHistory(system_boot_reason);
|
||||||
// Shift last_reboot_reason_property to last_last_reboot_reason_property
|
// Shift last_reboot_reason_property to last_last_reboot_reason_property
|
||||||
auto last_boot_reason = android::base::GetProperty(last_reboot_reason_property, "");
|
std::string last_boot_reason;
|
||||||
|
if (!android::base::ReadFileToString(last_reboot_reason_file, &last_boot_reason)) {
|
||||||
|
last_boot_reason = android::base::GetProperty(last_reboot_reason_property, "");
|
||||||
|
}
|
||||||
if (last_boot_reason.empty() || isKernelRebootReason(system_boot_reason)) {
|
if (last_boot_reason.empty() || isKernelRebootReason(system_boot_reason)) {
|
||||||
last_boot_reason = system_boot_reason;
|
last_boot_reason = system_boot_reason;
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -1241,6 +1247,7 @@ void SetSystemBootReason() {
|
||||||
}
|
}
|
||||||
android::base::SetProperty(last_last_reboot_reason_property, last_boot_reason);
|
android::base::SetProperty(last_last_reboot_reason_property, last_boot_reason);
|
||||||
android::base::SetProperty(last_reboot_reason_property, "");
|
android::base::SetProperty(last_reboot_reason_property, "");
|
||||||
|
unlink(last_reboot_reason_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gets the boot time offset. This is useful when Android is running in a
|
// Gets the boot time offset. This is useful when Android is running in a
|
||||||
|
|
|
||||||
|
|
@ -548,6 +548,7 @@ static void DoReboot(unsigned int cmd, const std::string& reason, const std::str
|
||||||
skip = strlen("reboot,");
|
skip = strlen("reboot,");
|
||||||
}
|
}
|
||||||
SetProperty(LAST_REBOOT_REASON_PROPERTY, reason.c_str() + skip);
|
SetProperty(LAST_REBOOT_REASON_PROPERTY, reason.c_str() + skip);
|
||||||
|
WriteStringToFile(reason.c_str() + skip, LAST_REBOOT_REASON_FILE);
|
||||||
sync();
|
sync();
|
||||||
|
|
||||||
bool is_thermal_shutdown = cmd == ANDROID_RB_THERMOFF;
|
bool is_thermal_shutdown = cmd == ANDROID_RB_THERMOFF;
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ __BEGIN_DECLS
|
||||||
|
|
||||||
/* Android reboot reason stored in this property */
|
/* Android reboot reason stored in this property */
|
||||||
#define LAST_REBOOT_REASON_PROPERTY "persist.sys.boot.reason"
|
#define LAST_REBOOT_REASON_PROPERTY "persist.sys.boot.reason"
|
||||||
|
#define LAST_REBOOT_REASON_FILE "/metadata/bootstat/" LAST_REBOOT_REASON_PROPERTY
|
||||||
|
|
||||||
/* Reboot or shutdown the system.
|
/* Reboot or shutdown the system.
|
||||||
* This call uses ANDROID_RB_PROPERTY to request reboot to init process.
|
* This call uses ANDROID_RB_PROPERTY to request reboot to init process.
|
||||||
|
|
|
||||||
|
|
@ -496,6 +496,7 @@ on post-fs
|
||||||
mkdir /metadata/vold
|
mkdir /metadata/vold
|
||||||
chmod 0700 /metadata/vold
|
chmod 0700 /metadata/vold
|
||||||
mkdir /metadata/password_slots 0771 root system
|
mkdir /metadata/password_slots 0771 root system
|
||||||
|
mkdir /metadata/bootstat 0750 system log
|
||||||
mkdir /metadata/ota 0700 root system
|
mkdir /metadata/ota 0700 root system
|
||||||
mkdir /metadata/ota/snapshots 0700 root system
|
mkdir /metadata/ota/snapshots 0700 root system
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue