platform_system_core/bootstat
Mark Salyzyn 1519925149 bootstat: shutdown reports reboot
Some devices report the following canonical boot reason for all
shutdown operations:

    reboot,kernel_power_off_charging__reboot_system

because shutdown switches to a charging kernel, and reboots into the
system when the user presses the power button.  Thus last kernel
messages arrives as:

    <0>.(0)[53:pmic_thread]reboot: Restarting system with command \
                       'kernel power off charging  reboot system'
     -> "shutdown" (w/o last boot reason)
     -> "shutdown,<subreason>" (w/last boot reason)

The reboot reason from that charging instance propagates as a
fortified boot reason blocking interpretation of the last boot reason
that manages shutdown canonical boot reason determination.  The fix
is to change reboot,kernel_power_off_charging__reboot_system to
shutdown, so that it is viewed as a blunt reason that can be
overridden by last boot reason.

We added the above boot reason to kBootReasonMap because the Bit
Error Handler can use it to reconstruct if there is any damage to
the last kernel messages content.  The sad thing is that the enum
will never propagate as we are filtering it out and reporting
"shutdown" instead.  Of course, we are now covered for a can not
happen.

Test: boot_reason_test.sh
Bug: 74595769
Bug: 63736262
Change-Id: I28987f0871af7d967cc4bbbffed43bd42349acdd
2018-06-04 08:32:11 -07:00
..
.clang-format bootstat: Set up clang-format-2 for bootstat. 2017-05-24 10:19:25 -07:00
Android.bp Fix PDK build 2018-02-14 03:03:28 +00:00
AndroidTest.xml Add test config to bootstat_tests 2017-04-05 14:49:47 +00:00
boot_event_record_store.cpp bootstat: clang-format rebase 2017-09-20 11:27:56 -07:00
boot_event_record_store.h bootstat: clang-format rebase 2017-09-20 11:27:56 -07:00
boot_event_record_store_test.cpp bootstat: clang-format rebase 2017-09-20 11:27:56 -07:00
boot_reason_test.sh bootstat: test reboot rescueparty 2018-05-07 10:10:18 -07:00
bootstat-debug.rc bootstat: test: inject ro.boot.bootreason values 2017-10-11 13:48:33 -07:00
bootstat.cpp bootstat: shutdown reports reboot 2018-06-04 08:32:11 -07:00
bootstat.rc bootstat: reduce overall boot time 2017-09-19 07:36:34 -07:00
OWNERS Add OWNERS. 2017-12-07 13:30:03 -08:00
README.md bootstat: Record the time since factory reset on init. 2016-02-24 11:01:03 -08:00
testrunner.cpp bootstat: Fix the base includes to be AOSP-friendly. 2016-01-20 01:28:48 +00:00

bootstat

The bootstat command records boot events (e.g., firmware_loaded, boot_complete) and the relative time at which these events occurred. The command also aggregates boot event metrics locally and logs the metrics for analysis.

Usage: bootstat [options]
options include:
  -h, --help            Show this help
  -l, --log             Log all metrics to logstorage
  -p, --print           Dump the boot event records to the console
  -r, --record          Record the timestamp of a named boot event
  --record_boot_reason  Record the reason why the device booted
  --record_time_since_factory_reset Record the time since the device was reset

Relative time

The timestamp recorded by bootstat is the uptime of the system, i.e., the number of seconds since the system booted.

Recording boot events

To record the relative time of an event during the boot phase, call bootstat with the -r option and the name of the boot event.

$ bootstat -r boot_complete

The relative time at which the command runs is recorded along with the name of the boot event to be persisted.

Logging boot events

To log the persisted boot events, call bootstat with the -l option.

$ bootstat -l

bootstat logs all boot events recorded using the -r option to the EventLog using the Tron histogram. These logs may be uploaded by interested parties for aggregation and analysis of boot time across different devices and versions.

Printing boot events

To print the set of persisted boot events, call bootstat with the -p option.

$ bootstat -p
Boot events:
------------
boot_complete   71