syntax = "proto2"; package android.os.statsd.wearpas; option java_package = "com.android.os.wearpas"; import "frameworks/proto_logging/stats/atoms.proto"; import "frameworks/proto_logging/stats/atom_field_options.proto"; extend Atom { optional WearAdaptiveSuspendStatsReported wear_adaptive_suspend_stats_reported = 619 [(module) = "wearpas"]; optional WearPowerAnomalyServiceOperationalStatsReported wear_power_anomaly_service_operational_stats_reported = 620 [(module) = "wearpas"]; optional WearPowerAnomalyServiceEventStatsReported wear_power_anomaly_service_event_stats_reported = 621 [(module) = "wearpas"]; } /** * Logs cumulative stats about the Adaptive Suspend algorithm */ message WearAdaptiveSuspendStatsReported { /* Elapsed time covered by the data in this interval */ optional int32 data_interval_millis = 1; /* Number of suspend attempts during this interval */ optional int32 total_suspend_attempts = 2; /** * Number of suspend attempts that failed during this interval, a subset of * total_suspend_attempts */ optional int32 total_failed_suspends = 3; /** * Number of successful suspends with duration < configured break-even during * this interval. */ optional int32 total_short_suspends = 4; /** * Time spent in suspend with duration >= configured break-even, * during this interval. */ optional int32 time_suspended_long_millis = 5; /** * Time spent in suspend with duration < configured break-even, * during this interval */ optional int32 time_suspended_short_millis = 6; /** * The break-even time configured from the server based on local offline power * testing. */ optional int32 break_even_millis = 7; /** * Time spent doing suspend/resume work for all successful suspends during * this interval, regardless of short vs long suspend duration. */ optional int32 time_suspending_success_millis = 8; /** * Time spent doing suspend/resume work for all failed suspend attempts during * this interval. */ optional int32 time_suspending_fail_millis = 9; /** * Number of times suspend backoff started during this interval. */ optional int32 new_backoffs = 10; /** * Number of times suspend backoff continued, either multiplying the backoff * or remaining at the max backoff, during this interval. */ optional int32 backoff_continuations = 11; /** * Time spent in backoff during this interval. i.e. Total of individual * backoff durations, each of which is measured from the moment a "new * backoff" is initiated to the time beginning of the successful suspend that * causes backoff to end, which will be some time before the backoff is * actually ended. */ optional int32 time_backed_off_millis = 12; /** * A randomly selected suspend duration, to establish aggregate distributions */ optional int32 sampled_suspend_duration_millis = 13; } /** * Logs cumulative stats about the Power Anomaly Service */ message WearPowerAnomalyServiceOperationalStatsReported { /* Duration of the monitoring operation */ optional int32 monitoring_duration_millis = 1; /* Elapsed time between the start of the previous operation and this one */ optional int32 interval_duration_millis = 2; /* Current flash storage size used by PAS */ optional int32 persist_size = 3; /** * 1 if PAS had to start from cold (i.e. perform initialization), 0 if it was * still resident in memory from a previous operation. This is an int32 for * cumulative metrics. */ optional int32 cold_start = 4; /* Number of data provider errors encountered */ optional int32 data_provider_error_count = 5; /* Number of rule evaluation errors encountered */ optional int32 rule_evaluation_error_count = 6; /* Number of reaction handling errors encountered */ optional int32 reaction_error_count = 7; /** * Number of infrastructure errors encountered (e.g. storage, cross-app comms, * config access, etc) */ optional int32 infrastructure_error_count = 8; /** * Total number of new anomalies detected during the just-completed operation */ optional int32 new_anomaly_count = 9; /** * Total anomalies active at the end of the just-completed operation * (including previously detected anomalies) */ optional int32 active_anomaly_count = 10; } /** * Logs event stats about the Power Anomaly Service */ message WearPowerAnomalyServiceEventStatsReported { enum EntityType { UNDEFINED = 0; POWER_RAIL = 1; SUBSYSTEM_RESIDENCY = 2; KERNEL_SUSPEND = 3; KERNEL_WAKE_REASON = 4; CPU_TIME = 5; KERNEL_WAKESOURCE = 6; NATIVE_WAKELOCK = 7; FRAMEWORK_WAKELOCK = 8; COULOMB_COUNTER = 9; NOTIFICATIONS = 10; USAGE_SCALAR = 11; USAGE_RESIDENCY = 12; BLUETOOTH = 13; } enum Status { STATUS_UNSPECIFIED = 0; /** * If the triggered anomaly rule does not have additional reactions beyond * "WW stats" and "bugreport", this will be sent once upon detection. */ NEW_NO_REACTIONS = 1; /** * If the triggered anomaly rule does have additional reactions, this will * be sent once upon detection and be followed by one of * {RESOLVED_POST_REACTIONS, UNRESOLVED_POST_REACTIONS} */ NEW_REACTIONS_PENDING = 2; /** * Following an anomaly with additional reactions, this will be sent if the * reactions have resolved the anomaly. */ RESOLVED_POST_REACTIONS = 3; /** * Following an anomaly with additional reactions, this will be sent if the * reactions have not resolved the anomaly. */ UNRESOLVED_POST_REACTIONS = 4; /** * Following an anomaly with bugreport triggering enabled, this will be sent * if a bugreport is actually triggered (e.g. if rate limiting allows). */ BUGREPORT_TRIGGERED = 5; } /* Power entity type for which an anomaly was detected */ optional EntityType entity_type = 1; /* Name of the power entity showing anomalous behavior */ optional string entity_name = 2; /** * Anomaly rule ID (from the PAS configuration rules distributed via * Phenotype) */ optional int32 rule_id = 3; /** * Resource ID (cross-device) for standard Google stock apps/resources * (ONLY FACTORY GOOGLE FLASHED APPS). Mapping is stored server-side. */ optional int32 resource_holder_id = 4; /* The current status of the anomaly */ optional Status status = 5; }