-
Notifications
You must be signed in to change notification settings - Fork 0
/
perfetto_trace.proto
15408 lines (13604 loc) · 535 KB
/
perfetto_trace.proto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
// This was taken from https://github.com/google/perfetto/blob/main/protos/perfetto/trace/perfetto_trace.proto
// AUTOGENERATED - DO NOT EDIT
// ---------------------------
// This file has been generated by
// AOSP://external/perfetto/tools/gen_merged_protos
// merging the perfetto config protos.
// This fused proto is intended to be copied in:
// - Android tree, for statsd.
// - Google internal repos.
syntax = "proto2";
package perfetto.protos;
option go_package = "github.com/google/perfetto/perfetto_proto";
// Begin of protos/perfetto/common/ftrace_descriptor.proto
message FtraceDescriptor {
message AtraceCategory {
optional string name = 1;
optional string description = 2;
}
// Report the available atrace categories.
//
// Used by Traceur via `perfetto --query`.
repeated AtraceCategory atrace_categories = 1;
}
// End of protos/perfetto/common/ftrace_descriptor.proto
// Begin of protos/perfetto/common/gpu_counter_descriptor.proto
// Description of GPU counters.
// This message is sent by a GPU counter producer to specify the counters
// available in the hardware.
message GpuCounterDescriptor {
// Logical groups for a counter. This is used in the UI to present the
// related counters together.
enum GpuCounterGroup {
UNCLASSIFIED = 0;
SYSTEM = 1;
VERTICES = 2;
FRAGMENTS = 3;
PRIMITIVES = 4;
// Includes counters relating to caching and bandwidth.
MEMORY = 5;
COMPUTE = 6;
}
message GpuCounterSpec {
optional uint32 counter_id = 1;
optional string name = 2;
optional string description = 3;
// MeasureUnit unit (deprecated)
reserved 4;
oneof peak_value {
int64 int_peak_value = 5;
double double_peak_value = 6;
}
repeated MeasureUnit numerator_units = 7;
repeated MeasureUnit denominator_units = 8;
optional bool select_by_default = 9;
repeated GpuCounterGroup groups = 10;
}
repeated GpuCounterSpec specs = 1;
// Allow producer to group counters into block to represent counter islands.
// A capacity may be specified to indicate the number of counters that can be
// enable simultaneously in that block.
message GpuCounterBlock {
// required. Unique ID for the counter group.
optional uint32 block_id = 1;
// optional. Number of counters supported by the block. No limit if unset.
optional uint32 block_capacity = 2;
// optional. Name of block.
optional string name = 3;
// optional. Description for the block.
optional string description = 4;
// list of counters that are part of the block.
repeated uint32 counter_ids = 5;
}
repeated GpuCounterBlock blocks = 2;
// optional. Minimum sampling period supported by the producer in
// nanoseconds.
optional uint64 min_sampling_period_ns = 3;
// optional. Maximum sampling period supported by the producer in
// nanoseconds.
optional uint64 max_sampling_period_ns = 4;
// optional. The producer supports counter sampling by instrumenting the
// command buffer.
optional bool supports_instrumented_sampling = 5;
// next id: 41
enum MeasureUnit {
NONE = 0;
BIT = 1;
KILOBIT = 2;
MEGABIT = 3;
GIGABIT = 4;
TERABIT = 5;
PETABIT = 6;
BYTE = 7;
KILOBYTE = 8;
MEGABYTE = 9;
GIGABYTE = 10;
TERABYTE = 11;
PETABYTE = 12;
HERTZ = 13;
KILOHERTZ = 14;
MEGAHERTZ = 15;
GIGAHERTZ = 16;
TERAHERTZ = 17;
PETAHERTZ = 18;
NANOSECOND = 19;
MICROSECOND = 20;
MILLISECOND = 21;
SECOND = 22;
MINUTE = 23;
HOUR = 24;
VERTEX = 25;
PIXEL = 26;
TRIANGLE = 27;
PRIMITIVE = 38;
FRAGMENT = 39;
MILLIWATT = 28;
WATT = 29;
KILOWATT = 30;
JOULE = 31;
VOLT = 32;
AMPERE = 33;
CELSIUS = 34;
FAHRENHEIT = 35;
KELVIN = 36;
// Values should be out of 100.
PERCENT = 37;
INSTRUCTION = 40;
}
}
// End of protos/perfetto/common/gpu_counter_descriptor.proto
// Begin of protos/perfetto/common/track_event_descriptor.proto
message TrackEventCategory {
optional string name = 1;
optional string description = 2;
repeated string tags = 3;
}
message TrackEventDescriptor {
repeated TrackEventCategory available_categories = 1;
}
// End of protos/perfetto/common/track_event_descriptor.proto
// Begin of protos/perfetto/common/data_source_descriptor.proto
// This message is sent from Producer(s) to the tracing Service when registering
// to advertise their capabilities. It describes the structure of tracing
// protos that will be produced by the data source and the supported filters.
message DataSourceDescriptor {
// e.g., "linux.ftrace", "chromium.tracing"
optional string name = 1;
// When non-zero, this is a unique ID within the scope of the Producer for
// this data source (it is NOT globally unique). This is useful to
// differentiate between data sources with matching names when calling
// UpdateDataSource(). This field has been introduced in November 2021
// (v22, Android T) and is not supported on older versions.
optional uint64 id = 7;
// When true the data source is expected to ack the stop request through the
// NotifyDataSourceStopped() IPC. This field has been introduced after
// Android P in Jul 2018 and is not supported on older versions.
optional bool will_notify_on_stop = 2;
// When true the data source is expected to ack the start request through the
// NotifyDataSourceStarted() IPC. This field has been introduced after
// Android P in March 2019 and is not supported on older versions.
optional bool will_notify_on_start = 3;
// If true, opt into receiving the ClearIncrementalState() IPC. This should be
// set if the data source writes packets that refer to previous trace
// contents, and knows how to stop referring to the already-emitted data.
optional bool handles_incremental_state_clear = 4;
// If true, indicates that the data source does nothing upon Flush. This
// allows the service to reduce the flush-related IPC traffic and better deal
// with frozen producers (see go/perfetto-frozen). This is usually the case
// for data sources like 'track_event' that don't have access to the various
// thread task runners to post a flush task and rely purely on server-side
// scraping.
// Introduced in v39 / Android V.
optional bool no_flush = 9;
// Optional specification about available GPU counters.
optional GpuCounterDescriptor gpu_counter_descriptor = 5 [lazy = true];
optional TrackEventDescriptor track_event_descriptor = 6 [lazy = true];
optional FtraceDescriptor ftrace_descriptor = 8 [lazy = true];
}
// End of protos/perfetto/common/data_source_descriptor.proto
// Begin of protos/perfetto/common/tracing_service_state.proto
// Reports the state of the tracing service. Used to gather details about the
// data sources connected.
// See ConsumerPort::QueryServiceState().
message TracingServiceState {
// Describes a producer process.
message Producer {
// Unique ID of the producer (monotonic counter).
optional int32 id = 1;
// Typically matches the process name.
optional string name = 2;
// Unix pid of the remote process. Supported only on Linux-based systems.
// Introduced in v24 / Android T.
optional int32 pid = 5;
// Unix uid of the remote process.
optional int32 uid = 3;
// The version of the client library used by the producer.
// This is a human readable string with and its format varies depending on
// the build system and the repo (standalone vs AOSP).
// This is intended for human debugging only.
optional string sdk_version = 4;
}
// Describes a data source registered by a producer. Data sources are listed
// regardless of the fact that they are being used or not.
message DataSource {
// Descriptor passed by the data source when calling RegisterDataSource().
optional DataSourceDescriptor ds_descriptor = 1;
// ID of the producer, as per Producer.id.
optional int32 producer_id = 2;
}
message TracingSession {
// The TracingSessionID.
optional uint64 id = 1;
// The Unix uid of the consumer that started the session.
// This is meaningful only if the caller is root. In all other cases only
// tracing sessions that match the caller UID will be displayed.
optional int32 consumer_uid = 2;
// Internal state of the tracing session.
// These strings are FYI only and subjected to change.
optional string state = 3;
// The unique_session_name as set in the trace config (might be empty).
optional string unique_session_name = 4;
// The number and size of each buffer.
repeated uint32 buffer_size_kb = 5;
// Duration, as specified in the TraceConfig.duration_ms.
optional uint32 duration_ms = 6;
// Number of data sources involved in the session.
optional uint32 num_data_sources = 7;
// Time when the session was started, in the CLOCK_REALTIME domain.
// Available only on Linux-based systems.
optional int64 start_realtime_ns = 8;
// The fields below have been introduced in v42.
// The bugreport_score, as set in TraceConfig.bugreport_score.
optional int32 bugreport_score = 9;
// As per TraceConfig.bugreport_filename.
optional string bugreport_filename = 10;
// If true, the session is in the STARTED state. If false the session is in
// any other state (see `state` field).
optional bool is_started = 11;
}
// Lists all the producers connected.
repeated Producer producers = 1;
// Lists the data sources available.
repeated DataSource data_sources = 2;
// Lists the tracing sessions active AND owned by a consumer that has the same
// UID of the caller (or all of them if the caller is root).
// Introduced in v24 / Android T.
repeated TracingSession tracing_sessions = 6;
// This is always set to true from v24 and beyond. This flag is only used to
// tell the difference between: (1) talking to a recent service which happens
// to have no tracing session active; (2) talking to an older version of the
// service which will never report any tracing session.
optional bool supports_tracing_sessions = 7;
// Total number of tracing sessions.
optional int32 num_sessions = 3;
// Number of tracing sessions in the started state. Always <= num_sessions.
optional int32 num_sessions_started = 4;
// The version of traced (the same returned by `traced --version`).
// This is a human readable string with and its format varies depending on
// the build system and the repo (standalone vs AOSP).
// This is intended for human debugging only.
optional string tracing_service_version = 5;
}
// End of protos/perfetto/common/tracing_service_state.proto
// Begin of protos/perfetto/common/builtin_clock.proto
enum BuiltinClock {
BUILTIN_CLOCK_UNKNOWN = 0;
BUILTIN_CLOCK_REALTIME = 1;
BUILTIN_CLOCK_REALTIME_COARSE = 2;
BUILTIN_CLOCK_MONOTONIC = 3;
BUILTIN_CLOCK_MONOTONIC_COARSE = 4;
BUILTIN_CLOCK_MONOTONIC_RAW = 5;
BUILTIN_CLOCK_BOOTTIME = 6;
BUILTIN_CLOCK_TSC = 9;
BUILTIN_CLOCK_MAX_ID = 63;
reserved 7, 8;
}
// End of protos/perfetto/common/builtin_clock.proto
// Begin of protos/perfetto/config/android/android_game_intervention_list_config.proto
// Data source that lists game modes and game interventions of games
// on an Android device.
message AndroidGameInterventionListConfig {
// If not empty, emit info about only the following list of package names
// (exact match, no regex). Otherwise, emit info about all packages.
repeated string package_name_filter = 1;
}
// End of protos/perfetto/config/android/android_game_intervention_list_config.proto
// Begin of protos/perfetto/config/android/android_input_event_config.proto
// Custom configuration for the "android.input.inputevent" data source.
//
// NOTE: Input traces can only be taken on debuggable (userdebug/eng) builds!
//
// Next ID: 5
message AndroidInputEventConfig {
// Trace modes are tracing presets that are included in the system.
enum TraceMode {
// Preset mode for maximal tracing.
// WARNING: This will bypass all privacy measures on debuggable builds, and
// will record all
// input events processed by the system, regardless of the context
// in which they were processed. It should only be used for tracing
// on a local device or for tests. It should NEVER be used for
// field tracing.
TRACE_MODE_TRACE_ALL = 0;
// Use the tracing rules defined in this config to specify what events to
// trace.
TRACE_MODE_USE_RULES = 1;
}
// The tracing mode to use. If unspecified, it will default to
// TRACE_MODE_USE_RULES.
optional TraceMode mode = 1;
// The level of tracing that should be applied to an event.
enum TraceLevel {
// Do not trace the input event.
TRACE_LEVEL_NONE = 0;
// Trace the event as a redacted event, where certain sensitive fields are
// omitted from the trace, including the coordinates of pointer events and
// the key/scan codes of key events.
TRACE_LEVEL_REDACTED = 1;
// Trace the complete event.
TRACE_LEVEL_COMPLETE = 2;
}
// A rule that specifies the TraceLevel for an event based on matching
// conditions. All matchers in the rule are optional. To trigger this rule, an
// event must match all of its specified matchers (i.e. the matchers function
// like a series of conditions connected by a logical 'AND' operator). A rule
// with no specified matchers will match all events. Next ID: 6
message TraceRule {
// The trace level to be used for events that trigger this rule.
// If unspecified, TRACE_LEVEL_NONE will be used by default.
optional TraceLevel trace_level = 1;
// --- Optional Matchers ---
// Package matchers
//
// Respectively matches if all or any of the target apps for this event are
// contained in the specified list of package names.
//
// Intended usage:
// - Use match_all_packages to selectively allow tracing for the listed
// packages.
// - Use match_any_packages to selectively deny tracing for certain
// packages.
//
// WARNING: Great care must be taken when designing rules for field tracing!
// This is because each event is almost always sent to more than
// one app.
// For example, when allowing tracing for a package that has a
// spy window
// over the display (e.g. SystemUI) using match_any_packages,
// essentially all input will be recorded on that display. This is
// because the events will be sent to the spy as well as the
// foreground app, and regardless of what the foreground app is,
// the event will end up being traced.
// Alternatively, when attempting to block tracing for specific
// packages using
// match_all_packages, no events will likely be blocked. This is
// because the event will also be sent to other apps (such as, but
// not limited to, ones with spy windows), so the matcher will not
// match unless all other targets are also listed under the
// match_all_packages list.
repeated string match_all_packages = 2;
repeated string match_any_packages = 3;
// Matches if the event is secure, which means that at least one of the
// targets of this event is using the window flag FLAG_SECURE.
optional bool match_secure = 4;
// Matches if there was an active IME connection while this event was being
// processed.
optional bool match_ime_connection_active = 5;
}
// The list of rules to use to determine the trace level of events.
// Each event will be traced using the TraceLevel of the first rule that it
// triggers from this list. The rules are evaluated in the order in which they
// are specified. If an event does not match any of the rules,
// TRACE_LEVEL_NONE will be used by default.
repeated TraceRule rules = 2;
// --- Control flags ---
// Trace input events processed by the system as they are being dispatched
// to application windows. All trace rules will apply.
// - If this flag is used without enabling trace_dispatcher_window_dispatch,
// it will
// trace InputDispatcher's inbound events (which does not include events
// synthesized within InputDispatcher) that match the rules.
// - If used with trace_dispatcher_window_dispatch, all inbound and outbound
// events
// matching the rules, including all events synthesized within
// InputDispatcher, will be traced.
optional bool trace_dispatcher_input_events = 3;
// Trace details about which windows the system is sending each input event
// to. All trace rules will apply.
optional bool trace_dispatcher_window_dispatch = 4;
}
// End of protos/perfetto/config/android/android_input_event_config.proto
// Begin of protos/perfetto/common/android_log_constants.proto
// Values from NDK's android/log.h.
enum AndroidLogId {
// MAIN.
LID_DEFAULT = 0;
LID_RADIO = 1;
LID_EVENTS = 2;
LID_SYSTEM = 3;
LID_CRASH = 4;
LID_STATS = 5;
LID_SECURITY = 6;
LID_KERNEL = 7;
}
enum AndroidLogPriority {
PRIO_UNSPECIFIED = 0;
// _DEFAULT, but should never be seen in logs.
PRIO_UNUSED = 1;
PRIO_VERBOSE = 2;
PRIO_DEBUG = 3;
PRIO_INFO = 4;
PRIO_WARN = 5;
PRIO_ERROR = 6;
PRIO_FATAL = 7;
}
// End of protos/perfetto/common/android_log_constants.proto
// Begin of protos/perfetto/config/android/android_log_config.proto
message AndroidLogConfig {
repeated AndroidLogId log_ids = 1;
// Was |poll_ms|, deprecated.
reserved 2;
// If set ignores all log messages whose prio is < the given value.
optional AndroidLogPriority min_prio = 3;
// If non-empty ignores all log messages whose tag doesn't match one of the
// specified values.
repeated string filter_tags = 4;
}
// End of protos/perfetto/config/android/android_log_config.proto
// Begin of protos/perfetto/config/android/android_polled_state_config.proto
// Data source that polls for display state. This should only be used for
// backward-compatibility; AndroidSystemPropertyConfig should be preferred.
message AndroidPolledStateConfig {
// Frequency of polling. If absent the state will be recorded once, at the
// start of the trace.
// This is required to be > 100ms to avoid excessive CPU usage.
optional uint32 poll_ms = 1;
}
// End of protos/perfetto/config/android/android_polled_state_config.proto
// Begin of protos/perfetto/config/android/android_sdk_sysprop_guard_config.proto
// Data source that controls the system properties used to guard initialization
// of track_event producers (i.e. Skia) in apps using HWUI, and certain
// processes like SurfaceFlinger.
//
// This data source only tells Skia to initialized the Perfetto SDK and start
// routing data to the Track Event system instead of ATrace. For those events
// to actually show up in a trace, the track_event data source must be used as
// well. The Perfetto SDK cannot be de-initialized, so some long-lived apps and
// processes may need to be restarted for Skia to revert to using ATrace if
// Track Events are no longer desired.
//
// In addition to switching Skia to use Perfetto's track_event data source,
// this "guard" also controls Skia's "broad tracing", which removes Skia's
// internal tracing constraints and allows the track_event config to specify
// which categories should be traced. Filtering to the "skia.always" category
// *tag* in a track_event config can be used to re-enable the standard
// constraints typically used with ATrace.
//
// Data source name: android.sdk_sysprop_guard
// Introduced in Android 14 (U) QPR1.
// Next id: 4
message AndroidSdkSyspropGuardConfig {
// If true, configures SurfaceFlinger to initialize Skia's Perfetto
// integration with the track_event data source in RenderEngine.
// If false or omitted, the simpler ATrace fallback is used.
//
// NOTE: once enabled, Skia will only revert to ATrace if SurfaceFlinger is
// restarted.
//
// Specifically this sets the following system properties:
// - debug.tracing.ctl.renderengine.skia_tracing_enabled
// - debug.tracing.ctl.renderengine.skia_use_perfetto_track_events
//
// Does not affect actual track_event data *collection*, which must be
// configured seperately.
optional bool surfaceflinger_skia_track_events = 1;
// If true, configures HWUI apps to initialize Skia's Perfetto integration
// with the track_event data source. hwui_package_name_filter
// can be used to control which apps are affected.
// If false or omitted, the simpler ATrace fallback is used.
//
// NOTE: once enabled, Skia will only revert to ATrace if the app is
// restarted.
//
// ATTENTION: affects ALL HWUI APPS if hwui_package_name_filter is not set!
// If filtering is NOT set, this controls these GLOBAL system properties:
// - debug.tracing.ctl.hwui.skia_tracing_enabled
// - debug.tracing.ctl.hwui.skia_use_perfetto_track_events
// If filtering IS set, this controls these APP-SPECIFIC system properties,
// for each package listed in the filter:
// - debug.tracing.ctl.hwui.skia_tracing_enabled.<package.name>
// - debug.tracing.ctl.hwui.skia_use_perfetto_track_events.<package.name>
//
// Does not affect actual track_event data *collection*, which must be
// configured seperately.
optional bool hwui_skia_track_events = 2;
// If non-empty, hwui_skia_track_events applies to only the packages listed.
// Otherwise, hwui_skia_track_events applies globally to all HWUI apps.
repeated string hwui_package_name_filter = 3;
}
// End of protos/perfetto/config/android/android_sdk_sysprop_guard_config.proto
// Begin of protos/perfetto/config/android/android_system_property_config.proto
// Data source that polls for system properties.
message AndroidSystemPropertyConfig {
// Frequency of polling. If absent the state will be recorded once, at the
// start of the trace.
// This is required to be > 100ms to avoid excessive CPU usage.
optional uint32 poll_ms = 1;
// Properties to poll. All property names must start with "debug.tracing.".
repeated string property_name = 2;
}
// End of protos/perfetto/config/android/android_system_property_config.proto
// Begin of protos/perfetto/config/android/network_trace_config.proto
// Network tracing data source that records details on all packets sent or
// received by the network.
message NetworkPacketTraceConfig {
// Polling frequency in milliseconds. Network tracing writes to a fixed size
// ring buffer. The polling interval should be such that the ring buffer is
// unlikely to fill in that interval (or that filling is an acceptable risk).
// The minimum polling rate is 100ms (values below this are ignored).
// Introduced in Android 14 (U).
optional uint32 poll_ms = 1;
// The aggregation_threshold is the number of packets at which an event will
// switch from per-packet details to aggregate details. For example, a value
// of 50 means that if a particular event (grouped by the unique combinations
// of metadata fields: {interface, direction, uid, etc}) has fewer than 50
// packets, the exact timestamp and length are recorded for each packet. If
// there were 50 or more packets in an event, it would only record the total
// duration, packets, and length. A value of zero or unspecified will always
/// record per-packet details. A value of 1 always records aggregate details.
optional uint32 aggregation_threshold = 2;
// Specifies the maximum number of packet contexts to intern at a time. This
// prevents the interning table from growing too large and controls whether
// interning is enabled or disabled (a value of zero disables interning and
// is the default). When a data sources interning table reaches this amount,
// packet contexts will be inlined into NetworkPacketEvents.
optional uint32 intern_limit = 3;
// The following fields specify whether certain fields should be dropped from
// the output. Dropping fields improves normalization results, reduces the
// size of the interning table, and slightly reduces event size.
optional bool drop_local_port = 4;
optional bool drop_remote_port = 5;
optional bool drop_tcp_flags = 6;
}
// End of protos/perfetto/config/android/network_trace_config.proto
// Begin of protos/perfetto/config/android/packages_list_config.proto
// Data source that lists details (such as version code) about packages on an
// Android device.
message PackagesListConfig {
// If not empty, emit info about only the following list of package names
// (exact match, no regex). Otherwise, emit info about all packages.
repeated string package_name_filter = 1;
}
// End of protos/perfetto/config/android/packages_list_config.proto
// Begin of protos/perfetto/config/android/pixel_modem_config.proto
// Data source that records events from the modem.
message PixelModemConfig {
// Event group to record, as defined by the modem.
enum EventGroup {
EVENT_GROUP_UNKNOWN = 0;
// Events suitable for low bandwidth tracing only.
EVENT_GROUP_LOW_BANDWIDTH = 1;
// Events suitable for high and low bandwidth tracing.
EVENT_GROUP_HIGH_AND_LOW_BANDWIDTH = 2;
}
optional EventGroup event_group = 1;
// If set, record only events with these hashes.
repeated int64 pigweed_hash_allow_list = 2;
// If set and allow_list is not set, deny events with these hashes.
repeated int64 pigweed_hash_deny_list = 3;
}
// End of protos/perfetto/config/android/pixel_modem_config.proto
// Begin of protos/perfetto/common/protolog_common.proto
enum ProtoLogLevel {
PROTOLOG_LEVEL_UNDEFINED = 0;
PROTOLOG_LEVEL_DEBUG = 1;
PROTOLOG_LEVEL_VERBOSE = 2;
PROTOLOG_LEVEL_INFO = 3;
PROTOLOG_LEVEL_WARN = 4;
PROTOLOG_LEVEL_ERROR = 5;
PROTOLOG_LEVEL_WTF = 6;
}
// End of protos/perfetto/common/protolog_common.proto
// Begin of protos/perfetto/config/android/protolog_config.proto
// Custom configuration for the "android.protolog" data source.
// ProtoLog is a logging mechanism that is intented to be more efficient than
// logcat. This configures what logs to capture in the tracing instance.
message ProtoLogConfig {
enum TracingMode {
// When using the DEFAULT tracing mode, only log groups and levels specified
// in the group_overrides are traced.
DEFAULT = 0;
// When using the ENABLE_ALL tracing mode, all log groups and levels are
// traced, unless specified in the group_overrides.
ENABLE_ALL = 1;
}
// Specified the configurations for each of the logging groups. If none is
// specified for a group the defaults will be used.
repeated ProtoLogGroup group_overrides = 1;
// Specified what tracing mode to use for the tracing instance.
optional TracingMode tracing_mode = 2;
}
message ProtoLogGroup {
// The ProtoLog group name this configuration entry applies to.
optional string group_name = 1;
// Specify the level from which to start capturing protologs.
// e.g. if ProtoLogLevel.WARN is specified only warning, errors and fatal log
// message will be traced.
optional ProtoLogLevel log_from = 2;
// When set to true we will collect the stacktrace for each protolog message
// in this group that we are tracing.
optional bool collect_stacktrace = 3;
}
// End of protos/perfetto/config/android/protolog_config.proto
// Begin of protos/perfetto/config/android/surfaceflinger_layers_config.proto
// Custom configuration for the "android.surfaceflinger.layers" data source.
message SurfaceFlingerLayersConfig {
enum Mode {
MODE_UNSPECIFIED = 0;
// Trace layers snapshots. A snapshot is taken every time a layers change
// occurs.
MODE_ACTIVE = 1;
// Generate layers snapshots from the transactions kept in the
// SurfaceFlinger's internal ring buffer.
// The layers snapshots generation occurs when this data source is flushed.
MODE_GENERATED = 2;
// Trace a single layers snapshot.
MODE_DUMP = 3;
// Default mode (applied by SurfaceFlinger if no mode is specified).
// Same as MODE_GENERATED, but triggers the layers snapshots generation only when a bugreport
// is taken.
MODE_GENERATED_BUGREPORT_ONLY = 4;
}
optional Mode mode = 1;
enum TraceFlag {
TRACE_FLAG_UNSPECIFIED = 0;
TRACE_FLAG_INPUT = 0x02;
TRACE_FLAG_COMPOSITION = 0x04;
TRACE_FLAG_EXTRA = 0x08;
TRACE_FLAG_HWC = 0x10;
TRACE_FLAG_BUFFERS = 0x20;
TRACE_FLAG_VIRTUAL_DISPLAYS = 0x40;
// INPUT | COMPOSITION | EXTRA
TRACE_FLAG_ALL = 0x0e;
}
repeated TraceFlag trace_flags = 2;
}
// End of protos/perfetto/config/android/surfaceflinger_layers_config.proto
// Begin of protos/perfetto/config/android/surfaceflinger_transactions_config.proto
// Custom configuration for the "android.surfaceflinger.transactions" data
// source.
message SurfaceFlingerTransactionsConfig {
enum Mode {
MODE_UNSPECIFIED = 0;
// Default mode (applied by SurfaceFlinger if no mode is specified).
// SurfaceFlinger writes its internal ring buffer of transactions every time
// the data source is flushed. The ring buffer contains the SurfaceFlinger's
// initial state and the latest transactions.
MODE_CONTINUOUS = 1;
// SurfaceFlinger writes the initial state and then each incoming
// transaction until the data source is stopped.
MODE_ACTIVE = 2;
}
optional Mode mode = 1;
}
// End of protos/perfetto/config/android/surfaceflinger_transactions_config.proto
// Begin of protos/perfetto/config/android/windowmanager_config.proto
// Custom configuration for the "android.windowmanager" data source.
message WindowManagerConfig {
enum LogFrequency {
LOG_FREQUENCY_UNSPECIFIED = 0;
// Trace state snapshots when a frame is committed.
LOG_FREQUENCY_FRAME = 1;
// Trace state snapshots every time a transaction is committed.
LOG_FREQUENCY_TRANSACTION = 2;
}
optional LogFrequency log_frequency = 1;
enum LogLevel {
LOG_LEVEL_UNSPECIFIED = 0;
// Logs all elements with maximum amount of information.
LOG_LEVEL_VERBOSE = 1;
// Logs all elements but doesn't write all configuration data.
LOG_LEVEL_DEBUG = 2;
// Logs only visible elements, with the minimum amount of performance
// overhead
LOG_LEVEL_CRITICAL = 3;
}
optional LogLevel log_level = 2;
}
// End of protos/perfetto/config/android/windowmanager_config.proto
// Begin of protos/perfetto/config/chrome/chrome_config.proto
message ChromeConfig {
optional string trace_config = 1;
// When enabled, the data source should only fill in fields in the output that
// are not potentially privacy sensitive.
optional bool privacy_filtering_enabled = 2;
// Instead of emitting binary protobuf, convert the trace data to the legacy
// JSON format. Note that the trace data will still be returned as a series of
// TracePackets, but the embedded data will be JSON instead of serialized
// protobuf.
optional bool convert_to_legacy_json = 3;
// Priority of the tracing session client. A higher priority session may
// preempt a lower priority one in configurations where concurrent sessions
// aren't supported.
enum ClientPriority {
UNKNOWN = 0;
BACKGROUND = 1;
USER_INITIATED = 2;
}
optional ClientPriority client_priority = 4;
// Applicable only when using legacy JSON format.
// If |json_agent_label_filter| is not empty, only data pertaining to
// the specified tracing agent label (e.g. "traceEvents") will be returned.
optional string json_agent_label_filter = 5;
}
// End of protos/perfetto/config/chrome/chrome_config.proto
// Begin of protos/perfetto/config/chrome/v8_config.proto
message V8Config {
// Whether to log the actual content of scripts (e.g. content of the JS file
// that was compiled to generate code).
// ATTENTION: This could considerably increase the size of the resuling trace
// file.
optional bool log_script_sources = 1;
// Whether to log the generated code for jitted functions (machine code or
// bytecode).
// ATTENTION: This could considerably increase the size of the resuling trace
// file.
optional bool log_instructions = 2;
}
// End of protos/perfetto/config/chrome/v8_config.proto
// Begin of protos/perfetto/config/etw/etw_config.proto
// Proto definition based on the struct _EVENT_TRACE_PROPERTIES definition
// See: https://learn.microsoft.com/en-us/windows/win32/api/evntrace/
// ns-evntrace-event_trace_properties
message EtwConfig {
// The KernelFlag represent list of kernel flags that we are intrested in.
// To get a more extensive list run 'xperf -providers k'.
enum KernelFlag {
CSWITCH = 0;
DISPATCHER = 1;
}
// The kernel_flags determines the flags that will be used by the etw tracing
// session. These kernel flags have been built to expose the useful events
// captured from the kernel mode only.
repeated KernelFlag kernel_flags = 1;
}
// End of protos/perfetto/config/etw/etw_config.proto
// Begin of protos/perfetto/config/ftrace/ftrace_config.proto
// Next id: 29
message FtraceConfig {
// Ftrace events to record, example: "sched/sched_switch".
repeated string ftrace_events = 1;
// Android-specific event categories:
repeated string atrace_categories = 2;
repeated string atrace_apps = 3;
// Some processes can emit data through atrace or through the perfetto SDK via
// the "track_event" data source. For these categories, the SDK will be
// preferred, if possible, for this config.
repeated string atrace_categories_prefer_sdk = 28;
// Size of each per-cpu kernel ftrace ring buffer.
// Not guaranteed if there are multiple concurrent tracing sessions, as the
// buffers cannot be resized without pausing recording in the kernel.
optional uint32 buffer_size_kb = 10;
// If set, specifies how often the tracing daemon reads from the kernel ring
// buffer. Not guaranteed if there are multiple concurrent tracing sessions.
// Leave unset unless you're fine-tuning a local config.
optional uint32 drain_period_ms = 11;
// If set, the tracing daemon will read kernel ring buffers as soon as
// they're filled past this percentage of occupancy. In other words, a value
// of 50 means that a read pass is triggered as soon as any per-cpu buffer is
// half-full. Not guaranteed if there are multiple concurrent tracing
// sessions.
// Currently does nothing on Linux kernels below v6.1.
// Introduced in: perfetto v43.
optional uint32 drain_buffer_percent = 26;
// Configuration for compact encoding of scheduler events. When enabled (and
// recording the relevant ftrace events), specific high-volume events are
// encoded in a denser format than normal.
message CompactSchedConfig {
// If true, and sched_switch or sched_waking ftrace events are enabled,
// record those events in the compact format.
//
// If the field is unset, the default is:
// * perfetto v42.0+: enabled
// * before: disabled
optional bool enabled = 1;
}
optional CompactSchedConfig compact_sched = 12;
// Optional filter for "ftrace/print" events.
//
// The filter consists of multiple rules. As soon as a rule matches (the rules
// are processed in order), its `allow` field will be used as the outcome: if
// `allow` is true, the event will be included in the trace, otherwise it will
// be discarded. If an event does not match any rule, it will be allowed by
// default (a rule with an empty prefix and allow=false, disallows everything
// by default).
message PrintFilter {
message Rule {
// Matches an atrace message of the form:
// <type>|pid|<prefix>...
message AtraceMessage {
optional string type = 1;
optional string prefix = 2;
}
oneof match {
// This rule matches if `prefix` matches exactly with the beginning of
// the "ftrace/print" "buf" field.
string prefix = 1;
// This rule matches if the "buf" field contains an atrace-style print
// message as specified in `atrace_msg`.
AtraceMessage atrace_msg = 3;
}
optional bool allow = 2;
}
repeated Rule rules = 1;
}
optional PrintFilter print_filter = 22;
// Enables symbol name resolution against /proc/kallsyms.