| #!/bin/sh | |
| # Copyright 2016 The ChromiumOS Authors | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| set -e | |
| # Records the difference between two timestamps in milliseconds. | |
| # Only emits metrics if none of the three arguments are empty. | |
| # Arguments are <starting point> <ending point> <metric name> | |
| record_delta() { | |
| if [ $# -eq 3 ] && [ -n "$1" ] && [ -n "$2" ] && [ -n "$3" ]; then | |
| metrics_client "$3" $(($2 - $1)) 1 1000000 50 | |
| fi | |
| } | |
| # logout-started signal is written asynchronously after Chrome starts. | |
| # Wait for new signal to appear for 10 seconds. | |
| FLAG_FILE=/tmp/stats-logout-started.written | |
| for i in $(seq 10) ; do | |
| if mv -f "${FLAG_FILE}" "${FLAG_FILE}".done 2> /dev/null ; then | |
| FOUND=true | |
| break; | |
| fi | |
| sleep 1 | |
| if [ "${i}" = 10 ]; then | |
| logger -i -p crit "No new logout-started signal received after" \ | |
| " 10 seconds." | |
| fi | |
| done | |
| # Report infinite value when there was no recent logout-started. | |
| # Max histograms value is 1000000ms, which is calculated from the | |
| # device uptime. Set "impossible" start value to -1000000 to force | |
| # out-of-bounds histogram result. | |
| if [ -z "${FOUND}" ] ; then | |
| CHROME_LOGOUT_STARTED=-1000000 | |
| else | |
| CHROME_LOGOUT_STARTED=$(bootstat_get_last logout-started time-ms) | |
| fi | |
| # Only record restart statistics if chrome performed a logout. | |
| if [ -n "${CHROME_LOGOUT_STARTED}" ]; then | |
| CHROME_UI_POST_STOP=$(bootstat_get_last ui-post-stop time-ms) | |
| CHROME_PROCESSES_TERMINATED=$(bootstat_get_last \ | |
| other-processes-terminated time-ms) | |
| # Stub this out since X no longer exists, but the stats below are | |
| # defined as transitions to/from the X kill phase. | |
| CHROME_CRYPTOHOME_UNMOUNTED=$(bootstat_get_last \ | |
| cryptohome-unmounted time-ms) | |
| CHROME_EXEC=$(bootstat_get_last chrome-exec time-ms) | |
| CHROME_LOGIN_PROMPT_VISIBLE=$(bootstat_get_last \ | |
| login-prompt-visible time-ms) | |
| # Record deltas between some interesting steps. | |
| record_delta "${CHROME_LOGOUT_STARTED}" "${CHROME_UI_POST_STOP}" \ | |
| Uptime.LogoutToUIStopAfterLogout | |
| record_delta "${CHROME_UI_POST_STOP}" "${CHROME_PROCESSES_TERMINATED}" \ | |
| Uptime.UIStopToProcessesTerminatedAfterLogout | |
| record_delta "${CHROME_PROCESSES_TERMINATED}" "${CHROME_EXEC}" \ | |
| Uptime.OtherProcessesTerminatedToChromeExecAfterLogout | |
| record_delta "${CHROME_EXEC}" "${CHROME_LOGIN_PROMPT_VISIBLE}" \ | |
| Uptime.ChromeExecToLoginPromptVisibleAfterLogout | |
| # Some summary statistics so we can account for everything. | |
| record_delta "${CHROME_LOGOUT_STARTED}" "${CHROME_CRYPTOHOME_UNMOUNTED}" \ | |
| Uptime.Logout | |
| record_delta "${CHROME_CRYPTOHOME_UNMOUNTED}" \ | |
| "${CHROME_LOGIN_PROMPT_VISIBLE}" \ | |
| Uptime.LoginPromptSetupTimeAfterLogout | |
| record_delta "${CHROME_LOGOUT_STARTED}" "${CHROME_LOGIN_PROMPT_VISIBLE}" \ | |
| Uptime.LogoutToLoginPromptVisible | |
| fi |