aboutsummaryrefslogtreecommitdiff
path: root/protos/perfetto/metrics/perfetto_merged_metrics.proto
blob: f92b30568b73b387fdb7bf4aa10ec9c256233c5b (plain)
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
// 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;

// Begin of protos/perfetto/metrics/android/batt_metric.proto

message AndroidBatteryMetric {
  message BatteryCounters {
    // Timestamp measured from boot time [ns].
    optional int64 timestamp_ns = 1;
    // Fields 2-5 are the same as in BatteryCounters proto in TracePacket.
    optional double charge_counter_uah = 2;
    optional float capacity_percent = 3;
    optional double current_ua = 4;
    optional double current_avg_ua = 5;
  }

  message BatteryAggregates {
    // Field numbers for these 3 == the int values fromm Android
    optional int64 total_screen_off_ns = 1;
    optional int64 total_screen_on_ns = 2;
    optional int64 total_screen_doze_ns = 3;
  }

  // Battery counters info for each ts of the trace. This should only be
  // extracted for short traces.
  repeated BatteryCounters battery_counters = 1;

  optional BatteryAggregates battery_aggregates = 2;
}

// End of protos/perfetto/metrics/android/batt_metric.proto

// Begin of protos/perfetto/metrics/android/cpu_metric.proto

message AndroidCpuMetric {
  // Next id: 6
  message Metrics {
    // CPU megacycles (i.e. cycles divided by 1e6).
    optional int64 mcycles = 1;

    // Total time the thread was running for this breakdown in
    // nanoseconds.
    optional int64 runtime_ns = 2;

    // Min/max/average CPU frequency weighted by the time the CPU was
    // running at each frequency in this breakdown.
    optional int64 min_freq_khz = 3;
    optional int64 max_freq_khz = 4;
    optional int64 avg_freq_khz = 5;
  }

  // Next id: 7
  message CoreData {
    optional uint32 id = 1;
    optional Metrics metrics = 6;

    reserved 2 to 5;
  }

  // Next id: 3
  message CoreTypeData {
    optional string type = 1;
    optional Metrics metrics = 2;
  }

  // Next id: 7
  message Thread {
    optional string name = 1;
    optional Metrics metrics = 4;

    // Breakdowns of above metrics.
    repeated CoreData core = 2;
    repeated CoreTypeData core_type = 5;

    reserved 3;
  }

  // Next id: 8
  message Process {
    optional string name = 1;
    optional Metrics metrics = 4;

    // Breakdowns of above metrics.
    repeated Thread threads = 6;
    repeated CoreData core = 7;
    repeated CoreTypeData core_type = 5;

    reserved 3;
  }

  repeated Process process_info = 1;
}

// End of protos/perfetto/metrics/android/cpu_metric.proto

// Begin of protos/perfetto/metrics/android/display_metrics.proto

message AndroidDisplayMetrics {
  // Stat that reports the number of duplicate frames submitted
  // to the display for rendering. That is frames that have the same
  // pixels values but where still submitted. It is tracked based on
  // comparing the MISR of the current frame vs previous frame.
  optional uint32 total_duplicate_frames = 1;

  // Stat reports whether there is any duplicate_frames tracked
  optional uint32 duplicate_frames_logged = 2;
}
// End of protos/perfetto/metrics/android/display_metrics.proto

// Begin of protos/perfetto/metrics/android/process_metadata.proto

message AndroidProcessMetadata {
  // Process name. Usually, cmdline or <package_name>(:<custom_name>)?.
  optional string name = 1;

  // User id under which this process runs.
  optional int64 uid = 2;

  // Package metadata from Android package list.
  message Package {
    optional string package_name = 1;
    optional int64 apk_version_code = 2;
    optional bool debuggable = 3;
  }

  // Package that this process belongs to.
  //
  // If this process shares its uid (see `packages_for_uid` field), the package
  // is determined based on the process name and package name. If there is no
  // match this field is empty.
  optional Package package = 7;

  // All packages using this uid.
  //
  // Shared uid documentation:
  // https://developer.android.com/guide/topics/manifest/manifest-element#uid
  repeated Package packages_for_uid = 8;

  reserved 3, 4, 5, 6;
}

// End of protos/perfetto/metrics/android/process_metadata.proto

// Begin of protos/perfetto/metrics/android/heap_profile_callsites.proto

message HeapProfileCallsites {
  message Frame {
    optional string name = 1;
    optional string mapping_name = 2;
  }

  message Counters {
    // Count of objects allocated
    optional int64 total_count = 1;
    // Count of bytes allocated
    optional int64 total_bytes = 2;

    // Count of allocated objects that were not freed
    optional int64 delta_count = 3;
    // Count of allocated bytes that were not freed
    optional int64 delta_bytes = 4;
  }

  message Callsite {
    // The hash unambiguously identifies a callsite in a heap profile (as a
    // traversal from the root node). It is based on the symbol names (instead
    // of the addresses).
    optional int64 hash = 1;
    optional int64 parent_hash = 2;

    // Leaf frame of the callsite. Use parent_hash to traverse to parent nodes.
    optional Frame frame = 3;

    optional Counters self_allocs = 4;
    optional Counters child_allocs = 5;
  }

  // Callsites per process instance.
  // Next id: 7
  message InstanceStats {
    optional uint32 pid = 1;
    // TODO(ilkos): Remove process_name in favour of the metadata.
    optional string process_name = 2;
    optional AndroidProcessMetadata process = 6;
    repeated Callsite callsites = 3;

    // Bytes allocated via malloc but not freed.
    optional int64 profile_delta_bytes = 4;
    // Bytes allocated via malloc irrespective of whether they were freed.
    optional int64 profile_total_bytes = 5;
  }

  repeated InstanceStats instance_stats = 1;
}

// End of protos/perfetto/metrics/android/heap_profile_callsites.proto

// Begin of protos/perfetto/metrics/android/hwui_metric.proto

// Android HWUI graphics performance and graphics memory usage metrics.
message ProcessRenderInfo {
  // Name of the package launched
  optional string process_name = 1;

  // CPU time spent on RenderThread in milliseconds.
  optional int64 rt_cpu_time_ms = 2;

  // Number of frames drawn on RenderThread, followed by max/min/avg CPU time to draw a frame
  // in nanoseconds.
  optional uint32 draw_frame_count = 3;
  optional int64 draw_frame_max = 4;
  optional int64 draw_frame_min = 5;
  optional double draw_frame_avg = 6;

  // Number of GPU commands flushes and max/min/avg time per flush in nanoseconds.
  optional uint32 flush_count = 7;
  optional int64 flush_max = 8;
  optional int64 flush_min = 9;
  optional double flush_avg = 10;

  // Number of View tree preparation counts and max/min/avg time to traverse the tree in
  // nanoseconds.
  optional uint32 prepare_tree_count = 11;
  optional int64 prepare_tree_max = 12;
  optional int64 prepare_tree_min = 13;
  optional double prepare_tree_avg = 14;

  // Number of times the GPU rendered a frame and max/min/avg time for GPU to finish rendering in
  // in nanoseconds.
  optional uint32 gpu_completion_count = 15;
  optional int64 gpu_completion_max = 16;
  optional int64 gpu_completion_min = 17;
  optional double gpu_completion_avg = 18;

  // Number of times a frame was recorded/serialized in a display list on the UI thread with
  // max/min/avg time in nanoseconds.
  optional uint32 ui_record_count = 19;
  optional int64 ui_record_max = 20;
  optional int64 ui_record_min = 21;
  optional double ui_record_avg = 22;

  // number of unique shader programs that were used to render frames, followed by total and average
  // times to prepare a shader in nanoseconds.
  optional uint32 shader_compile_count = 23;
  optional int64 shader_compile_time = 24;
  optional double shader_compile_avg = 25;
  // number of shader programs loaded from the disk cache, followed by total time and average time
  // to prepare a shader in nanoseconds.
  optional uint32 cache_hit_count = 26;
  optional int64 cache_hit_time = 27;
  optional double cache_hit_avg = 28;
  // number of shader programs compiled/linked, followed by total time and average time to prepare
  // a shader in nanoseconds.
  optional uint32 cache_miss_count = 29;
  optional int64 cache_miss_time = 30;
  optional double cache_miss_avg = 31;

  // max/min/avg CPU memory used for graphics by HWUI at the end of a frame.
  optional int64 graphics_cpu_mem_max = 32;
  optional int64 graphics_cpu_mem_min = 33;
  optional double graphics_cpu_mem_avg = 34;

  // max/min/avg GPU memory used by HWUI at the end of a frame excluding textures.
  optional int64 graphics_gpu_mem_max = 35;
  optional int64 graphics_gpu_mem_min = 36;
  optional double graphics_gpu_mem_avg = 37;

  // max/min/avg memory used for GPU textures by HWUI at the end of a frame.
  optional int64 texture_mem_max = 38;
  optional int64 texture_mem_min = 39;
  optional double texture_mem_avg = 40;

  // max/min/avg memory used by HWUI at the end of a frame. This is a sum of previous 3 categories.
  optional int64 all_mem_max = 41;
  optional int64 all_mem_min = 42;
  optional double all_mem_avg = 43;
}

message AndroidHwuiMetric {
  //  HWUI metrics for processes that have a RenderThread.
  repeated ProcessRenderInfo process_info = 1;
}

// End of protos/perfetto/metrics/android/hwui_metric.proto

// Begin of protos/perfetto/metrics/android/ion_metric.proto

// ion memory stats on Android.
message AndroidIonMetric {
  message Buffer {
    optional string name = 1;
    optional double avg_size_bytes = 2;
    optional double min_size_bytes = 3;
    optional double max_size_bytes = 4;

    // Total allocation size.
    // Essentially the sum of positive allocs (-> new buffers).
    optional double total_alloc_size_bytes = 5;
  }

  repeated Buffer buffer = 1;
}

// End of protos/perfetto/metrics/android/ion_metric.proto

// Begin of protos/perfetto/metrics/android/java_heap_histogram.proto

message JavaHeapHistogram {
  message TypeCount {
    optional string type_name = 1;
    optional uint32 obj_count = 2;
    optional uint32 reachable_obj_count = 3;
  }

  message Sample {
    optional int64 ts = 1;
    repeated TypeCount type_count = 2;
  }

  // Heap stats per process. One sample per dump (with continuous dump you can
  // have more samples differentiated by ts).
  message InstanceStats {
    optional uint32 upid = 1;
    optional AndroidProcessMetadata process = 2;
    repeated Sample samples = 3;
  }

  repeated InstanceStats instance_stats = 1;
}

// End of protos/perfetto/metrics/android/java_heap_histogram.proto

// Begin of protos/perfetto/metrics/android/java_heap_stats.proto

message JavaHeapStats {
  // Next id: 7
  message Sample {
    optional int64 ts = 1;
    // Size of the Java heap in bytes
    optional int64 heap_size = 2;
    optional int64 obj_count = 4;
    // Size of the reachable objects in bytes.
    optional int64 reachable_heap_size = 3;
    optional int64 reachable_obj_count = 5;
    // Sum of anonymous RSS + swap pages in bytes.
    optional int64 anon_rss_and_swap_size = 6;
  }

  // Heap stats per process. One sample per dump (can be > 1 if continuous
  // dump is enabled).
  message InstanceStats {
    optional uint32 upid = 1;
    optional AndroidProcessMetadata process = 2;
    repeated Sample samples = 3;
  }

  repeated InstanceStats instance_stats = 1;
}

// End of protos/perfetto/metrics/android/java_heap_stats.proto

// Begin of protos/perfetto/metrics/android/lmk_metric.proto

// LMK stats on Android.
message AndroidLmkMetric {
  message ByOomScore {
    optional int32 oom_score_adj = 1;
    optional int32 count = 2;
  }

  // Total count of LMK events observed in the trace.
  optional int32 total_count = 1;
  repeated ByOomScore by_oom_score = 2;

  // OOM reaper kills. Enabled via the oom/mark_victim point. Should never
  // happen.
  optional int32 oom_victim_count = 3;
}

// End of protos/perfetto/metrics/android/lmk_metric.proto

// Begin of protos/perfetto/metrics/android/lmk_reason_metric.proto

// Potential culplit of a low-memory kill on Android.
message AndroidLmkReasonMetric {
  message Process {
    optional AndroidProcessMetadata process = 1;

    // OOM score adj of the process.
    optional int32 oom_score_adj = 2;

    // RSS + swap.
    optional int64 size = 3;
  }
  message Lmk {
    // OOM score adj of the LMK'ed process.
    optional int32 oom_score_adj = 1;

    // Total size of the system ION heap in bytes during this LMK.
    optional int64 system_ion_heap_size = 2;

    // Processes present during this LMK.
    repeated Process processes = 3;
  }

  repeated Lmk lmks = 1;
}

// End of protos/perfetto/metrics/android/lmk_reason_metric.proto

// Begin of protos/perfetto/metrics/android/mem_metric.proto

// Memory metrics on Android.
message AndroidMemoryMetric {
  message ProcessMetrics {
    optional string process_name = 1;
    optional ProcessMemoryCounters total_counters = 2;
    repeated PriorityBreakdown priority_breakdown = 3;
  }

  message PriorityBreakdown {
    optional string priority = 1;
    optional ProcessMemoryCounters counters = 2;
  }

  message ProcessMemoryCounters {
    optional Counter anon_rss = 1;
    optional Counter file_rss = 2;
    optional Counter swap = 3;
    optional Counter anon_and_swap = 4;

    // Available when ART trace events are available.
    optional Counter java_heap = 5;
  }

  message Counter {
    optional double min = 1;
    optional double max = 2;
    optional double avg = 3;
  }

  // Process metrics, grouped by process name
  repeated ProcessMetrics process_metrics = 1;
}

// End of protos/perfetto/metrics/android/mem_metric.proto

// Begin of protos/perfetto/metrics/android/mem_unagg_metric.proto

// Unaggregated memory metrics on Android.
message AndroidMemoryUnaggregatedMetric {
  message ProcessValues {
    optional string process_name = 1;
    optional ProcessMemoryValues mem_values = 2;
  }

  message ProcessMemoryValues {
    repeated Value anon_rss = 1;
    repeated Value file_rss = 2;
    repeated Value swap = 3;
    repeated Value anon_and_swap = 4;
  }

  message Value {
    optional int64 ts = 1;
    optional int32 oom_score = 2;
    optional double value = 3;
  }

  // Process metrics for every process instance in trace.
  repeated ProcessValues process_values = 1;
}

// End of protos/perfetto/metrics/android/mem_unagg_metric.proto

// Begin of protos/perfetto/metrics/android/package_list.proto

message AndroidPackageList {
  message Package {
    optional string package_name = 1;
    optional int64 uid = 2;
    optional int64 version_code = 3;
  }

  repeated Package packages = 1;
}

// End of protos/perfetto/metrics/android/package_list.proto

// Begin of protos/perfetto/metrics/android/powrails_metric.proto

message AndroidPowerRails {
  // Energy data per Power Rail at given ts.
  message EnergyData {
    // Time since device boot(CLOCK_BOTTOMTIME) in milli-seconds.
    optional int64 timestamp_ms = 1;
    // Accumulated energy since device boot in microwatt-seconds(uws).
    optional double energy_uws = 2;
  }

  message PowerRails {
    // Name of the rail.
    optional string name = 1;
    // Energy data for given rail and for all samples in the trace.
    repeated EnergyData energy_data = 2;
  }

  // Energy data per Power Rail.
  repeated PowerRails power_rails = 1;
}
// End of protos/perfetto/metrics/android/powrails_metric.proto

// Begin of protos/perfetto/metrics/android/startup_metric.proto

// Android app startup metrics.
message AndroidStartupMetric {
  // A simplified view of the task state durations for a thread
  // and a span of time.
  message TaskStateBreakdown {
    optional int64 running_dur_ns = 1;
    optional int64 runnable_dur_ns = 2;
    optional int64 uninterruptible_sleep_dur_ns = 3;
    optional int64 interruptible_sleep_dur_ns = 4;
  }

  message Slice {
    optional int64 dur_ns = 1;
    optional double dur_ms = 2;
  }

  // Timing information spanning the intent received by the
  // activity manager to the first frame drawn.
  // Next id: 21.
  message ToFirstFrame {
    optional int64 dur_ns = 1;
    optional double dur_ms = 17;
    optional TaskStateBreakdown main_thread_by_task_state = 2;

    // In this timespan, how many processes (apart from the main activity) were
    // spawned.
    optional uint32 other_processes_spawned_count = 3;

    // Total time spent in activity manager between the initial intent
    // and the end of the activity starter.
    optional Slice time_activity_manager = 4;

    // The following slices follow the typical steps post-fork.
    optional Slice time_activity_thread_main = 5;
    optional Slice time_bind_application = 6;
    optional Slice time_activity_start = 7;
    optional Slice time_activity_resume = 8;
    optional Slice time_choreographer = 9;

    // If we are starting a new process, record the duration from the
    // intent being received to the time we call the zygote.
    optional Slice time_before_start_process = 10;

    // The actual duration of the process start (based on the zygote slice).
    optional Slice time_during_start_process = 11;

    optional Slice to_post_fork = 18;
    optional Slice to_activity_thread_main = 19;
    optional Slice to_bind_application = 20;

    optional Slice time_post_fork = 16;

    // Deprecated was other_process_to_activity_cpu_ratio
    reserved 12;

    // Removed: was uint32 versions of to_post_fork, to_activity_thread_main and
    // to_bind_application.
    reserved 13, 14, 15;
  }

  // Metrics about startup which were developed by looking at experiments using
  // high-speed cameras (HSC).
  message HscMetrics {
    // The duration of the full "startup" as defined by HSC tests.
    optional Slice full_startup = 1;
  }

  // Next id: 8
  message Startup {
    // Random id uniquely identifying an app startup in this trace.
    optional uint32 startup_id = 1;

    // Name of the package launched
    optional string package_name = 2;

    // Name of the process launched
    optional string process_name = 3;

    // Did we ask the zygote for a new process
    optional bool zygote_new_process = 4;

    // Number of processes hosting the activity involved in the launch.
    // This will usually be 1. If it is 0, it is indicative of a data / process
    // error. If > 1, the process died during startup and the system respawned
    // it.
    optional uint32 activity_hosting_process_count = 6;

    optional ToFirstFrame to_first_frame = 5;

    // Details about the process (uid, version, etc)
    optional AndroidProcessMetadata process = 7;

    optional HscMetrics hsc = 8;
  }

  repeated Startup startup = 1;
}

// End of protos/perfetto/metrics/android/startup_metric.proto

// Begin of protos/perfetto/metrics/android/task_names.proto

message AndroidTaskNames {
  message Process {
    optional int64 pid = 1;

    // Process name.
    optional string process_name = 2;

    // Names of all threads for this process.
    repeated string thread_name = 3;

    // User id under which this process runs.
    optional int64 uid = 4;

    // Packages matching the process uid.
    repeated string uid_package_name = 5;
  }

  repeated Process process = 1;
}

// End of protos/perfetto/metrics/android/task_names.proto

// Begin of protos/perfetto/metrics/android/thread_time_in_state_metric.proto

message AndroidThreadTimeInStateMetric {
  message MetricsByCoreType {
    optional string core_type = 1;
    optional int64 runtime_ms = 2;
  }

  message Thread {
    optional string name = 1;
    repeated MetricsByCoreType metrics_by_core_type = 2;
  }

  message Process {
    optional AndroidProcessMetadata metadata = 1;
    repeated MetricsByCoreType metrics_by_core_type = 2;
    repeated Thread threads = 3;
  }

  repeated Process processes = 1;
}

// End of protos/perfetto/metrics/android/thread_time_in_state_metric.proto

// Begin of protos/perfetto/metrics/android/unmapped_java_symbols.proto

message UnmappedJavaSymbols {
  message Field {
    optional string field_name = 1;
    optional string field_type_name = 2;
  }

  message ProcessSymbols {
    reserved 3;

    optional AndroidProcessMetadata process_metadata = 1;
    repeated string type_name = 2;
    repeated Field field = 4;
  }

  repeated ProcessSymbols process_symbols = 1;
}

// End of protos/perfetto/metrics/android/unmapped_java_symbols.proto

// Begin of protos/perfetto/metrics/android/unsymbolized_frames.proto

message UnsymbolizedFrames {
  message Frame {
    optional string module = 1;
    optional string build_id = 2;
    optional int64 address = 3;
  }

  repeated Frame frames = 1;
}

// End of protos/perfetto/metrics/android/unsymbolized_frames.proto

// Begin of protos/perfetto/metrics/metrics.proto

// Trace processor metadata
message TraceMetadata {
  message Entry {
    optional string name = 1;
    optional uint32 idx = 2;
    optional int64 value = 3;
  }

  repeated Entry error_stats_entry = 1;
  optional int64 trace_duration_ns = 2;
  optional string trace_uuid = 3;
  optional string android_build_fingerprint = 4;
  optional int64 statsd_triggering_subscription_id = 5;
  optional int64 trace_size_bytes = 6;
  repeated string trace_trigger = 7;
}

// Root message for all Perfetto-based metrics.
//
// Next id: 25
message TraceMetrics {
  reserved 4, 10, 13, 14;

  // Battery counters metric on Android.
  optional AndroidBatteryMetric android_batt = 5;

  // CPU usage per trace, process and thread.
  optional AndroidCpuMetric android_cpu = 6;

  // Memory metrics on Android (owned by the Android Telemetry team).
  optional AndroidMemoryMetric android_mem = 1;

  // Memory metrics on Android in unaggregated form. (owned by the Android
  // Telemetry team).
  // Note: this generates a lot of data so should not be requested unless it
  // is clear that this data is necessary.
  optional AndroidMemoryUnaggregatedMetric android_mem_unagg = 11;

  // Package list.
  optional AndroidPackageList android_package_list = 12;

  // ion buffer memory metrics.
  optional AndroidIonMetric android_ion = 9;

  // Statistics about low memory kills.
  optional AndroidLmkMetric android_lmk = 8;

  // Power Rails metrics on Android.
  optional AndroidPowerRails android_powrails = 7;

  // Startup metrics on Android (owned by the Android Telemetry team).
  optional AndroidStartupMetric android_startup = 2;

  // Heap profiler callsite statistics.
  optional HeapProfileCallsites heap_profile_callsites = 16;

  // Trace metadata (applicable to all traces).
  optional TraceMetadata trace_metadata = 3;

  // Returns stack frames missing symbols.
  optional UnsymbolizedFrames unsymbolized_frames = 15;

  // If the trace contains a heap graph, output allocation statistics.
  optional JavaHeapStats java_heap_stats = 17;

  // If the trace contains a heap graph, output histogram.
  optional JavaHeapHistogram java_heap_histogram = 21;

  // Metrics used to find potential culprits of low-memory kills.
  optional AndroidLmkReasonMetric android_lmk_reason = 18;

  // Java type names that have no deobfuscation mappings.
  optional UnmappedJavaSymbols unmapped_java_symbols = 19;

  optional AndroidHwuiMetric android_hwui_metric = 20;

  optional AndroidDisplayMetrics display_metrics = 22;

  optional AndroidTaskNames android_task_names = 23;

  optional AndroidThreadTimeInStateMetric android_thread_time_in_state = 24;

  // Demo extensions.
  extensions 450 to 499;

  // Vendor extensions.
  extensions 500 to 1000;
}

// End of protos/perfetto/metrics/metrics.proto