From 9a155722401e17dbb0e69585c0f09aa5b125b232 Mon Sep 17 00:00:00 2001 From: Lakshman Annadorai Date: Mon, 20 Jul 2020 17:01:47 -0700 Subject: [PATCH] Add carwatchdog atoms for apps' stats on killing. - CarWatchdog will capture applications' stats using KilledAppStatsReported on application killing. Bug: 158131194 Test: Tested locally and verified the atoms are reported with statsd_testdrive. Change-Id: I8cf40a340350add9fadccaa887ece73227875b24 --- cmds/statsd/src/atoms.proto | 141 ++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto index a379847f21daa..9a75cbdd1501a 100644 --- a/cmds/statsd/src/atoms.proto +++ b/cmds/statsd/src/atoms.proto @@ -502,6 +502,7 @@ message Atom { MediametricsMediaParserReported mediametrics_mediaparser_reported = 316; TlsHandshakeReported tls_handshake_reported = 317 [(module) = "conscrypt"]; TextClassifierApiUsageReported text_classifier_api_usage_reported = 318 [(module) = "textclassifier"]; + KilledAppStatsReported killed_app_stats_reported = 319 [(module) = "carwatchdogd"]; // StatsdStats tracks platform atoms with ids upto 500. // Update StatsdStats::kMaxPushedAtomId when atom ids here approach that value. @@ -12013,3 +12014,143 @@ message TextClassifierApiUsageReported { optional ResultType result_type = 2; optional int64 latency_millis = 3; } + +/** + * Logs the current state of an application before it is killed. + * + * Pushed from: + * packages/services/Car/watchdog/server/src/ApplicationTerminator.cpp + */ +message KilledAppStatsReported { + // Linux process uid for the package. + optional int32 uid = 1 [(is_uid) = true]; + + // Name of the package that was killed. + optional string package_name = 2; + + // State of the application when it was killed. + enum AppState { + UNKNOWN_APP_STATE = 0; + BACKGROUND = 1; + FOREGROUND = 2; + } + optional AppState app_state = 3; + + // System state indicating whether the system was in normal mode or garage mode. + enum SystemState { + UNKNOWN_SYSTEM_STATE = 0; + USER_INTERACTION_MODE = 1; + NO_USER_INTERACTION_MODE = 2; + } + optional SystemState system_state = 4; + + // Reason for killing the application. + // Keep in sync between: + // packages/services/Car/watchdog/server/src/ApplicationTerminator.h + // frameworks/base/cmds/statsd/src/atoms.proto + enum KillReason { + UNKNOWN_KILL_REASON = 0; + KILLED_ON_ANR = 1; + KILLED_ON_IO_OVERUSE = 2; + KILLED_ON_MEMORY_OVERUSE = 3; + } + optional KillReason kill_reason = 5; + + // Stats of the processes owned by the application when the application was killed. + // The process stack traces are not collected when the application was killed due to IO_OVERUSE. + optional ProcessStats process_stat = 6 [(log_mode) = MODE_BYTES]; + + // The application's I/O overuse stats logged only when the kill reason is KILLED_ON_IO_OVERUSE. + optional IoOveruseStats io_overuse_stats = 7 [(log_mode) = MODE_BYTES]; +} + +/** + * Logs I/O overuse stats for a package. + * + * Keep in sync between: + * packages/services/Car/watchdog/server/src/proto/statsd.proto + * frameworks/base/cmds/statsd/src/atoms.proto + * + * Logged from: + * packages/services/Car/watchdog/server/src/ApplicationTerminator.cpp + */ +message IoOveruseStats { + enum Period { + DAILY = 0; + WEEKLY = 1; + } + + // Threshold and usage stats period. + optional Period period = 1; + + // Threshold in-terms of write bytes defined for the package. + optional PerStateBytes threshold = 2; + + // Number of write bytes in each state for the specified period. + optional PerStateBytes written_bytes = 3; +}; + +/** + * Logs bytes attributed to each application and system states. + * + * Keep in sync between: + * packages/services/Car/watchdog/server/src/proto/statsd.proto + * frameworks/base/cmds/statsd/src/atoms.proto + * + * Logged from: + * packages/services/Car/watchdog/server/src/ApplicationTerminator.cpp + */ +message PerStateBytes { + // Number of bytes attributed to the application foreground. + optional int64 foreground_bytes = 1; + + // Number of bytes attributed to the application background. + optional int64 background_bytes = 2; + + // Number of bytes attributed to the garage mode. + optional int64 garage_mode_bytes = 3; +} + +/** + * Logs each ProcessStat in ProcessStats. + * Keep in sync between: + * packages/services/Car/watchdog/server/src/proto/statsd.proto + * frameworks/base/cmds/statsd/src/atoms.proto + * Logged from: + * packages/services/Car/watchdog/server/src/ApplicationTerminator.cpp + */ +message ProcessStats { + // Records the stats of the processes owned by an application. + repeated ProcessStat process_stat = 1; +} + +/** + * Logs a process's stats. + * Keep in sync between: + * packages/services/Car/watchdog/server/src/proto/statsd.proto + * frameworks/base/cmds/statsd/src/atoms.proto + * Logged from: + * packages/services/Car/watchdog/server/src/ApplicationTerminator.cpp + */ +message ProcessStat { + // Command name of the process. + optional string process_name = 1; + + // Process uptime. + optional uint64 uptime_milliseconds = 2; + + // Number of major page faults caused by the process and its children. + optional uint64 major_page_faults = 3; + + // Peak virtual memory size in kb. + optional uint64 vm_peak_kb = 4; + + // Virtual memory size in kb. + optional uint64 vm_size_kb = 5; + + // Peak resident set size (high water mark) in kb. + optional uint64 vm_hwm_kb = 6; + + // Resident set size in kb. + optional uint64 vm_rss_kb = 7; +}