/* * Copyright (C) 2020 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; // Defines properties of a counter track, e.g. for built-in counters (thread // time, instruction count, ..) or user-specified counters (e.g. memory usage of // a specific app component). // // Counter tracks only support TYPE_COUNTER track events, which specify new // values for the counter. For counters that require per-slice values, counter // values can instead be provided in a more efficient encoding via TrackEvent's // |extra_counter_track_uuids| and |extra_counter_values| fields. However, // slice-type events cannot be emitted onto a counter track. // // Values for counters that are only emitted on a single packet sequence can // optionally be delta-encoded, see |is_incremental|. // // Next id: 7. message CounterDescriptor { // Built-in counters, usually with special meaning in the client library, // trace processor, legacy JSON format, or UI. Trace processor will infer a // track name from the enum value if none is provided in TrackDescriptor. enum BuiltinCounterType { COUNTER_UNSPECIFIED = 0; // Thread-scoped counters. The thread's track should be specified via // |parent_uuid| in the TrackDescriptor for such a counter. // implies UNIT_TIME_NS. COUNTER_THREAD_TIME_NS = 1; // implies UNIT_COUNT. COUNTER_THREAD_INSTRUCTION_COUNT = 2; } // Type of the values for the counters - to supply lower granularity units, // see also |unit_multiplier|. enum Unit { UNIT_UNSPECIFIED = 0; UNIT_TIME_NS = 1; UNIT_COUNT = 2; UNIT_SIZE_BYTES = 3; // TODO(eseckler): Support more units as necessary. } // For built-in counters (e.g. thread time). Custom user-specified counters // (e.g. those emitted by TRACE_COUNTER macros of the client library) // shouldn't set this, and instead provide a counter name via TrackDescriptor. optional BuiltinCounterType type = 1; // Names of categories of the counter (usually for user-specified counters). // In the client library, categories are a way to turn groups of individual // counters (or events) on or off. repeated string categories = 2; // Type of the counter's values. Built-in counters imply a value for this // field. optional Unit unit = 3; // In order to use a unit not defined as a part of |Unit|, a free-form unit // name can be used instead. optional string unit_name = 6; // Multiplication factor of this counter's values, e.g. to supply // COUNTER_THREAD_TIME_NS timestamps in microseconds instead. optional int64 unit_multiplier = 4; // Whether values for this counter are provided as delta values. Only // supported for counters that are emitted on a single packet-sequence (e.g. // thread time). Counter values in subsequent packets on the current packet // sequence will be interpreted as delta values from the sequence's most // recent value for the counter. When incremental state is cleared, the // counter value is considered to be reset to 0. Thus, the first value after // incremental state is cleared is effectively an absolute value. optional bool is_incremental = 5; // TODO(eseckler): Support arguments describing the counter (?). // repeated DebugAnnotation debug_annotations; }