1b1994897Sopenharmony_ci# Panda Tracing 2b1994897Sopenharmony_ci 3b1994897Sopenharmony_ciThis 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. 4b1994897Sopenharmony_ci 5b1994897Sopenharmony_ci## API 6b1994897Sopenharmony_ciTrace API is described in libpandabase/trace/trace.h file. It supports tracing a scope execution time and tracking a parameter value. 7b1994897Sopenharmony_ci### Usage examples: 8b1994897Sopenharmony_ci```cpp 9b1994897Sopenharmony_ci... 10b1994897Sopenharmony_ci#include "trace/trace.h" 11b1994897Sopenharmony_ci... 12b1994897Sopenharmony_ci 13b1994897Sopenharmony_civoid FunctionA() { 14b1994897Sopenharmony_ci trace::ScopedTrace scoped_trace("Loading file"); 15b1994897Sopenharmony_ci ... 16b1994897Sopenharmony_ci} 17b1994897Sopenharmony_ci 18b1994897Sopenharmony_civoid FunctionB() { 19b1994897Sopenharmony_ci trace::ScopedTrace scoped_trace(__func__); 20b1994897Sopenharmony_ci ... 21b1994897Sopenharmony_ci} 22b1994897Sopenharmony_ci 23b1994897Sopenharmony_civoid FunctionC() { 24b1994897Sopenharmony_ci SCOPED_TRACE_STREAM << "Trace: " << __func__; 25b1994897Sopenharmony_ci ... 26b1994897Sopenharmony_ci} 27b1994897Sopenharmony_ci 28b1994897Sopenharmony_civoid FunctionD() { 29b1994897Sopenharmony_ci trace::BeginTracePoint(__func__); 30b1994897Sopenharmony_ci ... 31b1994897Sopenharmony_ci trace::EndTracePoint(); 32b1994897Sopenharmony_ci} 33b1994897Sopenharmony_ci 34b1994897Sopenharmony_civoid FunctionE(int allocated_bytes) { 35b1994897Sopenharmony_ci trace::IntTracePoint("Heap Size", allocated_bytes); 36b1994897Sopenharmony_ci ... 37b1994897Sopenharmony_ci} 38b1994897Sopenharmony_ci``` 39b1994897Sopenharmony_ci 40b1994897Sopenharmony_ci## Recording trace 41b1994897Sopenharmony_ci 42b1994897Sopenharmony_ciTo record and view a trace, do the following steps: 43b1994897Sopenharmony_ci 44b1994897Sopenharmony_ci1. Enable tracing by the command: 45b1994897Sopenharmony_ci```bash 46b1994897Sopenharmony_cisudo scripts/trace_enable.sh <output_file> <trace_time_in_seconds> 47b1994897Sopenharmony_ci``` 48b1994897Sopenharmony_ci2. Launch the runtime with extra environment variable: 49b1994897Sopenharmony_ci```bash 50b1994897Sopenharmony_ciPANDA_TRACE=1 panda <args> 51b1994897Sopenharmony_ci``` 52b1994897Sopenharmony_ci3. Stop tracing by ^C if the trace time is still running out. 53b1994897Sopenharmony_ci4. Load <output_file> in Chrome at `chrome://tracing` address. 54