Documentation ¶
Index ¶
- Variables
- func CombineTree(leftTree, rightTree *Tree) (*Tree, *Tree)
- func FindFunctionName(x *Profile, locID uint64) (string, bool)
- type Finder
- type Flamebearer
- type Format
- type Function
- func (*Function) Descriptor() ([]byte, []int)deprecated
- func (x *Function) GetFilename() int64
- func (x *Function) GetId() uint64
- func (x *Function) GetName() int64
- func (x *Function) GetStartLine() int64
- func (x *Function) GetSystemName() int64
- func (m *Function) MarshalToSizedBufferVT(dAtA []byte) (int, error)
- func (m *Function) MarshalToVT(dAtA []byte) (int, error)
- func (m *Function) MarshalVT() (dAtA []byte, err error)
- func (*Function) ProtoMessage()
- func (x *Function) ProtoReflect() protoreflect.Message
- func (x *Function) Reset()
- func (m *Function) SizeVT() (n int)
- func (x *Function) String() string
- func (m *Function) UnmarshalVT(dAtA []byte) error
- type FunctionFinder
- type Label
- func (*Label) Descriptor() ([]byte, []int)deprecated
- func (x *Label) GetKey() int64
- func (x *Label) GetNum() int64
- func (x *Label) GetNumUnit() int64
- func (x *Label) GetStr() int64
- func (m *Label) MarshalToSizedBufferVT(dAtA []byte) (int, error)
- func (m *Label) MarshalToVT(dAtA []byte) (int, error)
- func (m *Label) MarshalVT() (dAtA []byte, err error)
- func (*Label) ProtoMessage()
- func (x *Label) ProtoReflect() protoreflect.Message
- func (x *Label) Reset()
- func (m *Label) SizeVT() (n int)
- func (x *Label) String() string
- func (m *Label) UnmarshalVT(dAtA []byte) error
- type Labels
- type LabelsCache
- func (c *LabelsCache[T]) Get(sampleType int64, h uint64) (*LabelsCacheEntry[T], bool)
- func (c *LabelsCache[T]) GetOrCreateTree(sampleType int64, l Labels) *LabelsCacheEntry[T]
- func (c *LabelsCache[T]) GetOrCreateTreeByHash(sampleType int64, l Labels, h uint64) *LabelsCacheEntry[T]
- func (c *LabelsCache[T]) NewCacheEntry(l Labels) *LabelsCacheEntry[T]
- func (c *LabelsCache[T]) Put(sampleType int64, e *LabelsCacheEntry[T])
- func (c *LabelsCache[T]) Remove(sampleType int64, h uint64)
- type LabelsCacheEntry
- type Line
- func (*Line) Descriptor() ([]byte, []int)deprecated
- func (x *Line) GetFunctionId() uint64
- func (x *Line) GetLine() int64
- func (m *Line) MarshalToSizedBufferVT(dAtA []byte) (int, error)
- func (m *Line) MarshalToVT(dAtA []byte) (int, error)
- func (m *Line) MarshalVT() (dAtA []byte, err error)
- func (*Line) ProtoMessage()
- func (x *Line) ProtoReflect() protoreflect.Message
- func (x *Line) Reset()
- func (m *Line) SizeVT() (n int)
- func (x *Line) String() string
- func (m *Line) UnmarshalVT(dAtA []byte) error
- type Location
- func (*Location) Descriptor() ([]byte, []int)deprecated
- func (x *Location) GetAddress() uint64
- func (x *Location) GetId() uint64
- func (x *Location) GetIsFolded() bool
- func (x *Location) GetLine() []*Line
- func (x *Location) GetMappingId() uint64
- func (m *Location) MarshalToSizedBufferVT(dAtA []byte) (int, error)
- func (m *Location) MarshalToVT(dAtA []byte) (int, error)
- func (m *Location) MarshalVT() (dAtA []byte, err error)
- func (*Location) ProtoMessage()
- func (x *Location) ProtoReflect() protoreflect.Message
- func (x *Location) Reset()
- func (m *Location) SizeVT() (n int)
- func (x *Location) String() string
- func (m *Location) UnmarshalVT(dAtA []byte) error
- type LocationFinder
- type Mapping
- func (*Mapping) Descriptor() ([]byte, []int)deprecated
- func (x *Mapping) GetBuildId() int64
- func (x *Mapping) GetFileOffset() uint64
- func (x *Mapping) GetFilename() int64
- func (x *Mapping) GetHasFilenames() bool
- func (x *Mapping) GetHasFunctions() bool
- func (x *Mapping) GetHasInlineFrames() bool
- func (x *Mapping) GetHasLineNumbers() bool
- func (x *Mapping) GetId() uint64
- func (x *Mapping) GetMemoryLimit() uint64
- func (x *Mapping) GetMemoryStart() uint64
- func (m *Mapping) MarshalToSizedBufferVT(dAtA []byte) (int, error)
- func (m *Mapping) MarshalToVT(dAtA []byte) (int, error)
- func (m *Mapping) MarshalVT() (dAtA []byte, err error)
- func (*Mapping) ProtoMessage()
- func (x *Mapping) ProtoReflect() protoreflect.Message
- func (x *Mapping) Reset()
- func (m *Mapping) SizeVT() (n int)
- func (x *Mapping) String() string
- func (m *Mapping) UnmarshalVT(dAtA []byte) error
- type PprofMetadata
- type Profile
- func (*Profile) Descriptor() ([]byte, []int)deprecated
- func (x *Profile) Get(sampleType string, cb func(labels *spy.Labels, name []byte, val int) error) error
- func (x *Profile) GetComment() []int64
- func (x *Profile) GetDefaultSampleType() int64
- func (x *Profile) GetDropFrames() int64
- func (x *Profile) GetDurationNanos() int64
- func (x *Profile) GetFunction() []*Function
- func (x *Profile) GetKeepFrames() int64
- func (x *Profile) GetLocation() []*Location
- func (x *Profile) GetMapping() []*Mapping
- func (x *Profile) GetPeriod() int64
- func (x *Profile) GetPeriodType() *ValueType
- func (x *Profile) GetSample() []*Sample
- func (x *Profile) GetSampleType() []*ValueType
- func (x *Profile) GetStringTable() []string
- func (x *Profile) GetTimeNanos() int64
- func (m *Profile) MarshalToSizedBufferVT(dAtA []byte) (int, error)
- func (m *Profile) MarshalToVT(dAtA []byte) (int, error)
- func (m *Profile) MarshalVT() (dAtA []byte, err error)
- func (*Profile) ProtoMessage()
- func (x *Profile) ProtoReflect() protoreflect.Message
- func (x *Profile) Reset()
- func (m *Profile) ResetVT()
- func (x *Profile) ResolveLabelName(l *Label) (string, bool)
- func (x *Profile) ResolveLabels(l Labels) map[string]string
- func (x *Profile) ResolveSampleType(v int64) (*ValueType, bool)
- func (m *Profile) ReturnToVTPool()
- func (x *Profile) SampleTypes() []string
- func (m *Profile) SizeVT() (n int)
- func (x *Profile) String() string
- func (m *Profile) UnmarshalVT(dAtA []byte) error
- type Sample
- func (*Sample) Descriptor() ([]byte, []int)deprecated
- func (x *Sample) GetLabel() []*Label
- func (x *Sample) GetLocationId() []uint64
- func (x *Sample) GetValue() []int64
- func (m *Sample) MarshalToSizedBufferVT(dAtA []byte) (int, error)
- func (m *Sample) MarshalToVT(dAtA []byte) (int, error)
- func (m *Sample) MarshalVT() (dAtA []byte, err error)
- func (*Sample) ProtoMessage()
- func (x *Sample) ProtoReflect() protoreflect.Message
- func (x *Sample) Reset()
- func (m *Sample) SizeVT() (n int)
- func (x *Sample) String() string
- func (m *Sample) UnmarshalVT(dAtA []byte) error
- type SampleTypeConfig
- type StackBuilder
- type Tree
- func (t *Tree) Clone(r *big.Rat) *Tree
- func (t *Tree) Collapsed() string
- func (t *Tree) Diff(x *Tree) *Tree
- func (t *Tree) FlamebearerStruct(maxNodes int) *Flamebearer
- func (t *Tree) Insert(key []byte, value uint64)
- func (t *Tree) InsertInt(key []byte, value int)
- func (t *Tree) InsertStack(stack [][]byte, v uint64)
- func (t *Tree) InsertStackA(stack [][]byte, v uint64)
- func (t *Tree) InsertStackString(stack []string, v uint64)
- func (t *Tree) Iterate(cb func(key []byte, val uint64))
- func (t *Tree) IterateStacks(cb func(name string, self uint64, stack []string))
- func (t *Tree) IterateWithStackBuilder(sb StackBuilder, cb func(stackID uint64, val uint64))
- func (t *Tree) MarshalJSON() ([]byte, error)
- func (t *Tree) Merge(srcTrieI merge.Merger)
- func (t *Tree) Pprof(mdata *PprofMetadata) *Profile
- func (t *Tree) Samples() uint64
- func (t *Tree) Scale(s uint64)
- func (t *Tree) SerializeTruncate(d *dict.Dict, maxNodes int, w io.Writer) error
- func (t *Tree) SerializeTruncateNoDict(maxNodes int, w io.Writer) error
- func (t *Tree) String() string
- type ValueType
- func (*ValueType) Descriptor() ([]byte, []int)deprecated
- func (x *ValueType) GetType() int64
- func (x *ValueType) GetUnit() int64
- func (m *ValueType) MarshalToSizedBufferVT(dAtA []byte) (int, error)
- func (m *ValueType) MarshalToVT(dAtA []byte) (int, error)
- func (m *ValueType) MarshalVT() (dAtA []byte, err error)
- func (*ValueType) ProtoMessage()
- func (x *ValueType) ProtoReflect() protoreflect.Message
- func (x *ValueType) Reset()
- func (m *ValueType) SizeVT() (n int)
- func (x *ValueType) String() string
- func (m *ValueType) UnmarshalVT(dAtA []byte) error
Constants ¶
This section is empty.
Variables ¶
var DefaultSampleTypeMapping = map[string]*SampleTypeConfig{ "samples": { DisplayName: "cpu", Units: metadata.SamplesUnits, Sampled: true, }, "inuse_objects": { Units: metadata.ObjectsUnits, Aggregation: metadata.AverageAggregationType, }, "alloc_objects": { Units: metadata.ObjectsUnits, Cumulative: true, }, "inuse_space": { Units: metadata.BytesUnits, Aggregation: metadata.AverageAggregationType, }, "alloc_space": { Units: metadata.BytesUnits, Cumulative: true, }, "goroutine": { DisplayName: "goroutines", Units: metadata.GoroutinesUnits, Aggregation: metadata.AverageAggregationType, }, "contentions": { DisplayName: "mutex_count", Units: metadata.LockSamplesUnits, Cumulative: true, }, "delay": { DisplayName: "mutex_duration", Units: metadata.LockNanosecondsUnits, Cumulative: true, }, }
DefaultSampleTypeMapping contains default settings for every supported pprof sample type. These settings are required to build a proper storage.PutInput payload.
TODO(kolesnikovae): We should find a way to eliminate collisions.
For example, both Go 'block' and 'mutex' profiles have 'contentions' and 'delay' sample types - this means we can't override display name of the profile types and they would be indistinguishable for the server. The keys should have the following structure: {origin}.{profile_type}.{sample_type} Example names (can be a reserved label, e.g __type__): * go.cpu.samples * go.block.delay * go.mutex.delay * nodejs.heap.objects
Another problem is that in pull mode we don't have spy-name, therefore we should solve this problem first.
var File_og_storage_tree_profile_proto protoreflect.FileDescriptor
Functions ¶
func CombineTree ¶
CombineTree aligns 2 trees by making them having the same structure with the same number of nodes TODO: create a new struct?
Types ¶
type Finder ¶
type Finder interface { FunctionFinder LocationFinder }
func NewFinder ¶
NewFinder creates an efficient finder for functions or locations in a profile.
It exists to abstract the details of how functions and locations exist in a pprof profile, and make it easy to provide an efficient implementation depending on the actual profile format, as location and function finding is a recurrent operation while processing pprof profiles.
The [pprof format description](https://github.com/google/pprof/tree/master/proto#general-structure-of-a-profile) describes that both locations and functions have unique nonzero ids. A [comment in the proto file](https://github.com/google/pprof/blob/master/proto/profile.proto#L164-L166) goes further: _A profile could use instruction addresses or any integer sequence as ids_.
Based on this, any uint64 value (except 0) can appear as ids, and a map based cache can be used in that case. In practice, [go runtime](https://github.com/golang/go/blob/master/src/runtime/pprof/proto.go#L537) generates profiles where locations and functions use consecutive IDs starting from 1, making optimized access possible.
Taking advantage of this, the finder will try to:
- Use direct access to functions and locations indexed by IDs when possible (sorting location and function sequences if needed).
- Use a map based cache otherwise.
type Flamebearer ¶
type Flamebearer struct { Names []string `json:"names"` Levels [][]int `json:"levels"` NumTicks int `json:"numTicks"` MaxSelf int `json:"maxSelf"` // TODO: see note in render.go SpyName string `json:"spyName"` SampleRate uint32 `json:"sampleRate"` Units string `json:"units"` Format Format `json:"format"` }
func CombineToFlamebearerStruct ¶
func CombineToFlamebearerStruct(leftTree, rightTree *Tree, maxNodes int) *Flamebearer
CombineToFlamebearerStruct generates the Flamebearer struct from 2 trees. They must be the response trees from CombineTree (i.e. all children nodes must be the same length). The Flamebearer struct returned from this function is different to the one returned from Tree.FlamebearerStruct(). It has the following structure:
i+0 = x offset, left tree i+1 = total , left tree i+2 = self , left tree i+3 = x offset, right tree i+4 = total , right tree i+5 = self , right tree i+6 = index in the names array
type Function ¶
type Function struct { // Unique nonzero id for the function. Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // Name of the function, in human-readable form if available. Name int64 `protobuf:"varint,2,opt,name=name,proto3" json:"name,omitempty"` // Index into string table // Name of the function, as identified by the system. // For instance, it can be a C++ mangled name. SystemName int64 `protobuf:"varint,3,opt,name=system_name,json=systemName,proto3" json:"system_name,omitempty"` // Index into string table // Source file containing the function. Filename int64 `protobuf:"varint,4,opt,name=filename,proto3" json:"filename,omitempty"` // Index into string table // Line number in source file. StartLine int64 `protobuf:"varint,5,opt,name=start_line,json=startLine,proto3" json:"start_line,omitempty"` // contains filtered or unexported fields }
func (*Function) Descriptor
deprecated
func (*Function) GetFilename ¶
func (*Function) GetStartLine ¶
func (*Function) GetSystemName ¶
func (*Function) MarshalToSizedBufferVT ¶
func (*Function) ProtoMessage ¶
func (*Function) ProtoMessage()
func (*Function) ProtoReflect ¶
func (x *Function) ProtoReflect() protoreflect.Message
func (*Function) UnmarshalVT ¶
type FunctionFinder ¶
Find function in a profile based on its ID
type Label ¶
type Label struct { Key int64 `protobuf:"varint,1,opt,name=key,proto3" json:"key,omitempty"` // Index into string table // At most one of the following must be present Str int64 `protobuf:"varint,2,opt,name=str,proto3" json:"str,omitempty"` // Index into string table Num int64 `protobuf:"varint,3,opt,name=num,proto3" json:"num,omitempty"` // Should only be present when num is present. // Specifies the units of num. // Use arbitrary string (for example, "requests") as a custom count unit. // If no unit is specified, consumer may apply heuristic to deduce the unit. // Consumers may also interpret units like "bytes" and "kilobytes" as memory // units and units like "seconds" and "nanoseconds" as time units, // and apply appropriate unit conversions to these. NumUnit int64 `protobuf:"varint,4,opt,name=num_unit,json=numUnit,proto3" json:"num_unit,omitempty"` // Index into string table // contains filtered or unexported fields }
func (*Label) Descriptor
deprecated
func (*Label) GetNumUnit ¶
func (*Label) MarshalToSizedBufferVT ¶
func (*Label) ProtoMessage ¶
func (*Label) ProtoMessage()
func (*Label) ProtoReflect ¶
func (x *Label) ProtoReflect() protoreflect.Message
func (*Label) UnmarshalVT ¶
type Labels ¶
type Labels []*Label
func CopyLabels ¶
type LabelsCache ¶
type LabelsCache[T any] struct { Map map[int64]map[uint64]*LabelsCacheEntry[T] Factory func() *T }
sample type -> labels hash -> entry
func NewLabelsCache ¶ added in v1.1.0
func NewLabelsCache[T any](factory func() *T) LabelsCache[T]
func (*LabelsCache[T]) Get ¶
func (c *LabelsCache[T]) Get(sampleType int64, h uint64) (*LabelsCacheEntry[T], bool)
func (*LabelsCache[T]) GetOrCreateTree ¶
func (c *LabelsCache[T]) GetOrCreateTree(sampleType int64, l Labels) *LabelsCacheEntry[T]
func (*LabelsCache[T]) GetOrCreateTreeByHash ¶
func (c *LabelsCache[T]) GetOrCreateTreeByHash(sampleType int64, l Labels, h uint64) *LabelsCacheEntry[T]
func (*LabelsCache[T]) NewCacheEntry ¶ added in v1.1.0
func (c *LabelsCache[T]) NewCacheEntry(l Labels) *LabelsCacheEntry[T]
func (*LabelsCache[T]) Put ¶
func (c *LabelsCache[T]) Put(sampleType int64, e *LabelsCacheEntry[T])
func (*LabelsCache[T]) Remove ¶
func (c *LabelsCache[T]) Remove(sampleType int64, h uint64)
type LabelsCacheEntry ¶
type Line ¶
type Line struct { // The id of the corresponding profile.Function for this line. FunctionId uint64 `protobuf:"varint,1,opt,name=function_id,json=functionId,proto3" json:"function_id,omitempty"` // Line number in source code. Line int64 `protobuf:"varint,2,opt,name=line,proto3" json:"line,omitempty"` // contains filtered or unexported fields }
func (*Line) Descriptor
deprecated
func (*Line) GetFunctionId ¶
func (*Line) MarshalToSizedBufferVT ¶
func (*Line) ProtoMessage ¶
func (*Line) ProtoMessage()
func (*Line) ProtoReflect ¶
func (x *Line) ProtoReflect() protoreflect.Message
func (*Line) UnmarshalVT ¶
type Location ¶
type Location struct { // Unique nonzero id for the location. A profile could use // instruction addresses or any integer sequence as ids. Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // The id of the corresponding profile.Mapping for this location. // It can be unset if the mapping is unknown or not applicable for // this profile type. MappingId uint64 `protobuf:"varint,2,opt,name=mapping_id,json=mappingId,proto3" json:"mapping_id,omitempty"` // The instruction address for this location, if available. It // should be within [Mapping.memory_start...Mapping.memory_limit] // for the corresponding mapping. A non-leaf address may be in the // middle of a call instruction. It is up to display tools to find // the beginning of the instruction if necessary. Address uint64 `protobuf:"varint,3,opt,name=address,proto3" json:"address,omitempty"` // Multiple line indicates this location has inlined functions, // where the last entry represents the caller into which the // preceding entries were inlined. // // E.g., if memcpy() is inlined into printf: // // line[0].function_name == "memcpy" // line[1].function_name == "printf" Line []*Line `protobuf:"bytes,4,rep,name=line,proto3" json:"line,omitempty"` // Provides an indication that multiple symbols map to this location's // address, for example due to identical code folding by the linker. In that // case the line information above represents one of the multiple // symbols. This field must be recomputed when the symbolization state of the // profile changes. IsFolded bool `protobuf:"varint,5,opt,name=is_folded,json=isFolded,proto3" json:"is_folded,omitempty"` // contains filtered or unexported fields }
Describes function and line table debug information.
func (*Location) Descriptor
deprecated
func (*Location) GetAddress ¶
func (*Location) GetIsFolded ¶
func (*Location) GetMappingId ¶
func (*Location) MarshalToSizedBufferVT ¶
func (*Location) ProtoMessage ¶
func (*Location) ProtoMessage()
func (*Location) ProtoReflect ¶
func (x *Location) ProtoReflect() protoreflect.Message
func (*Location) UnmarshalVT ¶
type LocationFinder ¶
Find location in a profile based on its ID
type Mapping ¶
type Mapping struct { // Unique nonzero id for the mapping. Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // Address at which the binary (or DLL) is loaded into memory. MemoryStart uint64 `protobuf:"varint,2,opt,name=memory_start,json=memoryStart,proto3" json:"memory_start,omitempty"` // The limit of the address range occupied by this mapping. MemoryLimit uint64 `protobuf:"varint,3,opt,name=memory_limit,json=memoryLimit,proto3" json:"memory_limit,omitempty"` // Offset in the binary that corresponds to the first mapped address. FileOffset uint64 `protobuf:"varint,4,opt,name=file_offset,json=fileOffset,proto3" json:"file_offset,omitempty"` // The object this entry is loaded from. This can be a filename on // disk for the main binary and shared libraries, or virtual // abstractions like "[vdso]". Filename int64 `protobuf:"varint,5,opt,name=filename,proto3" json:"filename,omitempty"` // Index into string table // A string that uniquely identifies a particular program version // with high probability. E.g., for binaries generated by GNU tools, // it could be the contents of the .note.gnu.build-id field. BuildId int64 `protobuf:"varint,6,opt,name=build_id,json=buildId,proto3" json:"build_id,omitempty"` // Index into string table // The following fields indicate the resolution of symbolic info. HasFunctions bool `protobuf:"varint,7,opt,name=has_functions,json=hasFunctions,proto3" json:"has_functions,omitempty"` HasFilenames bool `protobuf:"varint,8,opt,name=has_filenames,json=hasFilenames,proto3" json:"has_filenames,omitempty"` HasLineNumbers bool `protobuf:"varint,9,opt,name=has_line_numbers,json=hasLineNumbers,proto3" json:"has_line_numbers,omitempty"` HasInlineFrames bool `protobuf:"varint,10,opt,name=has_inline_frames,json=hasInlineFrames,proto3" json:"has_inline_frames,omitempty"` // contains filtered or unexported fields }
func (*Mapping) Descriptor
deprecated
func (*Mapping) GetBuildId ¶
func (*Mapping) GetFileOffset ¶
func (*Mapping) GetFilename ¶
func (*Mapping) GetHasFilenames ¶
func (*Mapping) GetHasFunctions ¶
func (*Mapping) GetHasInlineFrames ¶
func (*Mapping) GetHasLineNumbers ¶
func (*Mapping) GetMemoryLimit ¶
func (*Mapping) GetMemoryStart ¶
func (*Mapping) MarshalToSizedBufferVT ¶
func (*Mapping) ProtoMessage ¶
func (*Mapping) ProtoMessage()
func (*Mapping) ProtoReflect ¶
func (x *Mapping) ProtoReflect() protoreflect.Message
func (*Mapping) UnmarshalVT ¶
type PprofMetadata ¶
type Profile ¶
type Profile struct { // A description of the samples associated with each Sample.value. // For a cpu profile this might be: // // [["cpu","nanoseconds"]] or [["wall","seconds"]] or [["syscall","count"]] // // For a heap profile, this might be: // // [["allocations","count"], ["space","bytes"]], // // If one of the values represents the number of events represented // by the sample, by convention it should be at index 0 and use // sample_type.unit == "count". SampleType []*ValueType `protobuf:"bytes,1,rep,name=sample_type,json=sampleType,proto3" json:"sample_type,omitempty"` // The set of samples recorded in this profile. Sample []*Sample `protobuf:"bytes,2,rep,name=sample,proto3" json:"sample,omitempty"` // Mapping from address ranges to the image/binary/library mapped // into that address range. mapping[0] will be the main binary. Mapping []*Mapping `protobuf:"bytes,3,rep,name=mapping,proto3" json:"mapping,omitempty"` // Useful program location Location []*Location `protobuf:"bytes,4,rep,name=location,proto3" json:"location,omitempty"` // Functions referenced by locations Function []*Function `protobuf:"bytes,5,rep,name=function,proto3" json:"function,omitempty"` // A common table for strings referenced by various messages. // string_table[0] must always be "". StringTable []string `protobuf:"bytes,6,rep,name=string_table,json=stringTable,proto3" json:"string_table,omitempty"` // frames with Function.function_name fully matching the following // regexp will be dropped from the samples, along with their successors. DropFrames int64 `protobuf:"varint,7,opt,name=drop_frames,json=dropFrames,proto3" json:"drop_frames,omitempty"` // Index into string table. // frames with Function.function_name fully matching the following // regexp will be kept, even if it matches drop_functions. KeepFrames int64 `protobuf:"varint,8,opt,name=keep_frames,json=keepFrames,proto3" json:"keep_frames,omitempty"` // Index into string table. // Time of collection (UTC) represented as nanoseconds past the epoch. TimeNanos int64 `protobuf:"varint,9,opt,name=time_nanos,json=timeNanos,proto3" json:"time_nanos,omitempty"` // Duration of the profile, if a duration makes sense. DurationNanos int64 `protobuf:"varint,10,opt,name=duration_nanos,json=durationNanos,proto3" json:"duration_nanos,omitempty"` // The kind of events between sampled ocurrences. // e.g [ "cpu","cycles" ] or [ "heap","bytes" ] PeriodType *ValueType `protobuf:"bytes,11,opt,name=period_type,json=periodType,proto3" json:"period_type,omitempty"` // The number of events between sampled occurrences. Period int64 `protobuf:"varint,12,opt,name=period,proto3" json:"period,omitempty"` // Freeform text associated to the profile. Comment []int64 `protobuf:"varint,13,rep,packed,name=comment,proto3" json:"comment,omitempty"` // Indices into string table. // Index into the string table of the type of the preferred sample // value. If unset, clients should default to the last sample value. DefaultSampleType int64 `protobuf:"varint,14,opt,name=default_sample_type,json=defaultSampleType,proto3" json:"default_sample_type,omitempty"` // contains filtered or unexported fields }
func ProfileFromVTPool ¶
func ProfileFromVTPool() *Profile
func (*Profile) Descriptor
deprecated
func (*Profile) GetComment ¶
func (*Profile) GetDefaultSampleType ¶
func (*Profile) GetDropFrames ¶
func (*Profile) GetDurationNanos ¶
func (*Profile) GetFunction ¶
func (*Profile) GetKeepFrames ¶
func (*Profile) GetLocation ¶
func (*Profile) GetMapping ¶
func (*Profile) GetPeriodType ¶
func (*Profile) GetSampleType ¶
func (*Profile) GetStringTable ¶
func (*Profile) GetTimeNanos ¶
func (*Profile) MarshalToSizedBufferVT ¶
func (*Profile) ProtoMessage ¶
func (*Profile) ProtoMessage()
func (*Profile) ProtoReflect ¶
func (x *Profile) ProtoReflect() protoreflect.Message
func (*Profile) ReturnToVTPool ¶
func (m *Profile) ReturnToVTPool()
func (*Profile) SampleTypes ¶
func (*Profile) UnmarshalVT ¶
type Sample ¶
type Sample struct { // The ids recorded here correspond to a Profile.location.id. // The leaf is at location_id[0]. LocationId []uint64 `protobuf:"varint,1,rep,packed,name=location_id,json=locationId,proto3" json:"location_id,omitempty"` // The type and unit of each value is defined by the corresponding // entry in Profile.sample_type. All samples must have the same // number of values, the same as the length of Profile.sample_type. // When aggregating multiple samples into a single sample, the // result has a list of values that is the element-wise sum of the // lists of the originals. Value []int64 `protobuf:"varint,2,rep,packed,name=value,proto3" json:"value,omitempty"` // label includes additional context for this sample. It can include // things like a thread id, allocation size, etc Label []*Label `protobuf:"bytes,3,rep,name=label,proto3" json:"label,omitempty"` // contains filtered or unexported fields }
Each Sample records values encountered in some program context. The program context is typically a stack trace, perhaps augmented with auxiliary information like the thread-id, some indicator of a higher level request being handled etc.
func (*Sample) Descriptor
deprecated
func (*Sample) GetLocationId ¶
func (*Sample) MarshalToSizedBufferVT ¶
func (*Sample) ProtoMessage ¶
func (*Sample) ProtoMessage()
func (*Sample) ProtoReflect ¶
func (x *Sample) ProtoReflect() protoreflect.Message
func (*Sample) UnmarshalVT ¶
type SampleTypeConfig ¶
type SampleTypeConfig struct { Units metadata.Units `json:"units,omitempty" yaml:"units,omitempty"` DisplayName string `json:"display-name,omitempty" yaml:"display-name,omitempty"` Aggregation metadata.AggregationType `json:"aggregation,omitempty" yaml:"aggregation,omitempty"` Cumulative bool `json:"cumulative,omitempty" yaml:"cumulative,omitempty"` Sampled bool `json:"sampled,omitempty" yaml:"sampled,omitempty"` }
type StackBuilder ¶
type Tree ¶
func (*Tree) FlamebearerStruct ¶
func (t *Tree) FlamebearerStruct(maxNodes int) *Flamebearer
func (*Tree) InsertStack ¶
func (*Tree) InsertStackA ¶
func (*Tree) InsertStackString ¶
func (*Tree) IterateStacks ¶
func (*Tree) IterateWithStackBuilder ¶
func (t *Tree) IterateWithStackBuilder(sb StackBuilder, cb func(stackID uint64, val uint64))
func (*Tree) MarshalJSON ¶
func (*Tree) Pprof ¶
func (t *Tree) Pprof(mdata *PprofMetadata) *Profile
func (*Tree) SerializeTruncate ¶
warning: this function modifies the tree
func (*Tree) SerializeTruncateNoDict ¶
used in the cloud warning: this function modifies the tree
type ValueType ¶
type ValueType struct { Type int64 `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"` // Index into string table. Unit int64 `protobuf:"varint,2,opt,name=unit,proto3" json:"unit,omitempty"` // Index into string table. // contains filtered or unexported fields }
ValueType describes the semantics and measurement units of a value.
func (*ValueType) Descriptor
deprecated
func (*ValueType) MarshalToSizedBufferVT ¶
func (*ValueType) ProtoMessage ¶
func (*ValueType) ProtoMessage()
func (*ValueType) ProtoReflect ¶
func (x *ValueType) ProtoReflect() protoreflect.Message