A profiling event corresponding to a single camera frame. This message
collects important details and timestamps involved in producing a single
camera frame.
Next ID: 17
A profiling event that may be emitted periodically (i.e., at a slower rate
than AndroidCameraFrameEvents) to record fixed and aggregated camera
session-specific values.
Energy data retrieve using the ODPM(On Device Power Monitor) API.
This proto represents the aidl class:
android.hardware.power.stats.EnergyConsumerResult.
Data source that controls the system properties used to guard initialization
of track_event producers (i.e. Skia) in apps using HWUI, and certain
processes like SurfaceFlinger.
AppWakelockBundle describes one or more wakelock events. Events are written
in two paired array, such that the details for event i are in intern_id[i]
and encoded_ts[i].
AppWakelockInfo describes the time-independent properties of a wakelock, such
as the owning package or wakelock tag. This is interned to reduce trace size.
Event bundles refer to interned wakelock info by the iid.
This message is not intended to be written by the chrome on the device.
It’s emitted on the host by the telemetry benchmark infrastructure (it’s a
part of the trace that’s written by the telemetry tracing agent).
Subtraces produced in legacy json format by Chrome tracing agents not yet
updated to support the new binary format, e.g. ETW and CrOS ARC.
TODO(eseckler): Update these agents to become perfetto producers.
Contains information to identify mojo handling events. The trace events in
mojo are common for all mojo interfaces and this information is used to
identify who is the caller or callee.
Describes a Chrome thread’s attributes. Emitted as part of a TrackDescriptor,
usually by the thread’s trace writer. Must be paired with a ThreadDescriptor
in the same TrackDescriptor.
Information about a specific trigger during a background tracing scenario
Associated packet timestamps are useful to delimitate a scenario range in a
trace. Triggers are also useful for filtering traces.
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).
This message is sent from Producer(s) to the tracing Service when registering
to advertise their capabilities. It describes the structure of tracing
protos that will be produced by the data source and the supported filters.
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.
The result of tracing one or more etw event uses per-processor buffers where
an in-use buffer is assigned to each processor at all times. Therefore,
collecting multiple events they should already be synchronized.
Additional events associated with a leader.
Configuration is similar to Timebase event. Because data acquisition is
driven by the leader there is no option to configure the clock or the
frequency.
Generated by SurfaceFlinger’s FrameTimeline (go/adaptive-scheduling-fr).
Used in comparing the expected timeline of a frame to the actual timeline.
Key terms:
1) DisplayFrame - represents SurfaceFlinger’s work on a frame(composited)
2) SurfaceFrame - represents App’s work on its frame
3) Timeline = start to end of a component’s(app/SF) work on a frame.
SurfaceFlinger composites frames from many apps together, so
One DisplayFrame can map to N SurfaceFrame(s)
This relationship can be reconstructed by using
DisplayFrame.token = SurfaceFrame.display_frame_token
The result of tracing one or more ftrace data pages from a single per-cpu
kernel ring buffer. If collating multiple pages’ worth of events, all of
them come from contiguous pages, with no kernel data loss in between.
Configuration for trace packet interception. Used for diverting trace data to
non-Perfetto sources (e.g., logging to the console, ETW) when using the
Perfetto SDK.
The interning fields in this file can refer to 2 different intern tables,
depending on the message they are used in. If the interned fields are present
in ProfilePacket proto, then the intern tables included in the ProfilePacket
should be used. If the intered fields are present in the
StreamingProfilePacket proto, then the intern tables included in all of the
previous InternedData message with same sequence ID should be used.
TODO(fmayer): Move to the intern tables to a common location.
Represents a script that was compiled to generate code. Some V8 code is
generated out of scripts and will reference a V8Script other types of code
will not (e.g. builtins).
Message used by Winscope to process legacy trace files.
Represents a file full of surface flinger trace entries.
Encoded, it should start with 0x4c 0x59 0x52 0x54 0x52 0x41 0x43 0x45
(.LYRTRACE), such that they can be easily identified.
Packet emitted by the traced_perf sampling performance profiler, which
gathers data via the perf_event_open syscall. Each packet contains an
individual sample with a counter value, and optionally a
callstack.
Per-process periodically sampled stats. These samples are wrapped in a
dedicated message (as opposite to be fields in process_tree.proto) because
they are dumped at a different rate than cmdline and thread list.
Note: not all of these stats will be present in every ProcessStats message
and sometimes processes may be missing. This is because counters are
cached to reduce emission of counters which do not change.
Metadata about the processes and threads in the trace.
Note: this proto was designed to be filled in by traced_probes and should
only be populated with accurate information coming from the system. Other
trace writers should prefer to fill ThreadDescriptor and ProcessDescriptor
in TrackDescriptor.
The packet emitted by heapprofd for each heap snapshot. A snapshot can
involve more than one ProfilePacket if the snapshot is big (when |continued|
is true). The cardinality and grouping is as follows:
A ProfilePacket contains:
Custom configuration for the “android.protolog” data source.
ProtoLog is a logging mechanism that is intented to be more efficient than
logcat. This configures what logs to capture in the tracing instance.
ShellTransition messages record information about the shell transitions in
the system. This is used to track the animations that are created and execute
through the shell transition system.
One or more statsd atoms. This must continue to match:
perfetto/protos/third_party/statsd/shell_data.proto
So that we can efficiently add data from statsd directly to the
trace.
This file is named ‘statsd_tracing_config.proto’ rather than
‘statsd_config.proto’ (which would be more consistent with the other
config protos) so it doesn’t show up and confuse folks looking for
the existing statsd_config.proto for configuring statsd itself.
Same for the config proto itself.
Packet emitted by the chromium in-process signal-based callstack sampler.
Represents a series of individual stack samples (sampled at discrete points
in time), rather than aggregated over an interval.
Various Linux system stat counters from /proc.
The fields in this message can be reported at different rates and with
different granularity. See sys_stats_config.proto.
This file defines the configuration for the Linux /proc poller data source,
which injects counters in the trace.
Counters that are needed in the trace must be explicitly listed in the
_counters fields. This is to avoid spamming the trace with all counters
at all times.
The sampling rate is configurable. All polling rates (_period_ms) need
to be integer multiples of each other.
OK: [10ms, 10ms, 10ms], [10ms, 20ms, 10ms], [10ms, 20ms, 60ms]
Not OK: [10ms, 10ms, 11ms], [10ms, 15ms, 20ms]
The overall config that is used when starting a new tracing session through
ProducerPort::StartTracing().
It contains the general config for the logging buffer(s) and the configs for
all the data source being enabled.
Default values for TracePacket fields that hold for a particular TraceWriter
packet sequence. This message contains a subset of the TracePacket fields
with matching IDs. When provided, these fields define the default values
that should be applied, at import time, to all TracePacket(s) with the same
|trusted_packet_sequence_id|, unless otherwise specified in each packet.
A random unique ID that identifies the trace.
This message has been introduced in v32. Prior to that, the UUID was
only (optionally) present in the TraceConfig.trace_uuid_msb/lsb fields.
This has been moved to a standalone packet to deal with new use-cases for
go/gapless-aot, where the same tracing session can be serialized several
times, in which case the UUID is changed on each snapshot and does not match
the one in the TraceConfig.
Trace events emitted by client instrumentation library (TRACE_EVENT macros),
which describe activity on a track, such as a thread or asynchronous event
track. The track is specified using separate TrackDescriptor messages and
referred to via the track’s UUID.
Default values for fields of all TrackEvents on the same packet sequence.
Should be emitted as part of TracePacketDefaults whenever incremental state
is cleared. It’s defined here because field IDs should match those of the
corresponding fields in TrackEvent.
This message specifies the “range of interest” for track events. With the
drop_track_event_data_before option set to kTrackEventRangeOfInterest,
Trace Processor drops track events outside of this range.
Message used by Winscope to process legacy trace files.
Represents a file full of surface flinger transactions.
Encoded, it should start with 0x54 0x4E 0x58 0x54 0x52 0x41 0x43 0x45
(.TNXTRACE), such that they can be easily identified.
When a TracingSession receives a trigger it records the boot time nanoseconds
in the TracePacket’s timestamp field as well as the name of the producer that
triggered it. We emit this data so filtering can be done on triggers received
in the trace.
Common state for UIs visualizing Perfetto traces.
This message can be appended as a TracePacket by UIs to save the
visible state (e.g. scroll position/zoom state) for future opening
of the trace.
Design doc: go/trace-ui-state.
A message representing a option the parser does not recognize. This only
appears in options protos created by the compiler::Parser class.
DescriptorPool resolves these when building Descriptor objects. Therefore,
options protos in descriptor objects (e.g. returned by Descriptor::options(),
or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
in them.
A source location, represented as a native symbol.
This is similar to message Frame from
protos/perfetto/trace/profiling/profile_common.proto, but for abitrary
source code locations (for example in track event args), not stack frames.
Strings used by V8 can have different encodings, instead of coverting to a
common encoding (e.g. UTF-8) on device is expensive. Instead we send the
“raw” string and do the convestion at trace ingestion time.
Each VulkanMemoryEvent encompasses information regarding one single function
call that results in reserving, binding or freeing host or GPU memory. There
is a special message type, ANNOTATIONS, which is used to communicate
information that are not directly related to a memory event, nonetheless are
essential to understand the memory usage. An example is the size and memory
types of the memory heaps.
All the information that cannot be sent within a VulkanMemoryEvent message,
are sent as annotations to the main memory event. One example is the
properties of the object that consumes the allocated memory, for example, a
buffer or an image.
key_iid and string_iid are both interned strings. Original string value is
stored in vulkan_memory_keys from
protos/perfetto/trace/interned_data/interned_data.proto.
This enum is obtained by post-processing
AOSP/frameworks/proto_logging/stats/atoms.proto through
AOSP/external/perfetto/tools/update-statsd-descriptor, which extracts one
enum value for each proto field defined in the upstream atoms.proto.
RAIL Mode is an indication of the kind of work that a Renderer is currently
performing which is in turn used to prioritise work accordingly.
A fuller description of these modes can be found https://web.dev/rail/