| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| syntax = "proto2"; |
| |
| option optimize_for = LITE_RUNTIME; |
| |
| option java_outer_classname = "CallStackProfileProtos"; |
| option java_package = "org.chromium.components.metrics"; |
| |
| package metrics; |
| |
| import "execution_context.proto"; |
| |
| // Call stack sample data for a given profiling session. |
| // Next tag: 11 |
| message CallStackProfile { |
| // Uniquely identifies a module. |
| message ModuleIdentifier { |
| // A hash that uniquely identifies a particular program version with high |
| // probability. This is parsed from headers of the loaded module. |
| // For binaries generated by GNU tools: |
| // Contents of the .note.gnu.build-id field. |
| // On Windows: |
| // GUID + AGE in the debug image headers of a module. |
| optional string build_id = 1; |
| |
| // MD5Sum Prefix of the module name. This is the same hashing scheme as used |
| // to hash UMA histogram names. |
| optional fixed64 name_md5_prefix = 2; |
| } |
| |
| // Describes a location within executable code. |
| message Location { |
| // Instruction pointer subtracted by module base. |
| optional uint64 address = 1; |
| |
| // Index to the module identifier in |module_ids| of CallStackProfile. |
| optional int32 module_id_index = 2; |
| } |
| |
| // The sampled call stack. |
| message Stack { |
| // The frames in the callstack. The frame[0] entry represents the call on |
| // the top of the stack. |
| repeated Location frame = 1; |
| } |
| |
| // An item of metadata associated with either the entire profile or a single |
| // sample. |
| message MetadataItem { |
| // Index of the hash of the metadata name. |
| optional int32 name_hash_index = 1; |
| |
| // Value for the item. An absent value indicates the metadata has become |
| // unset since the previous StackSample. |
| optional sint64 value = 2; |
| } |
| |
| // Backtrace of locations of async execution requests (e.g. task postings, IPC |
| // message sending, requests over mojo) that led to the current task |
| // execution. Note that these are saved in a fixed length buffer on the client |
| // which as of 2018/08/14 includes only the most recent four entries. |
| message AsyncBacktrace { |
| // The locations saved in the backtrace, with the most recent in |
| // location[0]. Empty if the work was not tied to an async execution request |
| // -- for example, handling a mouse event. |
| repeated Location location = 1; |
| } |
| |
| // Deprecated version of a sample consisting of one or more callstacks with |
| // the same stack frames and instruction pointers. Deprecated as of |
| // 2018/08/14. |
| message Sample { |
| // The callstack. Sample.frame[0] represents the call on the top of the |
| // stack. |
| repeated Location frame = 1; |
| |
| // Number of times this stack signature occurs. |
| optional int64 count = 2; |
| |
| // This repeating field indicates the current phase of the system such as |
| // whether it is in startup, general operation, or shutdown. The first |
| // Sample of a CallStackProfile will list all phases that have been reached; |
| // later samples will list only the new phases that occurred since the |
| // previous one. |
| repeated ProcessPhase process_phase = 3; |
| } |
| |
| // A sampled stack, along with associated metadata. |
| message StackSample { |
| // Index into the profile's repeated |stack| field for the stack |
| // corresponding to this sample. |
| optional int32 stack_index = 1; |
| |
| // Sample time relative to the first sample. |
| optional int32 sample_time_offset_ms = 2; |
| |
| // True if this sample is executing the same item of work (task, event) as |
| // the last sample. |
| optional bool continued_work = 3; |
| |
| // Index of the backtrace in the profile of posted task locations that led |
| // to this task execution. |
| optional int32 async_backtrace_index = 4; |
| |
| // Metadata items associated with the sample. To minimize memory usage, |
| // metadata items are specified only when their values change from the |
| // previous sample. Items are not guaranteed to be in a particular order. |
| repeated MetadataItem metadata = 5; |
| } |
| |
| // The previous sample encoding. Deprecated 2018/08/04 in favor of |
| // stack_sample. |
| repeated Sample DEPRECATED_sample = 1 [deprecated = true]; |
| |
| // List of module ids found in this sample. |
| repeated ModuleIdentifier module_id = 2; |
| |
| // Metadata name hashes used in this profile. Recorded global to the profile |
| // to minimize per-sample memory usage. |
| repeated fixed64 metadata_name_hash = 5; |
| |
| // Metadata global to the profile. |
| repeated MetadataItem profile_metadata = 6; |
| |
| // The distinct async backtraces for the samples. |
| repeated AsyncBacktrace async_backtrace = 7; |
| |
| // The distinct stacks for the samples. |
| repeated Stack stack = 8; |
| |
| // The stack samples collected for this profile. |
| repeated StackSample stack_sample = 9; |
| |
| // Time of the first sample relative to Chrome start. This value may be |
| // imprecise or wrong for Windows clients without high-resolution |
| // TimeTicks. TODO(wittman): Clarify the actual properties of this value for |
| // clients without high-resolution TimeTicks once we understand what they are. |
| optional int64 profile_start_time_offset_ms = 10; |
| |
| // Duration of this profile. |
| optional int32 profile_duration_ms = 3; |
| |
| // Time between samples. |
| optional int32 sampling_period_ms = 4; |
| } |