blob: 7edf76f1b9c0ddcf2b7d604a45e3614fae158133 [file] [log] [blame]
Unreleased:
Tracing service and probes:
*
Trace Processor:
*
UI:
*
SDK:
* Added UpdateDataSource() descriptor IPC endpoint to allow updates of the
data source capabilities (e.g., category list for track event).
v21.0 - 2021-11-01:
Tracing service and probes:
* Added reporting of last 8 PERFETTO_LOG() entries and crash keys to
crash tombstones on Android.
* Changed kallsym parser to save 100ms for starting a tracing session with
enable_ksyms=true.
* Removed advertisement of the built-in data sources "android.heapprofd",
"android.java_hprof", "linux.perf" on Linux and other platforms. Built-in
data sources are only used to lazy-start daemons on Android OS.
* Changed ACL files on Android atrace.rc to support to up to 24 ftrace cpus.
No change on Linux which remains unlimited.
Trace Processor:
* Changed protobuf decoders to use less stack and fall back on heap sooner
(before: 16KB of stack per decoder, after: 1.6KB). It caused problems with
some embedders which use smaller per-thread stacks.
* Added support for SPAN OUTER JOIN on unpartitioned tables.
* Improved performance of as_pandas_dataframe() in the Python API by 16x.
UI:
* Added visualization of direct_reclaim ftrace events.
SDK:
* Added perfetto::{Flow,TerminatingFlow} to the track-event library.
v20.1 - 2021-10-05:
Tracing service and probes:
* Fixed standalone Windows build. Updated the llvm-win toolchain.
v20.0 - 2021-10-03:
Tracing service and probes:
* Removed DCHECK that would cause crashes when a debug build of the service
is used with a producer built with -DNDEBUG.
* Changed the service-side field-level filtering configuration protobuf
field number, because the feature had a bug. This is effectively
equivalent to deprecating the feature and reintroducing it under a
different name.
* Added support for boot tracing on Android. Early kernel tracing (prior to
the point when /data is mounted) is not yet supported. For instructions
see /docs/case-studies/android-boot-tracing.md .
Trace Processor:
* Added reqiurement of separating queries by semi-colon (;) followed by
new-line when specifying a query file with -q to trace processor shell.
* Added "ancestor_slice_by_stack" and "descendant_slice_by_stack" table
functions to walk up and down the slice stacks.
* Overhauled windowed sorting to be based on packet ordering and
lifecycle events inside the trace instead of time-based ordering.
* Removed |SortingMode::kForceFlushPeriodWindowedSort| due to changes to the
sorting algorithm, which is now based on Flush events rather than time.
Embedders should switch to |SortingMode::kDefaultHeuristics|. Other
SortingMode enum values are no-ops and will be removed in future versions.
UI:
* Added initial flamegraph support for traced_perf callstack samples.
* Added initial Pivot table for aggregation of userspace slices. The feature
is disabled by default for and requires manual enabling via
https://ui.perfetto.dev/#!/flags .
SDK:
* Changed DCHECK and DLOGs to be always disabled in SDK builds, regardless
of NDEBUG.
v19.0 - 2021-09-02:
Tracing service and probes:
* Added ftrace clock reporting to the trace.
Trace Processor:
* Added support for longs/doubles to RUN_METRIC.
* Added power profile data for sunfish, redfin, and bramble.
* Added experimental Python library for computing slice breakdowns.
* Fixed parsing of JSON escape sequences.
* Fixed JSON trace detection.
UI:
* Added local cacheing of traces. Traces are reloaded in case of refresh or
tab being discarded by the browser.
* Added icon to distinguish metric-derived tracks.
* Added release channel selector to feature flags page.
* Fixed crash with null slice names.
SDK:
* Added some missing NESTABLE_ASYNC legacy trace macros.
* Fixed reporting of producer uid in --query.
* Fixed version numbering scheme for minor versions. Previously versions
were numbered as like v19.0.42 where 42 represented the number of commits
since the last major version release. This was ambiguous in the presence
of branches. Now versions are numbered like v19.0-ab12cd34 where ab12cd34
is the shortened Git commit-ish.
v18.0 - 2021-08-02:
Tracing service and probes:
* Added cross-compiler toolchains for Linux-{arm,64} based on Debian Sid.
These will be used for generating monthly releases' prebuilts via LUCI.
Trace Processor:
* Added 'android_gpu' metric to report residency information for each GPU
frequency (via `trace_processor_shell --run-metrics android_gpu`).
* Removed the RawQuery RPC interface.
UI:
* Added a highlighted section to thread slices to visualize CPU time
(darker) verses wall time (lighter).
* Added global counter tracks for perf counters (e.g. "CPU 0 cycles", "CPU 0
instructions") when the 'linux.perf' data source (traced_perf) is used.
* Added a (feature) 'Flags' page to enable/disable individual metrics.
* Fixed races that could cause occasional crashes when loading a trace
from a permalink.
SDK:
* Fix undefined reference on ~TracingMuxerFake when building the SDK.
v17.0 - 2021-07-02:
Tracing service and probes:
* Fixed a bug in ftrace parsing of absolute timestamps
(RINGBUF_TYPE_TIME_STAMP), encountered on Linux kernels 5.9+.
* Fixed a bug in --save-for-bugreport causing 0-length traces if the
selected trace declared one or more triggers in the config.
* Fixed a bug in tracebox causing the PERFETTO_PRODUCER_SOCK_NAME env
var to be ignored.
Trace Processor:
* Changed CORS headers of --httpd mode to allow only https://ui.perfetto.dev
and http://localhost:10000. This affects only CORS-aware browser clients.
* Added GPU frequency metrics.
UI:
* Fixed ADB connection issues ("unable to reset device") on Windows and Mac.
* Added caching of tracing in the cache storage so that the trace is
re-opened if a tab is killed (Chrome tab discarding or accidental CTRL+W).
SDK:
* Added support for writing track events using custom clock timestamps.
v16.1 - 2021-06-08:
Tracing service and probes:
* Cherry-pick of r.android.com/1716718 which missed the v16 branch cut and
fixed MSVC 2019 builds.
v16.0 - 2021-06-01:
Tracing service and probes:
* Added support for building most targets (including traced, SDK and
trace_processor_shell) from Windows using either clang-cl or MSVC 2019.
* Added tracebox, a monolithic binary to capture traces with one command
on Linux and older versions of Android (tested on Android Oreo).
* Added support for service-side field-level filtering of traces. The
consumer can pass a filter bytecode and ensure that non-allowed fields
are never emitted in output.
* Added reporting of service version and producer SDK version into the trace
and `perfetto --query`.
* Fixed compatibility with Android versions older than Pie (for sideloading)
which cause failures when trying to enable atrace categories.
Trace Processor:
* Added new RPC interface based on a bidirectional binary pipe. This allows
to simplify integration with out-of-process users. The existing --httpd
interface now exposes a single /rpc endpoint. Older endpoints are still
available for legacy clients.
* Added support for counters and instant events in JSON traces.
* Fixed support of displayTimeUnit in JSON traces.
UI:
* Added warning dialog when trying to use a trace_processor_shell --httpd
which is too old.
* Added warning dialog when trying to use a trace_processor_shell --httpd
RPC instance from more than one tab.
* Added links to convert the trace to JSON or systrace directly from the UI.
* Changed track sorting logic. Tracks are now sorted in groups (e.g.,
scheduling tracks, summary tracks, frame timeline tracks).
* Fixed crashes happening flakily when pushing traces via window.open().
v15.0 - 2021-05-05:
Tracing service and probes:
* Added support for {host,target}=aarch64 standalone builds.
* Added --background cmdline switch to traced and traced_probes services.
* Changed trigger_perfetto to ignore unknown command line arguments to
preserve forward compatibility.
* Added -a / --app cmdline argument to tools/record_android_trace.
Trace Processor:
* Added sanitisation of keys in nested debug annotation dictionaries.
* Changed Android startup metric: count CPU time of JIT thread pool, report
timestamp of activities during startup.
* Changed android_surfaceflinger metric, added missed frame counters.
* Changed version of SQLite to 3.35.4.
* Fixed importing of JSON traces with decimal (sub-us) timestamp.
* Fixed prepending "debug." prefix to debug annotations with non-interned
names.
UI:
* Added support to visualize the lifetime of individual dmabuf allocations
as async slices (datasource: already existing ftrace dmabuf event).
* Fixed visualization of unfinished slices to extend to the end of the
viewport.
SDK:
* Added support for passing arbitrary number of debug annotations to
TRACE_EVENT and combining them with lambdas.
* Added support for writing typed TrackEvent arguments using TRACE_EVENT
inline without lambdas.
* Changed ConvertTimestampToTraceTimeNs to be a member of
TraceTimestampTraits<T> struct instead of a standalone function.
* Changed TracedValue to use nested DebugAnnotation proto instead of
DebugAnnotation::NestedValue.
v14.0 - 2021-04-01:
Tracing service and probes:
* Added support for polling power rails on Android from the newer
IPowerStats AIDL interface (previously using only the HAL interface).
* Fixed native heap profiler crash when ABI of heapprofd and profiled
process mismatch.
* Changed encoding format of Anroid managed heap profiler to reduce heap
dump sizes by delta-encoding object IDs.
Trace Processor:
* Added activity create/resume, layout inflation and resource timings to
the Android startup metric.
* Added chrome metadata key/value pairs (e.g. chrome version) into the
`metadata` table with 'cr-' prefixed keys.
* Added dma-buf-based memory metrics reporting total/avg/min/max dmabuf
allocation per-dmabuf-heap and per-process.
* Removed |force_full_sort| flag from config. This has been replaced
by setting the sorting mode to force a full sort.
UI:
* Added tools/symbolize-ui-crash script to resolve crash reports via
TypeScript source maps.
* Fixed newlines when copying Android event log lines into the clipboard.
* Fixed crash when selecting "Did not finish" slices.
* Fixed OOM dialog to give actionable instructions when opening large traces
rather than suggesting to file a bug.
SDK:
* Added /meson.build for bundling /sdk/perfetto.{cc,h} in Meson builds.
* Added support for counter trace points with the TRACE_COUNTER macro.
v13.0 - 2021-03-01:
Tracing service and probes:
* Added ability to sample callstacks using kernel tracepoints as timebase.
* Added abililty to record the perf timebase counter values into the trace,
both combined callstack+counter or counter-only.
* Added abillity to trigger traces based on VM pressure on Android. Requires
a dedicated tracing instance in $tracefs/instances/mm_events.
Trace Processor:
* Added sorting mode to trace processor config to specify how trace
processor should sort events. The |force_full_sort| flag has been
deprecated (with replacement) and will be removed in the next version.
* Added ingestion of frame timeline events into the
{expected,actual}_frame_timeline_slice tables.
* Added support for Mali's trace_marker_write ftrace event.
* Added memory metric based on newer android_fastrpc kernel events.
UI:
* Added flow events support for instant events and async tracks.
* Added support for Android frame timeline events. They allow inspecting
end-to-end expected vs actual app-to-surfaceflinger frame times.
* Added ability to switch between Canary and Stable channels in the UI.
* Added ability to drag&drop to open trace files.
* Changed UI serving infrastructure, old ui versions can be now retrieved by
directly opening https://ui.perfetto.dev/v12.1.269/ .
* Removed thread state track for threads that have no activity.
SDK:
* Use process start time hashed with the process id as a unique process
identifier, allowing multiple independent users of the SDK in the same
process to interleave their events on shared tracks.
* Record process and thread names into the trace.
* Add ring buffer tracing support, i.e., periodic clearing of incremental
state.
Misc:
* Convert python scripts to python3.
v12.1 - 2021-02-01:
Misc:
* Fixed CHANGELOG which was missed in the 12.0 branch cut, causing
mis-labeling of the version code in the v12.x branch as v11.0..N
v12.0 - 2021-02-01:
Tracing service and probes:
* Added more helpful error messages if the client library is used without
having been initialized.
* Added //tools/record_android_trace script to facilitate recording traces
from Android devices, automating start + stop-via-ctrl+c + pull + open.
* Added auto-attachment of traces to Android bugreports if dumpstate is
invoked when a trace with bugreport_score > 0 is running.
SDK:
* Added ability to customize the timestamp of events via
ConvertTimestampToTraceTimeNs().
* Fixed support for category names that contain a space.
Trace Processor:
* Added ingestion and query support for Android end-to-end frame timing
events through the {actual, expected}_frame_timeline_slice tables.
* Added time-to-reportFullyDrawn (Android's API) to startup metrics.
* Fixed excessive memory usage when decoding traces containing callstacks
(https://github.com/google/perfetto/issues/83).
UI:
* Added ability to inspect the full trace config string from the
'Info and stats' page.
* Fixed 'TABLE/VIEW XXX already exists' in the Metrics page when running the
same metric twice.
* Fixed sorting of tracks using numeric sorting instead of lexicographic:
Thread {1, 2, 10, 11, 20} rather than Thread {1, 10, 11, 2, 20}.
* Fixed CSP-related bug that was preventing the UI to work on Firefox.
* Changed max zoom resolution to allow to zoom to sub-us events.
v11.0 - 2021-01-01:
Tracing service and probes:
* Added trace packet interceptor API for rerouting trace data into
non-Perfetto systems.
* Added support for printing track events to the console.
* Added a way to observe track event tracing sessions starting and
stopping.
Trace Processor:
* Added "ancestor_slice" and "experimental_ancestor_stack_profile_callsite"
table functions to look up ancestors of CPU stack samples in profiler
tables.
* Added power metric reporting suspend/resume time periods.
UI:
* Fixed CPU time calculation in example queries.
* Added tracks to debug Android SystemUI jank.
v10.0 - 2020-12-01:
Tracing service and probes:
* Fixed crash of tracing service if a client is unresponsive on the IPC
channel. Clients are disconnected if they don't respond to IPCs for 10s.
* Added cmdline arguments for integration within ChromeOS system image
(--{producer,consumer}-socket-{group,mode} for chmod-ing sockets).
* Changed path lookup logic for traced socket. /run/perfetto/ is used if the
directory exists, falling back on /tmp/ otherwise.
* Added support for kernel frame symbolization to the traced_perf callstack
sampler.
* Added support for resolving ftrace event arguments that require
symbolization against printk_format.
Trace Processor:
* Added .read command to inject a SQL query file, similar to the -q cmdline.
* Added trace-based metrics to root cause jank in Android System UI.
* Added symbolization support for ELF files on Windows for heap and
callstack profilers.
* Added support for symbolizing names of workqueue ftrace events.
* Improved Android startup metric with activity restart time.
UI:
* Added support for navigating flows with Ctrl+[ / Ctr+].
* Improved query result panel, moved to the bottom group allowing
simultaneous query result and timeline views.
* Fixed data corruption when recording traces via the WebUSB-based Record
page in the UI.
v9.0 - 2020-11-01:
Tracing service and probes:
* Added support for recording traces from a system service through the
client API.
* The client library now reconnects producers automatically if the
connection to the tracing service is lost. Also fixed crashes in ongoing
tracing sessions when a disconnect occurs.
* Added support for dpu and g2d ftrace events.
* Enabled commit batching and producer side patching of chunks.
* Add support for symbolizing kernel symbols for ftrace events.
Trace Processor:
* Fixed type affinity of string columns.
UI:
* Added initial support for running metrics from the UI.
* Added support for displaying all flows when a slice or area is selected.
* Highlight nodes that match the 'focus' string in the flamegraph.
* Added search within slice args.
* Fixed details panel height and moved query panel into details panel.
* Enabled re-sharing of postMessage traces by echoing back the original URL.
* Improved record page error messages.
v8.0 - 2020-10-01:
Tracing service and probes:
* Added API for querying registered data sources and their capabilities.
* Added support for profiling heap allocations on Linux via LD_PRELOAD.
* Fixed possible race when initializing the consumer library.
* Fixed subtle bugs on systems with 16KB system pages.
Trace Processor:
* Added a table which lists available metrics.
* Added Python bindings on PyPi in the 'perfetto' package.
* Added support for running trace_processor_shell on Android.
* Added per-process metrics for GPU memory usage.
* Added support for exporting flow events to JSON.
* Added dynamic tables for navigating between slices of flows.
UI:
* Changed time marking: horizontal selection doesn't gray out anymore,
pressing 'm' marks the range.
* Added initial support for displaying flow event arrows.
* Improved ordering of all thread tracks under process grouping.
* Fixed UI crashes due to metric errors
* Fixed selection of thread state slices.
v7.0 - 2020-09-01:
Tracing service and probes:
* Added auto-reconnection to the SDK. Tracing::Initialize() now retries in
the background, instead of failing, if the tracing service is unrechable.
* Added support for recording cpuhp (CPU hotplug) ftrace events.
* Fixed heap profiling unwinding on multi-ABI systems.
* Fixed reporting of live objects in the native heap profiler when using
--dump-at-max.
* Fixed crash when writing trace events with field nesting level > 10.
Trace Processor:
* Added Python bindings, see
https://perfetto.dev/docs/analysis/trace-processor#python-api .
* Added ingestion for Chrome instant events and Chrome flow events.
* Added ingestion for Android GPU memory events and sched_blocked_reason.
* Added WebView power metric.
* Added support for WSL1 where Async I/O is not available.
* Improved detection of Android suspend/resume events.
UI:
* Added GPU memory recording controls and ingestion code. Requires a recent
Android 12+ kernel.
* Added details panel for flow events, showed when the user selects a slice
involved in a flow (arrows in the UI are still being worked on).
* Added instant events rendering.
* Added Google Analytics.
* Fixed I/O thread-states in 4.14 kernels to deal with the removal of
wake-kill using sched_blocked_reason.
* Fixed "Perfetto UI started debugging this browser" showing when opening
the UI and the Chrome extension is installed.
Misc:
* Update language to comply with Android's inclusive language guidance.
v6.0 - 2020-08-01:
Tracing service and probes:
* Added ftrace thermal events.
* Added support for custom allocators to the heap profiler. Allows
developers to report memory allocations that are not done through malloc.
* Added detailed timestamping of key tracing session events.
* Added support for building tracing services on CrOS (system-wide tracing).
* Fixed filtering out of stale ftrace data that predates the beginning of
the tracing session.
Trace Processor:
* Improved profile symbolizer. PERFETTO_SYMBOLIZER_MODE=index discovers
symbol files by build id rather than name.
* Added screen-state Android metrics.
UI:
* Added 'Info and stats' page to debug data losses and trace stats.
* Added full cmdline to process detail panel.
* Improved performance of async tracks using quantized queries.
* Improved performance of counter and slice tracks for long traces by
pre-caching quantized track data.
* Improved actionablility of crash dialog when the Wasm module OOMs.
v5.0 - 2020-07-01:
Tracing service and probes:
* Added gpu_mem_total ftrace event.
* Added TrustZone (scm start/end) event.
* Added protos for GPU memory tracking and updated render stages proto.
* Added time_in_state probe for Android (CPU time broken down by frequency).
Trace Processor:
* Added ingestion of IRQ and SoftIRQ events.
* Added ingestion of workqueue events. KAddr symbolization still missing.
* Added ingestion of voltage regulators and board clock change events.
* Added ingestion of new ION ion_buffer_create/destroy events.
* Added ingestion of TrustZone (scm start/end) events.
* Added SurfaceFlinger derived events (tracking of missed frames).
* Changed parsing of scheduler task state on 4.14 kernels.
* Changed importing of Java heap graphs: allow partial dumps.
* Improved performance of the SQL query engine.
UI:
* Added dedicated query page for custom SQL queries.
* Added navigation links for Binder slices.
* Removed overview summary mode when zoomed out.
* Fixed recording page when targeting Android P.
* Improved slice pan/zoom performance by quantizing.