| # Perfetto trace config | 
 |  | 
 | *** note | 
 | **This doc is WIP**, stay tuned. | 
 | <!-- TODO(primiano): write trace config doc. --> | 
 | *** | 
 |  | 
 |  | 
 |  | 
 | The [`TraceConfig`](/protos/perfetto/config/trace_config.proto) is an extensible | 
 | protobuf message, sent by the consumer to the service, that defines: | 
 | - The number and size of the trace buffer. | 
 | - The duration of the trace. | 
 | - [optionally] a file descriptor for the output trace and a periodic write | 
 |   interval. If omitted the trace is kept only in memory.   | 
 | - The producers involved in the trace session. | 
 | - The data sources involved in the trace session. | 
 | - The configuration of each data source. | 
 | - The crossbar mapping between each data source and the trace buffers. | 
 |  | 
 | Each data source can create its own specialized schema for the config, like | 
 | [this](/protos/perfetto/config/ftrace/ftrace_config.proto) | 
 |  | 
 | See [`trace_config.proto`](/protos/perfetto/config/trace_config.proto) for more | 
 | details. | 
 |  | 
 | For convenience, a vulcanized trace config where all the nested protobuf | 
 | sub-message definitions are squashed together is available in | 
 | [`perfetto_config.proto`](/protos/perfetto/config/perfetto_config.proto). | 
 |  | 
 |  | 
 | Specifying a custom trace config | 
 | -------------------------------- | 
 | ```bash | 
 | cat > /tmp/config.txpb <<EOF | 
 | # This is a text-encoded protobuf for /protos/perfetto/config/trace_config.proto | 
 | duration_ms: 10000 | 
 |  | 
 | # For long traces set the following variables. It will periodically drain the | 
 | # trace buffers into the output file, allowing to save a trace larger than the | 
 | # buffer size. | 
 | write_into_file: true | 
 | file_write_period_ms: 5000 | 
 |  | 
 | buffers { | 
 |   size_kb: 10240 | 
 | } | 
 |  | 
 | data_sources { | 
 |   config { | 
 |     name: "linux.ftrace" | 
 |     target_buffer: 0 | 
 |     ftrace_config { | 
 |       buffer_size_kb: 40 # Kernel ftrace buffer size. | 
 |       ftrace_events: "sched_switch" | 
 |       ftrace_events: "print" | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 | data_sources { | 
 |   config { | 
 |     name: "linux.process_stats" | 
 |     target_buffer: 0 | 
 |   } | 
 | } | 
 | EOF | 
 |  | 
 | protoc=$(pwd)/out/android/gcc_like_host/protoc | 
 |  | 
 | $protoc --encode=perfetto.protos.TraceConfig \ | 
 |         -I$(pwd)/external/perfetto \ | 
 |         $(pwd)/external/perfetto/protos/perfetto/config/perfetto_config.proto \ | 
 |         < /tmp/config.txpb \ | 
 |         > /tmp/config.pb | 
 |  | 
 | cat /tmp/config.pb | adb shell perfetto -c - -o /data/misc/perfetto-traces/trace.pb | 
 | adb shell cat /data/misc/perfetto-traces/trace.pb > /tmp/trace.pb | 
 | out/android/trace_to_text json < /tmp/trace.pb > /tmp/trace.json | 
 |  | 
 | # The file can now be viewed in chrome://tracing | 
 | ``` |