blob: 71d291a6f8777f3221e1f3c7f2da595e43aff4e6 [file] [log] [blame]
/*
* 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;
InstallPackages install_packages = 8;
ExcessiveBinderCalls excessive_binder_calls = 9;
}
message ExcessiveBinderCalls {
// The uid sending many calls.
optional int32 uid = 1;
}
message InstallPackages {}
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;
}
}