| # Copyright (c) 2013 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| description "Report once-per-boot UMA statistics" |
| author "chromium-os-dev@chromium.org" |
| |
| start on started system-services |
| |
| script |
| GET_FIRMWARE_TIME_LEGACY=' |
| /Initial usec timer/ { |
| sub(".*Initial usec timer ", "") |
| initial_usec = $0 |
| exit |
| } |
| END { |
| printf "%.2f", initial_usec / 1000000 |
| } |
| ' |
| |
| GET_FIRMWARE_TIME=' |
| /Exiting depthcharge with code/ { |
| initial_usec = $8 |
| } |
| END { |
| if (initial_usec != "") |
| printf "%.2f", initial_usec / 1000000 |
| } |
| ' |
| |
| FIRMWARE_LOG="/sys/firmware/log" |
| get_firmware_time() { |
| local ftime |
| if [ -e "$FIRMWARE_LOG" ]; then |
| ftime="$(awk "$GET_FIRMWARE_TIME" "$FIRMWARE_LOG")" |
| fi |
| if [ -z "$ftime" ]; then |
| ftime="$(dmesg | awk "$GET_FIRMWARE_TIME_LEGACY")" |
| fi |
| echo "$ftime" |
| } |
| |
| # TODO(jrbarnette): The firmware-boot-time file is used by tests |
| # for two purposes: |
| # 1) by boot time tests, to estimate total boot time from power |
| # on (not just from kernel startup), and |
| # 2) by firmware tests, to estimate how long the dev mode warning |
| # screen is presented. |
| # |
| # Probably there should be another way for autotests to get boot |
| # time, so the code to create this file can be removed. |
| FIRMWARE_TIME="$(get_firmware_time)" |
| echo "$FIRMWARE_TIME" >/tmp/firmware-boot-time |
| |
| # usage: |
| # report_disk_metrics <read-sectors> <write-sectors> |
| report_disk_metrics() { |
| metrics_client Platform.BootSectorsRead $1 1 1000000 50 |
| metrics_client Platform.BootSectorsWritten $2 1 10000 50 |
| } |
| |
| report_disk_metrics $( |
| bootstat_get_last boot-complete read-sectors write-sectors) |
| |
| CHROME_EXEC_TIME=$(bootstat_get_last chrome-exec time) |
| BOOT_COMPLETE_TIME=$(bootstat_get_last boot-complete time) |
| PRE_STARTUP_TIME=$(bootstat_get_last pre-startup time) |
| TOTAL_TIME=$(echo $FIRMWARE_TIME $BOOT_COMPLETE_TIME | awk '{print $1 + $2}') |
| SYSTEM_TIME=$(echo $CHROME_EXEC_TIME $PRE_STARTUP_TIME | |
| awk '{print $1 - $2}') |
| CHROME_TIME=$(echo $BOOT_COMPLETE_TIME $CHROME_EXEC_TIME | |
| awk '{print $1 - $2}') |
| metrics_client -t BootTime.Total2 $TOTAL_TIME 1 20000 100 |
| metrics_client -t BootTime.Firmware $FIRMWARE_TIME 1 10000 50 |
| metrics_client -t BootTime.Kernel $PRE_STARTUP_TIME 1 10000 50 |
| metrics_client -t BootTime.System $SYSTEM_TIME 1 10000 50 |
| metrics_client -t BootTime.Chrome $CHROME_TIME 1 10000 50 |
| end script |