| /* |
| * Copyright (C) 2021 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| syntax = "proto2"; |
| package com.android.server.criticalevents; |
| |
| option java_multiple_files = true; |
| |
| // Output proto containing recent critical events for inclusion in logs such as ANR files. |
| // Do not change the field names since this data is dumped to ANR files in textproto format. |
| message CriticalEventLogProto { |
| // Timestamp when the log snapshot was generated. |
| // Required. |
| optional int64 timestamp_ms = 1; |
| |
| // Max age of events that are included in this proto. |
| // Required. |
| optional int32 window_ms = 2; |
| |
| // Max number of events in the log. |
| // Note: if the number of events is equal to the capacity then it is likely the actual time range |
| // covered by the log is shorter than window_ms. |
| // Required. |
| optional int32 capacity = 3; |
| |
| // Recent critical events. |
| repeated CriticalEventProto events = 4; |
| } |
| |
| // On-disk storage of events. |
| message CriticalEventLogStorageProto { |
| repeated CriticalEventProto events = 1; |
| } |
| |
| // A "critical" event such as an ANR or watchdog. |
| // Do not change the field names since this data is dumped to ANR files in textproto format. |
| message CriticalEventProto { |
| // Timestamp of the event. |
| // Required. |
| optional int64 timestamp_ms = 1; |
| |
| // Required. |
| oneof event { |
| Watchdog watchdog = 2; |
| HalfWatchdog half_watchdog = 3; |
| AppNotResponding anr = 4; |
| JavaCrash java_crash = 5; |
| NativeCrash native_crash = 6; |
| SystemServerStarted system_server_started = 7; |
| } |
| |
| message SystemServerStarted {} |
| |
| message Watchdog { |
| // The watchdog subject. |
| // Required. |
| optional string subject = 1; |
| |
| // Unique identifier of the watchdog. |
| // Can be used to join with other data for this watchdog such as stack dumps & perfetto traces. |
| // Generated in {@link com.android.server.Watchdog#run}. |
| // Required. |
| optional string uuid = 2; |
| } |
| |
| message HalfWatchdog { |
| // The half-watchdog subject. |
| // Required. |
| optional string subject = 1; |
| } |
| |
| message AppNotResponding { |
| // The ANR subject. |
| // Optional, may be redacted for privacy. |
| optional string subject = 1; |
| |
| // Name of the ANRing process. |
| // Optional, may be redacted for privacy. |
| optional string process = 2; |
| |
| // PID of the ANRing process. |
| // Required. |
| optional int32 pid = 3; |
| |
| // UID of the ANRing process. |
| // Required. |
| optional int32 uid = 4; |
| |
| // Category of the ANRing process (DATA_APP, SYSTEM_APP, etc). |
| // Required. |
| optional ProcessClass process_class = 5; |
| } |
| |
| message JavaCrash { |
| // The crash exception class. |
| // Optional, may be redacted for privacy. |
| optional string exception_class = 1; |
| |
| // Name of the crashed process. |
| // Optional, may be redacted for privacy. |
| optional string process = 2; |
| |
| // PID of the crashed process. |
| // Required. |
| optional int32 pid = 3; |
| |
| // UID of the crashed process. |
| // Required. |
| optional int32 uid = 4; |
| |
| // Category of the crashed process (DATA_APP, SYSTEM_APP, etc). |
| // Required. |
| optional ProcessClass process_class = 5; |
| } |
| |
| message NativeCrash { |
| // Name of the crashed process. |
| // Optional, may be redacted for privacy. |
| optional string process = 1; |
| |
| // PID of the crashed process. |
| // Required. |
| optional int32 pid = 2; |
| |
| // UID of the crashed process. |
| // Required. |
| optional int32 uid = 3; |
| |
| // Category of the crashed process (DATA_APP, SYSTEM_APP, etc). |
| // Required. |
| optional ProcessClass process_class = 4; |
| } |
| |
| |
| // Mirrors definition & values in {@link android.server.ServerProtoEnums}. |
| enum ProcessClass { |
| PROCESS_CLASS_UNKNOWN = 0; |
| DATA_APP = 1; |
| SYSTEM_APP = 2; |
| SYSTEM_SERVER = 3; |
| } |
| } |