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