# Panda Tracing This document describes **Panda trace** subsystem. The subsystem provides API for creating *tracepoints* to track key points in the runtime. The subsystem uses the `ftrace` ring buffer to record the trace. ## API Trace API is described in libpandabase/trace/trace.h file. It supports tracing a scope execution time and tracking a parameter value. ### Usage examples: ```cpp ... #include "trace/trace.h" ... void FunctionA() { trace::ScopedTrace scoped_trace("Loading file"); ... } void FunctionB() { trace::ScopedTrace scoped_trace(__func__); ... } void FunctionC() { SCOPED_TRACE_STREAM << "Trace: " << __func__; ... } void FunctionD() { trace::BeginTracePoint(__func__); ... trace::EndTracePoint(); } void FunctionE(int allocated_bytes) { trace::IntTracePoint("Heap Size", allocated_bytes); ... } ``` ## Recording trace To record and view a trace, do the following steps: 1. Enable tracing by the command: ```bash sudo scripts/trace_enable.sh <output_file> <trace_time_in_seconds> ``` 2. Launch the runtime with extra environment variable: ```bash PANDA_TRACE=1 panda <args> ``` 3. Stop tracing by ^C if the trace time is still running out. 4. Load <output_file> in Chrome at `chrome://tracing` address.