diff options
Diffstat (limited to 'perfprofd/perf_profile.proto')
-rw-r--r-- | perfprofd/perf_profile.proto | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/perfprofd/perf_profile.proto b/perfprofd/perf_profile.proto new file mode 100644 index 00000000..65c9c39a --- /dev/null +++ b/perfprofd/perf_profile.proto @@ -0,0 +1,131 @@ + +syntax = "proto2"; + +option java_package = "com.google.common.logging"; + +option optimize_for = LITE_RUNTIME; + +package wireless_android_play_playlog; + +// An entry of the map from a stack of addresses to count. +// Address here is the offset of the instruction address to the load address +// of the load_module. +message AddressSample { + // List of addresses that represents a call stack. + // address[0] is the leaf of the call stack. + repeated uint64 address = 1; + + // List of load_module_ids that represents a call stack. + // load_module_id[0] is the leaf of the call stack. + // This field can be set as empty if all frame share the same load_module_id + // with LoadModuleSamples.load_module_id. + repeated int32 load_module_id = 2; + + // Total count that the address/address_range is sampled. + optional int64 count = 3; +}; + +// An entry of the map from address_range to count. +// [start, end] represents the range of addresses, end->to represents the +// taken branch that ends the range. +message RangeSample { + // Start instruction address of a range. + optional uint64 start = 1; + + // If "end" and "to" is not provided, "start" represents a single instruction. + optional uint64 end = 2; + optional uint64 to = 3; + + // Total count that the address/address_range is sampled. + optional int64 count = 4; +}; + +// A load module. +message LoadModule { + // Name of the load_module. + optional string name = 1; + + // LoadModule's linker build_id. + optional string build_id = 2; + + // On-device symbolized entries. + repeated string symbol = 3; +} + +// All samples for a load_module. +message LoadModuleSamples { + optional int32 load_module_id = 1; + + // Map from a stack of addresses to count. + repeated AddressSample address_samples = 2; + + // Map from a range triplet (start, end, to) to count. + repeated RangeSample range_samples = 3; +} + +// A table of program names. +message ProcessNames { + repeated string name = 1; +} + +// All samples for a program. +message ProgramSamples { + // Name of the program. + optional string name = 1; + + // Load module profiles. + repeated LoadModuleSamples modules = 2; + + // Index into ProcessNames for the name of the process. + optional uint32 process_name_id = 3; +} + +// A compressed representation of a perf profile, which contains samples from +// multiple binaries. +message AndroidPerfProfile { + + // Type of the hardware event. + enum EventType { + CYCLE = 0; + BRANCH = 1; + } + // Hardware event used in profiling. + optional EventType event = 1; + + // Total number of samples in this profile. + // This is the sum of counts of address_samples and range_samples in all + // load_module_samples. + optional int64 total_samples = 2; + + // Samples for all profiled programs. + repeated ProgramSamples programs = 3; + + // List of all load modules. + repeated LoadModule load_modules = 4; + + // Table of process names. + optional ProcessNames process_names = 11; + + // is device screen on at point when profile is collected? + optional bool display_on = 5; + + // system load at point when profile is collected; corresponds + // to first value from /proc/loadavg multiplied by 100 then + // converted to int32 + optional int32 sys_load_average = 6; + + // At the point when the profile was collected, was a camera active? + optional bool camera_active = 7; + + // At the point when the profile was collected, was the device still booting? + optional bool booting = 8; + + // At the point when the profile was collected, was the device plugged into + // a charger? + optional bool on_charger = 9; + + // CPU utilization measured prior to profile collection (expressed as + // 100 minus the idle percentage). + optional int32 cpu_utilization = 10; + +} |