| /* |
| * Copyright (C) 2019 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 perfetto.protos; |
| |
| // Proto representation of untyped key/value annotations provided in TRACE_EVENT |
| // macros. Users of the Perfetto SDK should prefer to use the |
| // perfetto::TracedValue API to fill these protos, rather than filling them |
| // manually. |
| // |
| // Debug annotations are intended for debug use and are not considered a stable |
| // API of the trace contents. Trace-based metrics that use debug annotation |
| // values are prone to breakage, so please rely on typed TrackEvent fields for |
| // these instead. |
| // |
| // DebugAnnotations support nested arrays and dictionaries. Each entry is |
| // encoded as a single DebugAnnotation message. Only dictionary entries |
| // set the "name" field. The TrackEvent message forms an implicit root |
| // dictionary. |
| // |
| // Example TrackEvent with nested annotations: |
| // track_event { |
| // debug_annotations { |
| // name: "foo" |
| // dict_entries { |
| // name: "a" |
| // bool_value: true |
| // } |
| // dict_entries { |
| // name: "b" |
| // int_value: 123 |
| // } |
| // } |
| // debug_annotations { |
| // name: "bar" |
| // array_values { |
| // string_value: "hello" |
| // } |
| // array_values { |
| // string_value: "world" |
| // } |
| // } |
| // } |
| // |
| // Next ID: 18. |
| // Reserved ID: 15 |
| message DebugAnnotation { |
| // Name fields are set only for dictionary entries. |
| oneof name_field { |
| // interned DebugAnnotationName. |
| uint64 name_iid = 1; |
| // non-interned variant. |
| string name = 10; |
| } |
| |
| oneof value { |
| bool bool_value = 2; |
| uint64 uint_value = 3; |
| int64 int_value = 4; |
| double double_value = 5; |
| // Pointers are stored in a separate type as the JSON output treats them |
| // differently from other uint64 values. |
| uint64 pointer_value = 7; |
| |
| // Deprecated. Use dict_entries / array_values instead. |
| NestedValue nested_value = 8; |
| |
| // Legacy instrumentation may not support conversion of nested data to |
| // NestedValue yet. |
| string legacy_json_value = 9; |
| |
| // interned and non-interned variants of strings. |
| string string_value = 6; |
| // Corresponds to |debug_annotation_string_values| field in InternedData. |
| uint64 string_value_iid = 17; |
| } |
| |
| // Used to embed arbitrary proto messages (which are also typically used to |
| // represent typed TrackEvent arguments). |proto_type_name| or |
| // |proto_type_name_iid| are storing the full name of the proto messages (e.g. |
| // .perfetto.protos.DebugAnnotation) and |proto_value| contains the serialised |
| // proto messages. See |TracedValue::WriteProto| for more details. |
| oneof proto_type_descriptor { |
| string proto_type_name = 16; |
| // interned DebugAnnotationValueTypeName. |
| uint64 proto_type_name_iid = 13; |
| } |
| optional bytes proto_value = 14; |
| |
| repeated DebugAnnotation dict_entries = 11; |
| repeated DebugAnnotation array_values = 12; |
| |
| // Deprecated legacy way to use nested values. Only kept for |
| // backwards-compatibility in TraceProcessor. May be removed in the future - |
| // code filling protos should use |dict_entries| and |array_values| instead. |
| message NestedValue { |
| enum NestedType { |
| // leaf value. |
| UNSPECIFIED = 0; |
| DICT = 1; |
| ARRAY = 2; |
| } |
| optional NestedType nested_type = 1; |
| |
| repeated string dict_keys = 2; |
| repeated NestedValue dict_values = 3; |
| repeated NestedValue array_values = 4; |
| optional int64 int_value = 5; |
| optional double double_value = 6; |
| optional bool bool_value = 7; |
| optional string string_value = 8; |
| } |
| } |
| |
| // -------------------- |
| // Interned data types: |
| // -------------------- |
| |
| message DebugAnnotationName { |
| optional uint64 iid = 1; |
| optional string name = 2; |
| } |
| |
| // See the |proto_type_descriptor| comment. |
| message DebugAnnotationValueTypeName { |
| optional uint64 iid = 1; |
| optional string name = 2; |
| } |