// The file format generated by report_sample.proto is as below: // LittleEndian32(record_size_0) // message Record(record_0) (having record_size_0 bytes) // LittleEndian32(record_size_1) // message Record(record_1) (having record_size_1 bytes) // ... // LittleEndian32(record_size_N) // message Record(record_N) (having record_size_N bytes) // LittleEndian32(0) syntax = "proto2"; option optimize_for = LITE_RUNTIME; package simpleperf_report_proto; option java_package = "com.android.tools.profiler.proto"; option java_outer_classname = "SimpleperfReport"; message Sample { optional uint64 time = 1; optional int32 thread_id = 2; message CallChainEntry { // virtual address of the instruction in elf file optional uint64 vaddr_in_file = 1; // index of the elf file containing the instruction optional uint32 file_id = 2; // symbol_id refers to the name of the function containing the instruction. // If the function name is found, it is a valid index in the symbol table // of File with 'id' field being file_id, otherwise it is -1. optional int32 symbol_id = 3; } repeated CallChainEntry callchain = 3; } message LostSituation { optional uint64 sample_count = 1; optional uint64 lost_count = 2; } message File { // unique id for each file, starting from 0, and add 1 each time. optional uint32 id = 1; // file path, like /system/lib/libc.so. optional string path = 2; // symbol table of the file. repeated string symbol = 3; } message Record { oneof record_data { Sample sample = 1; LostSituation lost = 2; File file = 3; } }