1 2syntax = "proto2"; 3 4option java_package = "com.google.common.logging"; 5 6option optimize_for = LITE_RUNTIME; 7 8package wireless_android_play_playlog; 9 10// An entry of the map from a stack of addresses to count. 11// Address here is the offset of the instruction address to the load address 12// of the load_module. 13message AddressSample { 14 // List of addresses that represents a call stack. 15 // address[0] is the leaf of the call stack. 16 repeated uint64 address = 1; 17 18 // List of load_module_ids that represents a call stack. 19 // load_module_id[0] is the leaf of the call stack. 20 // This field can be set as empty if all frame share the same load_module_id 21 // with LoadModuleSamples.load_module_id. 22 repeated int32 load_module_id = 2; 23 24 // Total count that the address/address_range is sampled. 25 optional int64 count = 3; 26}; 27 28// An entry of the map from address_range to count. 29// [start, end] represents the range of addresses, end->to represents the 30// taken branch that ends the range. 31message RangeSample { 32 // Start instruction address of a range. 33 optional uint64 start = 1; 34 35 // If "end" and "to" is not provided, "start" represents a single instruction. 36 optional uint64 end = 2; 37 optional uint64 to = 3; 38 39 // Total count that the address/address_range is sampled. 40 optional int64 count = 4; 41}; 42 43// A load module. 44message LoadModule { 45 // Name of the load_module. 46 optional string name = 1; 47 48 // LoadModule's linker build_id. 49 optional string build_id = 2; 50} 51 52// All samples for a load_module. 53message LoadModuleSamples { 54 optional int32 load_module_id = 1; 55 56 // Map from a stack of addresses to count. 57 repeated AddressSample address_samples = 2; 58 59 // Map from a range triplet (start, end, to) to count. 60 repeated RangeSample range_samples = 3; 61} 62 63// All samples for a program. 64message ProgramSamples { 65 // Name of the program. 66 optional string name = 1; 67 68 // Load module profiles. 69 repeated LoadModuleSamples modules = 2; 70} 71 72// A compressed representation of a perf profile, which contains samples from 73// multiple binaries. 74message AndroidPerfProfile { 75 76 // Type of the hardware event. 77 enum EventType { 78 CYCLE = 0; 79 BRANCH = 1; 80 } 81 // Hardware event used in profiling. 82 optional EventType event = 1; 83 84 // Total number of samples in this profile. 85 // This is the sum of counts of address_samples and range_samples in all 86 // load_module_samples. 87 optional int64 total_samples = 2; 88 89 // Samples for all profiled programs. 90 repeated ProgramSamples programs = 3; 91 92 // List of all load modules. 93 repeated LoadModule load_modules = 4; 94 95 // is device screen on at point when profile is collected? 96 optional bool display_on = 5; 97 98 // system load at point when profile is collected; corresponds 99 // to first value from /proc/loadavg multiplied by 100 then 100 // converted to int32 101 optional int32 sys_load_average = 6; 102 103 // At the point when the profile was collected, was a camera active? 104 optional bool camera_active = 7; 105 106 // At the point when the profile was collected, was the device still booting? 107 optional bool booting = 8; 108 109 // At the point when the profile was collected, was the device plugged into 110 // a charger? 111 optional bool on_charger = 9; 112 113 // CPU utilization measured prior to profile collection (expressed as 114 // 100 minus the idle percentage). 115 optional int32 cpu_utilization = 10; 116 117} 118