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  }