1// The file format generated by report_sample.proto is as below: 2// char magic[10] = "SIMPLEPERF"; 3// LittleEndian16(version) = 1; 4// LittleEndian32(record_size_0) 5// message Record(record_0) (having record_size_0 bytes) 6// LittleEndian32(record_size_1) 7// message Record(record_1) (having record_size_1 bytes) 8// ... 9// LittleEndian32(record_size_N) 10// message Record(record_N) (having record_size_N bytes) 11// LittleEndian32(0) 12 13syntax = "proto2"; 14option optimize_for = LITE_RUNTIME; 15package simpleperf_report_proto; 16option java_package = "com.android.tools.profiler.proto"; 17option java_outer_classname = "SimpleperfReport"; 18 19message Sample { 20 // Wall clock time for current sample. 21 // By default, it is perf clock used in kernel. 22 optional uint64 time = 1; 23 optional int32 thread_id = 2; 24 25 message CallChainEntry { 26 // virtual address of the instruction in elf file 27 optional uint64 vaddr_in_file = 1; 28 29 // index of the elf file containing the instruction 30 optional uint32 file_id = 2; 31 32 // symbol_id refers to the name of the function containing the instruction. 33 // If the function name is found, it is a valid index in the symbol table 34 // of File with 'id' field being file_id, otherwise it is -1. 35 optional int32 symbol_id = 3; 36 } 37 38 repeated CallChainEntry callchain = 3; 39 40 // Simpleperf generates one sample whenever a specified amount of events happen 41 // while running a monitored thread. So each sample belongs to one event type. 42 // Event type can be cpu-cycles, cpu-clock, sched:sched_switch or other types. 43 // By using '-e' option, we can ask simpleperf to record samples for one or more 44 // event types. 45 // Each event type generates samples independently. But recording more event types 46 // will cost more cpu time generating samples, which may affect the monitored threads 47 // and sample lost rate. 48 // event_count field shows the count of the events (belong to the sample's event type) 49 // that have happened since last sample (belong to the sample's event type) for the 50 // same thread. However, if there are lost samples between current sample and previous 51 // sample, the event_count is the count of events from the last lost sample. 52 optional uint64 event_count = 4; 53 54 // An index in meta_info.event_type, shows which event type current sample belongs to. 55 optional uint32 event_type_id = 5; 56} 57 58message LostSituation { 59 optional uint64 sample_count = 1; 60 optional uint64 lost_count = 2; 61} 62 63message File { 64 // unique id for each file, starting from 0, and add 1 each time. 65 optional uint32 id = 1; 66 67 // file path, like /system/lib/libc.so. 68 optional string path = 2; 69 70 // symbol table of the file. 71 repeated string symbol = 3; 72 73 // mangled symbol table of the file. 74 repeated string mangled_symbol = 4; 75} 76 77message Thread { 78 optional uint32 thread_id = 1; 79 optional uint32 process_id = 2; 80 optional string thread_name = 3; 81} 82 83message MetaInfo { 84 repeated string event_type = 1; 85 optional string app_package_name = 2; 86} 87 88message Record { 89 oneof record_data { 90 Sample sample = 1; 91 LostSituation lost = 2; 92 File file = 3; 93 Thread thread = 4; 94 MetaInfo meta_info = 5; 95 } 96}