• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// AUTOGENERATED - DO NOT EDIT
2// ---------------------------
3// This file has been generated by
4// AOSP://external/perfetto/tools/gen_merged_protos
5// merging the perfetto config protos.
6// This fused proto is intended to be copied in:
7//  - Android tree, for statsd.
8//  - Google internal repos.
9
10syntax = "proto2";
11
12package perfetto.protos;
13
14// Begin of protos/perfetto/common/android_log_constants.proto
15
16// Values from NDK's android/log.h.
17enum AndroidLogId {
18  LID_DEFAULT = 0;  // MAIN.
19  LID_RADIO = 1;
20  LID_EVENTS = 2;
21  LID_SYSTEM = 3;
22  LID_CRASH = 4;
23  LID_STATS = 5;
24  LID_SECURITY = 6;
25  LID_KERNEL = 7;
26}
27
28enum AndroidLogPriority {
29  PRIO_UNSPECIFIED = 0;
30  PRIO_UNUSED = 1;  // _DEFAULT, but should never be seen in logs.
31  PRIO_VERBOSE = 2;
32  PRIO_DEBUG = 3;
33  PRIO_INFO = 4;
34  PRIO_WARN = 5;
35  PRIO_ERROR = 6;
36  PRIO_FATAL = 7;
37}
38
39// End of protos/perfetto/common/android_log_constants.proto
40
41// Begin of protos/perfetto/common/sys_stats_counters.proto
42
43// When editing entries here remember also to update "sys_stats_counters.h" with
44// the corresponding string definitions for the actual /proc files parser.
45
46// Counter definitions for Linux's /proc/meminfo.
47enum MeminfoCounters {
48  MEMINFO_UNSPECIFIED = 0;
49  MEMINFO_MEM_TOTAL = 1;
50  MEMINFO_MEM_FREE = 2;
51  MEMINFO_MEM_AVAILABLE = 3;
52  MEMINFO_BUFFERS = 4;
53  MEMINFO_CACHED = 5;
54  MEMINFO_SWAP_CACHED = 6;
55  MEMINFO_ACTIVE = 7;
56  MEMINFO_INACTIVE = 8;
57  MEMINFO_ACTIVE_ANON = 9;
58  MEMINFO_INACTIVE_ANON = 10;
59  MEMINFO_ACTIVE_FILE = 11;
60  MEMINFO_INACTIVE_FILE = 12;
61  MEMINFO_UNEVICTABLE = 13;
62  MEMINFO_MLOCKED = 14;
63  MEMINFO_SWAP_TOTAL = 15;
64  MEMINFO_SWAP_FREE = 16;
65  MEMINFO_DIRTY = 17;
66  MEMINFO_WRITEBACK = 18;
67  MEMINFO_ANON_PAGES = 19;
68  MEMINFO_MAPPED = 20;
69  MEMINFO_SHMEM = 21;
70  MEMINFO_SLAB = 22;
71  MEMINFO_SLAB_RECLAIMABLE = 23;
72  MEMINFO_SLAB_UNRECLAIMABLE = 24;
73  MEMINFO_KERNEL_STACK = 25;
74  MEMINFO_PAGE_TABLES = 26;
75  MEMINFO_COMMIT_LIMIT = 27;
76  MEMINFO_COMMITED_AS = 28;
77  MEMINFO_VMALLOC_TOTAL = 29;
78  MEMINFO_VMALLOC_USED = 30;
79  MEMINFO_VMALLOC_CHUNK = 31;
80  MEMINFO_CMA_TOTAL = 32;
81  MEMINFO_CMA_FREE = 33;
82}
83
84// Counter definitions for Linux's /proc/vmstat.
85enum VmstatCounters {
86  VMSTAT_UNSPECIFIED = 0;
87  VMSTAT_NR_FREE_PAGES = 1;
88  VMSTAT_NR_ALLOC_BATCH = 2;
89  VMSTAT_NR_INACTIVE_ANON = 3;
90  VMSTAT_NR_ACTIVE_ANON = 4;
91  VMSTAT_NR_INACTIVE_FILE = 5;
92  VMSTAT_NR_ACTIVE_FILE = 6;
93  VMSTAT_NR_UNEVICTABLE = 7;
94  VMSTAT_NR_MLOCK = 8;
95  VMSTAT_NR_ANON_PAGES = 9;
96  VMSTAT_NR_MAPPED = 10;
97  VMSTAT_NR_FILE_PAGES = 11;
98  VMSTAT_NR_DIRTY = 12;
99  VMSTAT_NR_WRITEBACK = 13;
100  VMSTAT_NR_SLAB_RECLAIMABLE = 14;
101  VMSTAT_NR_SLAB_UNRECLAIMABLE = 15;
102  VMSTAT_NR_PAGE_TABLE_PAGES = 16;
103  VMSTAT_NR_KERNEL_STACK = 17;
104  VMSTAT_NR_OVERHEAD = 18;
105  VMSTAT_NR_UNSTABLE = 19;
106  VMSTAT_NR_BOUNCE = 20;
107  VMSTAT_NR_VMSCAN_WRITE = 21;
108  VMSTAT_NR_VMSCAN_IMMEDIATE_RECLAIM = 22;
109  VMSTAT_NR_WRITEBACK_TEMP = 23;
110  VMSTAT_NR_ISOLATED_ANON = 24;
111  VMSTAT_NR_ISOLATED_FILE = 25;
112  VMSTAT_NR_SHMEM = 26;
113  VMSTAT_NR_DIRTIED = 27;
114  VMSTAT_NR_WRITTEN = 28;
115  VMSTAT_NR_PAGES_SCANNED = 29;
116  VMSTAT_WORKINGSET_REFAULT = 30;
117  VMSTAT_WORKINGSET_ACTIVATE = 31;
118  VMSTAT_WORKINGSET_NODERECLAIM = 32;
119  VMSTAT_NR_ANON_TRANSPARENT_HUGEPAGES = 33;
120  VMSTAT_NR_FREE_CMA = 34;
121  VMSTAT_NR_SWAPCACHE = 35;
122  VMSTAT_NR_DIRTY_THRESHOLD = 36;
123  VMSTAT_NR_DIRTY_BACKGROUND_THRESHOLD = 37;
124  VMSTAT_PGPGIN = 38;
125  VMSTAT_PGPGOUT = 39;
126  VMSTAT_PGPGOUTCLEAN = 40;
127  VMSTAT_PSWPIN = 41;
128  VMSTAT_PSWPOUT = 42;
129  VMSTAT_PGALLOC_DMA = 43;
130  VMSTAT_PGALLOC_NORMAL = 44;
131  VMSTAT_PGALLOC_MOVABLE = 45;
132  VMSTAT_PGFREE = 46;
133  VMSTAT_PGACTIVATE = 47;
134  VMSTAT_PGDEACTIVATE = 48;
135  VMSTAT_PGFAULT = 49;
136  VMSTAT_PGMAJFAULT = 50;
137  VMSTAT_PGREFILL_DMA = 51;
138  VMSTAT_PGREFILL_NORMAL = 52;
139  VMSTAT_PGREFILL_MOVABLE = 53;
140  VMSTAT_PGSTEAL_KSWAPD_DMA = 54;
141  VMSTAT_PGSTEAL_KSWAPD_NORMAL = 55;
142  VMSTAT_PGSTEAL_KSWAPD_MOVABLE = 56;
143  VMSTAT_PGSTEAL_DIRECT_DMA = 57;
144  VMSTAT_PGSTEAL_DIRECT_NORMAL = 58;
145  VMSTAT_PGSTEAL_DIRECT_MOVABLE = 59;
146  VMSTAT_PGSCAN_KSWAPD_DMA = 60;
147  VMSTAT_PGSCAN_KSWAPD_NORMAL = 61;
148  VMSTAT_PGSCAN_KSWAPD_MOVABLE = 62;
149  VMSTAT_PGSCAN_DIRECT_DMA = 63;
150  VMSTAT_PGSCAN_DIRECT_NORMAL = 64;
151  VMSTAT_PGSCAN_DIRECT_MOVABLE = 65;
152  VMSTAT_PGSCAN_DIRECT_THROTTLE = 66;
153  VMSTAT_PGINODESTEAL = 67;
154  VMSTAT_SLABS_SCANNED = 68;
155  VMSTAT_KSWAPD_INODESTEAL = 69;
156  VMSTAT_KSWAPD_LOW_WMARK_HIT_QUICKLY = 70;
157  VMSTAT_KSWAPD_HIGH_WMARK_HIT_QUICKLY = 71;
158  VMSTAT_PAGEOUTRUN = 72;
159  VMSTAT_ALLOCSTALL = 73;
160  VMSTAT_PGROTATED = 74;
161  VMSTAT_DROP_PAGECACHE = 75;
162  VMSTAT_DROP_SLAB = 76;
163  VMSTAT_PGMIGRATE_SUCCESS = 77;
164  VMSTAT_PGMIGRATE_FAIL = 78;
165  VMSTAT_COMPACT_MIGRATE_SCANNED = 79;
166  VMSTAT_COMPACT_FREE_SCANNED = 80;
167  VMSTAT_COMPACT_ISOLATED = 81;
168  VMSTAT_COMPACT_STALL = 82;
169  VMSTAT_COMPACT_FAIL = 83;
170  VMSTAT_COMPACT_SUCCESS = 84;
171  VMSTAT_COMPACT_DAEMON_WAKE = 85;
172  VMSTAT_UNEVICTABLE_PGS_CULLED = 86;
173  VMSTAT_UNEVICTABLE_PGS_SCANNED = 87;
174  VMSTAT_UNEVICTABLE_PGS_RESCUED = 88;
175  VMSTAT_UNEVICTABLE_PGS_MLOCKED = 89;
176  VMSTAT_UNEVICTABLE_PGS_MUNLOCKED = 90;
177  VMSTAT_UNEVICTABLE_PGS_CLEARED = 91;
178  VMSTAT_UNEVICTABLE_PGS_STRANDED = 92;
179}
180// End of protos/perfetto/common/sys_stats_counters.proto
181
182// Begin of protos/perfetto/config/android/android_log_config.proto
183
184message AndroidLogConfig {
185  repeated AndroidLogId log_ids = 1;
186
187  reserved 2;  // Was |poll_ms|, deprecated.
188
189  // If set ignores all log messages whose prio is < the given value.
190  optional AndroidLogPriority min_prio = 3;
191
192  // If non-empty ignores all log messages whose tag doesn't match one of the
193  // specified values.
194  repeated string filter_tags = 4;
195}
196
197// End of protos/perfetto/config/android/android_log_config.proto
198
199// Begin of protos/perfetto/config/chrome/chrome_config.proto
200
201// When editing this file run ./tools/gen_tracing_cpp_headers_from_protos.py
202// to reflect changes in the corresponding C++ headers.
203
204message ChromeConfig {
205  optional string trace_config = 1;
206
207  // When enabled, the data source should only fill in fields in the output that
208  // are not potentially privacy sensitive.
209  optional bool privacy_filtering_enabled = 2;
210}
211
212// End of protos/perfetto/config/chrome/chrome_config.proto
213
214// Begin of protos/perfetto/config/data_source_config.proto
215
216// When editing this file run ./tools/gen_tracing_cpp_headers_from_protos.py
217// to reflect changes in the corresponding C++ headers.
218
219// The configuration that is passed to each data source when starting tracing.
220message DataSourceConfig {
221  // Data source unique name, e.g., "linux.ftrace". This must match
222  // the name passed by the data source when it registers (see
223  // RegisterDataSource()).
224  optional string name = 1;
225
226  // The index of the logging buffer where TracePacket(s) will be stored.
227  // This field doesn't make a major difference for the Producer(s). The final
228  // logging buffers, in fact, are completely owned by the Service. We just ask
229  // the Producer to copy this number into the chunk headers it emits, so that
230  // the Service can quickly identify the buffer where to move the chunks into
231  // without expensive lookups on its fastpath.
232  optional uint32 target_buffer = 2;
233
234  // Set by the service to indicate the duration of the trace.
235  // DO NOT SET in consumer as this will be overridden by the service.
236  optional uint32 trace_duration_ms = 3;
237
238  // Set by the service to indicate whether this tracing session has extra
239  // guardrails.
240  // DO NOT SET in consumer as this will be overridden by the service.
241  optional bool enable_extra_guardrails = 6;
242
243  // Set by the service to indicate which tracing session the data source
244  // belongs to. The intended use case for this is checking if two data sources,
245  // one of which produces metadata for the other one, belong to the same trace
246  // session and hence should be linked together.
247  // This field was introduced in Aug 2018 after Android P.
248  optional uint64 tracing_session_id = 4;
249
250  // Keeep the lower IDs (up to 99) for fields that are *not* specific to
251  // data-sources and needs to be processed by the traced daemon.
252
253  optional FtraceConfig ftrace_config = 100;
254  optional ChromeConfig chrome_config = 101;
255  optional InodeFileConfig inode_file_config = 102;
256  optional ProcessStatsConfig process_stats_config = 103;
257  optional SysStatsConfig sys_stats_config = 104;
258  optional HeapprofdConfig heapprofd_config = 105;
259  optional AndroidPowerConfig android_power_config = 106;
260  optional AndroidLogConfig android_log_config = 107;
261  optional PackagesListConfig packages_list_config = 109;
262
263  // This is a fallback mechanism to send a free-form text config to the
264  // producer. In theory this should never be needed. All the code that
265  // is part of the platform (i.e. traced service) is supposed to *not* truncate
266  // the trace config proto and propagate unknown fields. However, if anything
267  // in the pipeline (client or backend) ends up breaking this forward compat
268  // plan, this field will become the escape hatch to allow future data sources
269  // to get some meaningful configuration.
270  optional string legacy_config = 1000;
271
272  // This field is only used for testing.
273  optional TestConfig for_testing =
274      268435455;  // 2^28 - 1, max field id for protos supported by Java.
275}
276
277// End of protos/perfetto/config/data_source_config.proto
278
279// Begin of protos/perfetto/config/ftrace/ftrace_config.proto
280
281// When editing this file run ./tools/gen_tracing_cpp_headers_from_protos.py
282// to reflect changes in the corresponding C++ headers.
283
284message FtraceConfig {
285  repeated string ftrace_events = 1;
286  repeated string atrace_categories = 2;
287  repeated string atrace_apps = 3;
288  // *Per-CPU* buffer size.
289  optional uint32 buffer_size_kb = 10;
290  optional uint32 drain_period_ms = 11;
291}
292
293// End of protos/perfetto/config/ftrace/ftrace_config.proto
294
295// Begin of protos/perfetto/config/inode_file/inode_file_config.proto
296
297// When editing this file run ./tools/gen_tracing_cpp_headers_from_protos.py
298// to reflect changes in the corresponding C++ headers.
299
300message InodeFileConfig {
301  message MountPointMappingEntry {
302    optional string mountpoint = 1;
303    repeated string scan_roots = 2;
304  }
305
306  // How long to pause between batches.
307  optional uint32 scan_interval_ms = 1;
308
309  // How long to wait before the first scan in order to accumulate inodes.
310  optional uint32 scan_delay_ms = 2;
311
312  // How many inodes to scan in one batch.
313  optional uint32 scan_batch_size = 3;
314
315  // Do not scan for inodes not found in the static map.
316  optional bool do_not_scan = 4;
317
318  // If non-empty, only scan inodes corresponding to block devices named in
319  // this list.
320  repeated string scan_mount_points = 5;
321
322  // When encountering an inode belonging to a block device corresponding
323  // to one of the mount points in this map, scan its scan_roots instead.
324  repeated MountPointMappingEntry mount_point_mapping = 6;
325}
326
327// End of protos/perfetto/config/inode_file/inode_file_config.proto
328
329// Begin of protos/perfetto/config/power/android_power_config.proto
330
331message AndroidPowerConfig {
332  enum BatteryCounters {
333    BATTERY_COUNTER_UNSPECIFIED = 0;
334    BATTERY_COUNTER_CHARGE = 1;            // Coulomb counter.
335    BATTERY_COUNTER_CAPACITY_PERCENT = 2;  // Charge (%).
336    BATTERY_COUNTER_CURRENT = 3;           // Instantaneous current.
337    BATTERY_COUNTER_CURRENT_AVG = 4;       // Avg current.
338  }
339  optional uint32 battery_poll_ms = 1;
340  repeated BatteryCounters battery_counters = 2;
341
342  // Where available enables per-power-rail measurements.
343  optional bool collect_power_rails = 3;
344}
345
346// End of protos/perfetto/config/power/android_power_config.proto
347
348// Begin of protos/perfetto/config/process_stats/process_stats_config.proto
349
350// When editing this file run ./tools/gen_tracing_cpp_headers_from_protos.py
351// to reflect changes in the corresponding C++ headers.
352
353message ProcessStatsConfig {
354  enum Quirks {
355    QUIRKS_UNSPECIFIED = 0;
356
357    // This has been deprecated and ignored as per 2018-05-01. Full scan at
358    // startup is now disabled by default and can be re-enabled using the
359    // |scan_all_processes_on_start| arg.
360    DISABLE_INITIAL_DUMP = 1 [deprecated = true];
361
362    DISABLE_ON_DEMAND = 2;
363  }
364
365  repeated Quirks quirks = 1;
366
367  // If enabled all processes will be scanned and dumped when the trace starts.
368  optional bool scan_all_processes_on_start = 2;
369
370  // If enabled thread names are also recoded (this is redundant if sched_switch
371  // is enabled).
372  optional bool record_thread_names = 3;
373
374  // If > 0 samples counters (see process_stats.proto) from
375  // /proc/pid/status and oom_score_adj every X ms.
376  // This is required to be > 100ms to avoid excessive CPU usage.
377  // TODO(primiano): add CPU cost for change this value.
378  optional uint32 proc_stats_poll_ms = 4;
379
380  // If empty samples stats for all processes. If non empty samples stats only
381  // for processes matching the given string in their argv0 (i.e. the first
382  // entry of /proc/pid/cmdline).
383  // TODO(primiano): implement this feature.
384  // repeated string proc_stats_filter = 5;
385
386  // This is required to be either = 0 or a multiple of |proc_stats_poll_ms|
387  // (default: |proc_stats_poll_ms|). If = 0, will be set to
388  // |proc_stats_poll_ms|. Non-multiples will be rounded down to the nearest
389  // multiple.
390  optional uint32 proc_stats_cache_ttl_ms = 6;
391}
392
393// End of protos/perfetto/config/process_stats/process_stats_config.proto
394
395// Begin of protos/perfetto/config/sys_stats/sys_stats_config.proto
396
397// When editing this file run ./tools/gen_tracing_cpp_headers_from_protos.py
398// to reflect changes in the corresponding C++ headers.
399
400// This file defines the configuration for the Linux /proc poller data source,
401// which injects counters in the trace.
402// Counters that are needed in the trace must be explicitly listed in the
403// *_counters fields. This is to avoid spamming the trace with all counters
404// at all times.
405// The sampling rate is configurable. All polling rates (*_period_ms) need
406// to be integer multiples of each other.
407// OK:     [10ms, 10ms, 10ms],  [10ms, 20ms, 10ms],  [10ms, 20ms, 60ms]
408// Not OK: [10ms, 10ms, 11ms],  [10ms, 15ms, 20ms]
409message SysStatsConfig {
410  // Polls /proc/meminfo every X ms, if non-zero.
411  // This is required to be > 10ms to avoid excessive CPU usage.
412  // Cost: 0.3 ms [read] + 0.07 ms [parse + trace injection]
413  optional uint32 meminfo_period_ms = 1;
414
415  // Only the counters specified below are reported.
416  repeated MeminfoCounters meminfo_counters = 2;
417
418  // Polls /proc/vmstat every X ms, if non-zero.
419  // This is required to be > 10ms to avoid excessive CPU usage.
420  // Cost: 0.2 ms [read] + 0.3 ms [parse + trace injection]
421  optional uint32 vmstat_period_ms = 3;
422  repeated VmstatCounters vmstat_counters = 4;
423
424  // Pols /proc/stat every X ms, if non-zero.
425  // This is required to be > 10ms to avoid excessive CPU usage.
426  // Cost: 4.1 ms [read] + 1.9 ms [parse + trace injection]
427  optional uint32 stat_period_ms = 5;
428  enum StatCounters {
429    STAT_UNSPECIFIED = 0;
430    STAT_CPU_TIMES = 1;
431    STAT_IRQ_COUNTS = 2;
432    STAT_SOFTIRQ_COUNTS = 3;
433    STAT_FORK_COUNT = 4;
434  }
435  repeated StatCounters stat_counters = 6;
436}
437
438// End of protos/perfetto/config/sys_stats/sys_stats_config.proto
439
440// Begin of protos/perfetto/config/test_config.proto
441
442// When editing this file run ./tools/gen_tracing_cpp_headers_from_protos.py
443// to reflect changes in the corresponding C++ headers.
444
445// The configuration for a fake producer used in tests.
446message TestConfig {
447  message DummyFields {
448    optional uint32 field_uint32 = 1;
449    optional int32 field_int32 = 2;
450    optional uint64 field_uint64 = 3;
451    optional int64 field_int64 = 4;
452    optional fixed64 field_fixed64 = 5;
453    optional sfixed64 field_sfixed64 = 6;
454    optional fixed32 field_fixed32 = 7;
455    optional sfixed32 field_sfixed32 = 8;
456    optional double field_double = 9;
457    optional float field_float = 10;
458    optional sint64 field_sint64 = 11;
459    optional sint32 field_sint32 = 12;
460    optional string field_string = 13;
461    optional bytes field_bytes = 14;
462  }
463
464  // The number of messages the fake producer should send.
465  optional uint32 message_count = 1;
466
467  // The maximum number of messages which should be sent each second.
468  // The actual obserced speed may be lower if the producer is unable to
469  // work fast enough.
470  // If this is zero or unset, the producer will send as fast as possible.
471  optional uint32 max_messages_per_second = 2;
472
473  // The seed value for a simple multiplicative congruential pseudo-random
474  // number sequence.
475  optional uint32 seed = 3;
476
477  // The size of each message in bytes. Should be greater than or equal 5 to
478  // account for the number of bytes needed to encode the random number and a
479  // null byte for the string.
480  optional uint32 message_size = 4;
481
482  // Whether the producer should send a event batch when the data source is
483  // is initially registered.
484  optional bool send_batch_on_register = 5;
485
486  optional DummyFields dummy_fields = 6;
487}
488
489// End of protos/perfetto/config/test_config.proto
490
491// Begin of protos/perfetto/config/trace_config.proto
492
493// When editing this file run ./tools/gen_tracing_cpp_headers_from_protos
494// to reflect changes in the corresponding C++ headers.
495
496// The overall config that is used when starting a new tracing session through
497// ProducerPort::StartTracing().
498// It contains the general config for the logging buffer(s) and the configs for
499// all the data source being enabled.
500//
501// Next id: 26.
502message TraceConfig {
503  message BufferConfig {
504    optional uint32 size_kb = 1;
505
506    reserved 2;  // |page_size|, now deprecated.
507    reserved 3;  // |optimize_for|, now deprecated.
508
509    enum FillPolicy {
510      UNSPECIFIED = 0;
511
512      // Default behavior. The buffer operates as a conventional ring buffer.
513      // If the writer is faster than the reader (or if the reader reads only
514      // after tracing is stopped) newly written packets will overwrite old
515      // packets.
516      RING_BUFFER = 1;
517
518      // Behaves like RING_BUFFER as long as there is space in the buffer or
519      // the reader catches up with the writer. As soon as the writer hits
520      // an unread chunk, it stops accepting new data in the buffer.
521      DISCARD = 2;
522    }
523    optional FillPolicy fill_policy = 4;
524  }
525  repeated BufferConfig buffers = 1;
526
527  message DataSource {
528    // Filters and data-source specific config. It contains also the unique name
529    // of the data source, the one passed in the  DataSourceDescriptor when they
530    // register on the service.
531    optional protos.DataSourceConfig config = 1;
532
533    // Optional. If multiple producers (~processes) expose the same data source
534    // and |producer_name_filter| != "", the data source is enabled only for
535    // producers whose names match any of the producer_name_filter below.
536    // The |producer_name_filter| has to be an exact match. (TODO(primiano):
537    // support wildcards or regex).
538    // This allows to enable a data source only for specific processes.
539    // The "repeated" field has OR sematics: specifying a filter ["foo", "bar"]
540    // will enable data source on both "foo" and "bar" (if existent).
541    repeated string producer_name_filter = 2;
542  }
543  repeated DataSource data_sources = 2;
544
545  // Config for builtin trace packets emitted by perfetto like trace stats,
546  // system info, etc.
547  message BuiltinDataSource {
548    // Disable emitting clock timestamps into the trace.
549    optional bool disable_clock_snapshotting = 1;
550
551    optional bool disable_trace_config = 2;
552
553    optional bool disable_system_info = 3;
554  }
555  optional BuiltinDataSource builtin_data_sources = 20;
556
557  // If specified, the trace will be stopped |duration_ms| after starting.
558  // However in case of traces with triggers, see
559  // TriggerConfig.trigger_timeout_ms instead.
560  optional uint32 duration_ms = 3;
561
562  // This is set when --dropbox is passed to the Perfetto command line client
563  // and enables guardrails that limit resource usage for traces requested
564  // by statsd.
565  optional bool enable_extra_guardrails = 4;
566
567  enum LockdownModeOperation {
568    LOCKDOWN_UNCHANGED = 0;
569    LOCKDOWN_CLEAR = 1;
570    LOCKDOWN_SET = 2;
571  }
572  // Reject producers that are not running under the same UID as the tracing
573  // service.
574  optional LockdownModeOperation lockdown_mode = 5;
575
576  message ProducerConfig {
577    // Identifies the producer for which this config is for.
578    optional string producer_name = 1;
579
580    // Specifies the preferred size of the shared memory buffer. If the size is
581    // larger than the max size, the max will be used. If it is smaller than
582    // the page size or doesn't fit pages evenly into it, it will fall back to
583    // the size specified by the producer or finally the default shared memory
584    // size.
585    optional uint32 shm_size_kb = 2;
586
587    // Specifies the preferred size of each page in the shared memory buffer.
588    // Must be an integer multiple of 4K.
589    optional uint32 page_size_kb = 3;
590  }
591
592  repeated ProducerConfig producers = 6;
593
594  // Contains statsd-specific metadata about an alert associated with the trace.
595  message StatsdMetadata {
596    // The identifier of the alert which triggered this trace.
597    optional int64 triggering_alert_id = 1;
598    // The uid which registered the triggering configuration with statsd.
599    optional int32 triggering_config_uid = 2;
600    // The identifier of the config which triggered the alert.
601    optional int64 triggering_config_id = 3;
602    // The identifier of the subscription which triggered this trace.
603    optional int64 triggering_subscription_id = 4;
604  }
605
606  // Statsd-specific metadata.
607  optional StatsdMetadata statsd_metadata = 7;
608
609  // When true, the EnableTracing() request must also provide a file descriptor.
610  // The service will then periodically read packets out of the trace buffer and
611  // store it into the passed file.
612  optional bool write_into_file = 8;
613
614  // Optional. If non-zero tunes the write period. A min value of 100ms is
615  // enforced (i.e. smaller values are ignored).
616  optional uint32 file_write_period_ms = 9;
617
618  // Optional. When non zero the periodic write stops once at most X bytes
619  // have been written into the file. Tracing is disabled when this limit is
620  // reached, even if |duration_ms| has not been reached yet.
621  optional uint64 max_file_size_bytes = 10;
622
623  // Contains flags which override the default values of the guardrails inside
624  // Perfetto. These values are only affect userdebug builds.
625  message GuardrailOverrides {
626    // Override the default limit (in bytes) for uploading data to server within
627    // a 24 hour period.
628    optional uint64 max_upload_per_day_bytes = 1;
629  }
630
631  optional GuardrailOverrides guardrail_overrides = 11;
632
633  // When true, data sources are not started until an explicit call to
634  // StartTracing() on the consumer port. This is to support early
635  // initialization and fast trace triggering. This can be used only when the
636  // Consumer explicitly triggers the StartTracing() method.
637  // This should not be used in a remote trace config via statsd, doing so will
638  // result in a hung trace session.
639  optional bool deferred_start = 12;
640
641  // When set, it periodically issues a Flush() to all data source, forcing them
642  // to commit their data into the tracing service. This can be used for
643  // quasi-real-time streaming mode and to guarantee some partial ordering of
644  // events in the trace in windows of X ms.
645  optional uint32 flush_period_ms = 13;
646
647  // Wait for this long for producers to acknowledge flush requests.
648  // Default 5s.
649  optional uint32 flush_timeout_ms = 14;
650
651  reserved 15;  // |disable_clock_snapshotting| moved.
652
653  // Android-only. If set, sends an intent to the Traceur system app when the
654  // trace ends to notify it about the trace readiness.
655  optional bool notify_traceur = 16;
656
657  // Triggers allow producers to start or stop the tracing session when an event
658  // occurs.
659  //
660  // For example if we are tracing probabilistically, most traces will be
661  // uninteresting. Triggers allow us to keep only the interesting ones such as
662  // those traces during which the device temperature reached a certain
663  // threshold. In this case the producer can activate a trigger to keep
664  // (STOP_TRACING) the trace, otherwise it can also begin a trace
665  // (START_TRACING) because it knows something is about to happen.
666  message TriggerConfig {
667    enum TriggerMode {
668      UNSPECIFIED = 0;
669
670      // When this mode is chosen, data sources are not started until one of the
671      // |triggers| are received. This supports early initialization and fast
672      // starting of the tracing system. On triggering, the session will then
673      // record for |stop_delay_ms|. However if no trigger is seen
674      // after |trigger_timeout_ms| the session will be stopped and no data will
675      // be returned.
676      START_TRACING = 1;
677
678      // When this mode is chosen, the session will be started via the normal
679      // EnableTracing() & StartTracing(). If no trigger is ever seen
680      // the session will be stopped after |trigger_timeout_ms| and no data will
681      // be returned. However if triggered the trace will stop after
682      // |stop_delay_ms| and any data in the buffer will be returned to the
683      // consumer.
684      STOP_TRACING = 2;
685    }
686    optional TriggerMode trigger_mode = 1;
687
688    message Trigger {
689      // The producer must specify this name to activate the trigger.
690      optional string name = 1;
691
692      // The a std::regex that will match the producer that can activate this
693      // trigger. This is optional. If unset any producers can activate this
694      // trigger.
695      optional string producer_name_regex = 2;
696
697      // After a trigger is received either in START_TRACING or STOP_TRACING
698      // mode then the trace will end |stop_delay_ms| after triggering.
699      optional uint32 stop_delay_ms = 3;
700    }
701    // A list of triggers which are related to this configuration. If ANY
702    // trigger is seen then an action will be performed based on |trigger_mode|.
703    repeated Trigger triggers = 2;
704
705    // Required and must be positive if a TriggerConfig is specified. This is
706    // how long this TraceConfig should wait for a trigger to arrive. After this
707    // period of time if no trigger is seen the TracingSession will be cleaned
708    // up.
709    optional uint32 trigger_timeout_ms = 3;
710  }
711  optional TriggerConfig trigger_config = 17;
712
713  // When this is non-empty the perfetto command line tool will ignore the rest
714  // of this TraceConfig and instead connect to the perfetto service as a
715  // producer and send these triggers, potentially stopping or starting traces
716  // that were previous configured to use a TriggerConfig.
717  repeated string activate_triggers = 18;
718
719  // Configuration for trace contents that reference earlier trace data. For
720  // example, a data source might intern strings, and emit packets containing
721  // {interned id : string} pairs. Future packets from that data source can then
722  // use the interned ids instead of duplicating the raw string contents. The
723  // trace parser will then need to use that interning table to fully interpret
724  // the rest of the trace.
725  message IncrementalStateConfig {
726    // If nonzero, notify eligible data sources to clear their incremental state
727    // periodically, with the given period. The notification is sent only to
728    // data sources that have |handles_incremental_state_clear| set in their
729    // DataSourceDescriptor. The notification requests that the data source
730    // stops referring to past trace contents. This is particularly useful when
731    // tracing in ring buffer mode, where it is not exceptional to overwrite old
732    // trace data.
733    //
734    // Warning: this time-based global clearing is likely to be removed in the
735    // future, to be replaced with a smarter way of sending the notifications
736    // only when necessary.
737    optional uint32 clear_period_ms = 1;
738  }
739  optional IncrementalStateConfig incremental_state_config = 21;
740
741  // Additional guardrail used by the Perfetto command line client.
742  // On user builds when --dropbox is set perfetto will refuse to trace unless
743  // this is also set.
744  // Added in Q.
745  optional bool allow_user_build_tracing = 19;
746
747  // If set the tracing service will ensure there is at most one tracing session
748  // with this key.
749  optional string unique_session_name = 22;
750
751  // Compress trace with the given method. Best effort.
752  enum CompressionType {
753    COMPRESSION_TYPE_UNSPECIFIED = 0;
754    COMPRESSION_TYPE_DEFLATE = 1;
755  };
756  optional CompressionType compression_type = 24;
757
758  // Android-only. Debug builds only. Not for general use. If set, saves a
759  // Dropbox trace into an incident. This field is read by perfetto_cmd, rather
760  // than the tracing service. All fields are mandatory.
761  message IncidentReportConfig {
762    optional string destination_package = 1;
763    optional string destination_class = 2;
764    // Level of filtering in the requested incident. See |Destination| in
765    // frameworks/base/core/proto/android/privacy.proto.
766    optional int32 privacy_level = 3;
767    // If true, do not write the trace into dropbox (i.e. incident only).
768    // Otherwise, write to both dropbox and incident.
769    optional bool skip_dropbox = 4;
770  }
771  optional IncidentReportConfig incident_report_config = 25;
772}
773
774// End of protos/perfetto/config/trace_config.proto
775
776// Begin of protos/perfetto/config/profiling/heapprofd_config.proto
777
778// Configuration for go/heapprofd.
779message HeapprofdConfig {
780  message ContinuousDumpConfig {
781    // ms to wait before first dump.
782    optional uint32 dump_phase_ms = 5;
783    // ms to wait between following dumps.
784    optional uint32 dump_interval_ms = 6;
785  };
786
787  // Set to 1 for perfect accuracy.
788  // Otherwise, sample every sample_interval_bytes on average.
789  //
790  // See https://docs.perfetto.dev/#/heapprofd?id=sampling-interval for more
791  // details.
792  optional uint64 sampling_interval_bytes = 1;
793
794  // E.g. surfaceflinger, com.android.phone
795  // This input is normalized in the following way: if it contains slashes,
796  // everything up to the last slash is discarded. If it contains "@",
797  // everything after the first @ is discared.
798  // E.g. /system/bin/surfaceflinger@1.0 normalizes to surfaceflinger.
799  // This transformation is also applied to the processes' command lines when
800  // matching.
801  repeated string process_cmdline = 2;
802
803  // For watermark based triggering or local debugging.
804  repeated uint64 pid = 4;
805
806  // Profile all processes eligible for profiling on the system.
807  // See https://docs.perfetto.dev/#/heapprofd?id=target-processes for which
808  // processes are eligible.
809  //
810  // On unmodified userdebug builds, this will lead to system crashes. Zygote
811  // will crash when trying to launch a new process as it will have an
812  // unexpected open socket to heapprofd.
813  //
814  // heapprofd will likely be overloaded by the amount of data for low
815  // sampling intervals.
816  optional bool all = 5;
817
818  // Do not emit function names for mappings starting with this prefix.
819  // E.g. /system to not emit symbols for any system libraries.
820  repeated string skip_symbol_prefix = 7;
821
822  // Dump once at the end of the trace, emitting the heap dump at maximum
823  // memory usage.
824  // optional bool retain_max = 5;  // TODO(fmayer): Implement
825
826  // Dump at a predefined interval.
827  optional ContinuousDumpConfig continuous_dump_config = 6;
828
829  // Size of the shared memory buffer between the profiled processes and
830  // heapprofd. Defaults to 8 MiB. If larger than 500 MiB, truncated to 500
831  // MiB.
832  //
833  // Needs to be:
834  // * at least 8192,
835  // * a power of two,
836  // * a multiple of 4096.
837  optional uint64 shmem_size_bytes = 8;
838
839  // When the shmem buffer is full, block the client instead of ending the
840  // trace. Use with caution as this will significantly slow down the target
841  // process.
842  optional bool block_client = 9;
843}
844
845// End of protos/perfetto/config/profiling/heapprofd_config.proto
846
847// Begin of protos/perfetto/config/android/packages_list_config.proto
848
849// Data source that lists details (such as version code) about packages on an
850// Android device.
851message PackagesListConfig {
852  // If not empty, emit info about only the following list of package names
853  // (exact match, no regex). Otherwise, emit info about all packages.
854  repeated string package_name_filter = 1;
855}
856
857// End of protos/perfetto/config/android/packages_list_config.proto
858