golang.org/toolchain@v0.0.1-go1.9rc2.windows-amd64/src/cmd/vendor/github.com/google/pprof/proto/profile.proto (about) 1 // Profile is a common stacktrace profile format. 2 // 3 // Measurements represented with this format should follow the 4 // following conventions: 5 // 6 // - Consumers should treat unset optional fields as if they had been 7 // set with their default value. 8 // 9 // - When possible, measurements should be stored in "unsampled" form 10 // that is most useful to humans. There should be enough 11 // information present to determine the original sampled values. 12 // 13 // - On-disk, the serialized proto must be gzip-compressed. 14 // 15 // - The profile is represented as a set of samples, where each sample 16 // references a sequence of locations, and where each location belongs 17 // to a mapping. 18 // - There is a N->1 relationship from sample.location_id entries to 19 // locations. For every sample.location_id entry there must be a 20 // unique Location with that id. 21 // - There is an optional N->1 relationship from locations to 22 // mappings. For every nonzero Location.mapping_id there must be a 23 // unique Mapping with that id. 24 25 syntax = "proto3"; 26 27 package perftools.profiles; 28 29 option java_package = "com.google.perftools.profiles"; 30 option java_outer_classname = "ProfileProto"; 31 32 message Profile { 33 // A description of the samples associated with each Sample.value. 34 // For a cpu profile this might be: 35 // [["cpu","nanoseconds"]] or [["wall","seconds"]] or [["syscall","count"]] 36 // For a heap profile, this might be: 37 // [["allocations","count"], ["space","bytes"]], 38 // If one of the values represents the number of events represented 39 // by the sample, by convention it should be at index 0 and use 40 // sample_type.unit == "count". 41 repeated ValueType sample_type = 1; 42 // The set of samples recorded in this profile. 43 repeated Sample sample = 2; 44 // Mapping from address ranges to the image/binary/library mapped 45 // into that address range. mapping[0] will be the main binary. 46 repeated Mapping mapping = 3; 47 // Useful program location 48 repeated Location location = 4; 49 // Functions referenced by locations 50 repeated Function function = 5; 51 // A common table for strings referenced by various messages. 52 // string_table[0] must always be "". 53 repeated string string_table = 6; 54 // frames with Function.function_name fully matching the following 55 // regexp will be dropped from the samples, along with their successors. 56 int64 drop_frames = 7; // Index into string table. 57 // frames with Function.function_name fully matching the following 58 // regexp will be kept, even if it matches drop_functions. 59 int64 keep_frames = 8; // Index into string table. 60 61 // The following fields are informational, do not affect 62 // interpretation of results. 63 64 // Time of collection (UTC) represented as nanoseconds past the epoch. 65 int64 time_nanos = 9; 66 // Duration of the profile, if a duration makes sense. 67 int64 duration_nanos = 10; 68 // The kind of events between sampled ocurrences. 69 // e.g [ "cpu","cycles" ] or [ "heap","bytes" ] 70 ValueType period_type = 11; 71 // The number of events between sampled occurrences. 72 int64 period = 12; 73 // Freeform text associated to the profile. 74 repeated int64 comment = 13; // Indices into string table. 75 // Index into the string table of the type of the preferred sample 76 // value. If unset, clients should default to the last sample value. 77 int64 default_sample_type = 14; 78 } 79 80 // ValueType describes the semantics and measurement units of a value. 81 message ValueType { 82 int64 type = 1; // Index into string table. 83 int64 unit = 2; // Index into string table. 84 } 85 86 // Each Sample records values encountered in some program 87 // context. The program context is typically a stack trace, perhaps 88 // augmented with auxiliary information like the thread-id, some 89 // indicator of a higher level request being handled etc. 90 message Sample { 91 // The ids recorded here correspond to a Profile.location.id. 92 // The leaf is at location_id[0]. 93 repeated uint64 location_id = 1; 94 // The type and unit of each value is defined by the corresponding 95 // entry in Profile.sample_type. All samples must have the same 96 // number of values, the same as the length of Profile.sample_type. 97 // When aggregating multiple samples into a single sample, the 98 // result has a list of values that is the elemntwise sum of the 99 // lists of the originals. 100 repeated int64 value = 2; 101 // label includes additional context for this sample. It can include 102 // things like a thread id, allocation size, etc 103 repeated Label label = 3; 104 } 105 106 message Label { 107 int64 key = 1; // Index into string table 108 109 // At most one of the following must be present 110 int64 str = 2; // Index into string table 111 int64 num = 3; 112 } 113 114 message Mapping { 115 // Unique nonzero id for the mapping. 116 uint64 id = 1; 117 // Address at which the binary (or DLL) is loaded into memory. 118 uint64 memory_start = 2; 119 // The limit of the address range occupied by this mapping. 120 uint64 memory_limit = 3; 121 // Offset in the binary that corresponds to the first mapped address. 122 uint64 file_offset = 4; 123 // The object this entry is loaded from. This can be a filename on 124 // disk for the main binary and shared libraries, or virtual 125 // abstractions like "[vdso]". 126 int64 filename = 5; // Index into string table 127 // A string that uniquely identifies a particular program version 128 // with high probability. E.g., for binaries generated by GNU tools, 129 // it could be the contents of the .note.gnu.build-id field. 130 int64 build_id = 6; // Index into string table 131 132 // The following fields indicate the resolution of symbolic info. 133 bool has_functions = 7; 134 bool has_filenames = 8; 135 bool has_line_numbers = 9; 136 bool has_inline_frames = 10; 137 } 138 139 // Describes function and line table debug information. 140 message Location { 141 // Unique nonzero id for the location. A profile could use 142 // instruction addresses or any integer sequence as ids. 143 uint64 id = 1; 144 // The id of the corresponding profile.Mapping for this location. 145 // If can be unset if the mapping is unknown or not applicable for 146 // this profile type. 147 uint64 mapping_id = 2; 148 // The instruction address for this location, if available. It 149 // should be within [Mapping.memory_start...Mapping.memory_limit] 150 // for the corresponding mapping. A non-leaf address may be in the 151 // middle of a call instruction. It is up to display tools to find 152 // the beginning of the instruction if necessary. 153 uint64 address = 3; 154 // Multiple line indicates this location has inlined functions, 155 // where the last entry represents the caller into which the 156 // preceding entries were inlined. 157 // 158 // E.g., if memcpy() is inlined into printf: 159 // line[0].function_name == "memcpy" 160 // line[1].function_name == "printf" 161 repeated Line line = 4; 162 } 163 164 message Line { 165 // The id of the corresponding profile.Function for this line. 166 uint64 function_id = 1; 167 // Line number in source code. 168 int64 line = 2; 169 } 170 171 message Function { 172 // Unique nonzero id for the function. 173 uint64 id = 1; 174 // Name of the function, in human-readable form if available. 175 int64 name = 2; // Index into string table 176 // Name of the function, as identified by the system. 177 // For instance, it can be a C++ mangled name. 178 int64 system_name = 3; // Index into string table 179 // Source file containing the function. 180 int64 filename = 4; // Index into string table 181 // Line number in source file. 182 int64 start_line = 5; 183 }