const Callgrind … const Comments … const Dis … const Dot … const List … const Proto … const Raw … const Tags … const Text … const TopProto … const Traces … const Tree … const WebList … type Options … // Generate generates a report as directed by the Report. func Generate(w io.Writer, rpt *Report, obj plugin.ObjTool) error { … } // newTrimmedGraph creates a graph for this report, trimmed according // to the report options. func (rpt *Report) newTrimmedGraph() (g *graph.Graph, origCount, droppedNodes, droppedEdges int) { … } func (rpt *Report) selectOutputUnit(g *graph.Graph) { … } // newGraph creates a new graph for this report. If nodes is non-nil, // only nodes whose info matches are included. Otherwise, all nodes // are included, without trimming. func (rpt *Report) newGraph(nodes graph.NodeSet) *graph.Graph { … } // printProto writes the incoming proto via the writer w. // If the divide_by option has been specified, samples are scaled appropriately. func printProto(w io.Writer, rpt *Report) error { … } // printTopProto writes a list of the hottest routines in a profile as a profile.proto. func printTopProto(w io.Writer, rpt *Report) error { … } type functionMap … // findOrAdd takes a node representing a function, adds the function // represented by the node to the map if the function is not already present, // and returns the function the node represents. This also returns a boolean, // which is true if the function was added and false otherwise. func (fm functionMap) findOrAdd(ni graph.NodeInfo) (*profile.Function, bool) { … } // printAssembly prints an annotated assembly listing. func printAssembly(w io.Writer, rpt *Report, obj plugin.ObjTool) error { … } // PrintAssembly prints annotated disassembly of rpt to w. func PrintAssembly(w io.Writer, rpt *Report, obj plugin.ObjTool, maxFuncs int) error { … } // symbolsFromBinaries examines the binaries listed on the profile that have // associated samples, and returns the identified symbols matching rx. func symbolsFromBinaries(prof *profile.Profile, g *graph.Graph, rx *regexp.Regexp, address *uint64, obj plugin.ObjTool) []*objSymbol { … } type objSymbol … type orderSyms … func (o orderSyms) Len() int { … } func (o orderSyms) Less(i, j int) bool { … } func (o orderSyms) Swap(i, j int) { … } // nodesPerSymbol classifies nodes into a group of symbols. func nodesPerSymbol(ns graph.Nodes, symbols []*objSymbol) map[*objSymbol]graph.Nodes { … } type assemblyInstruction … type callID … func (a *assemblyInstruction) flatValue() int64 { … } func (a *assemblyInstruction) cumValue() int64 { … } // annotateAssembly annotates a set of assembly instructions with a // set of samples. It returns a set of nodes to display. base is an // offset to adjust the sample addresses. func annotateAssembly(insts []plugin.Inst, samples graph.Nodes, file plugin.ObjFile) []assemblyInstruction { … } // valueOrDot formats a value according to a report, intercepting zero // values. func valueOrDot(value int64, rpt *Report) string { … } // printTags collects all tags referenced in the profile and prints // them in a sorted table. func printTags(w io.Writer, rpt *Report) error { … } // printComments prints all freeform comments in the profile. func printComments(w io.Writer, rpt *Report) error { … } type TextItem … // TextItems returns a list of text items from the report and a list // of labels that describe the report. func TextItems(rpt *Report) ([]TextItem, []string) { … } // printText prints a flat text report for a profile. func printText(w io.Writer, rpt *Report) error { … } // printTraces prints all traces from a profile. func printTraces(w io.Writer, rpt *Report) error { … } // printCallgrind prints a graph for a profile on callgrind format. func printCallgrind(w io.Writer, rpt *Report) error { … } // getDisambiguatedNames returns a map from each node in the graph to // the name to use in the callgrind output. Callgrind merges all // functions with the same [file name, function name]. Add a [%d/n] // suffix to disambiguate nodes with different values of // node.Function, which we want to keep separate. In particular, this // affects graphs created with --call_tree, where nodes from different // contexts are associated to different Functions. func getDisambiguatedNames(g *graph.Graph) map[*graph.Node]string { … } // callgrindName implements the callgrind naming compression scheme. // For names not previously seen returns "(N) name", where N is a // unique index. For names previously seen returns "(N)" where N is // the index returned the first time. func callgrindName(names map[string]int, name string) string { … } // callgrindAddress implements the callgrind subposition compression scheme if // possible. If prevInfo != nil, it contains the previous address. The current // address can be given relative to the previous address, with an explicit +/- // to indicate it is relative, or * for the same address. func callgrindAddress(prevInfo *graph.NodeInfo, curr uint64) string { … } // printTree prints a tree-based report in text form. func printTree(w io.Writer, rpt *Report) error { … } // GetDOT returns a graph suitable for dot processing along with some // configuration information. func GetDOT(rpt *Report) (*graph.Graph, *graph.DotConfig) { … } // printDOT prints an annotated callgraph in DOT format. func printDOT(w io.Writer, rpt *Report) error { … } // ProfileLabels returns printable labels for a profile. func ProfileLabels(rpt *Report) []string { … } func graphTotal(g *graph.Graph) int64 { … } // reportLabels returns printable labels for a report. Includes // profileLabels. func reportLabels(rpt *Report, shownTotal int64, nodeCount, origCount, droppedNodes, droppedEdges int, fullHeaders bool) []string { … } func legendActiveFilters(activeFilters []string) []string { … } func genLabel(d int, n, l, f string) string { … } // New builds a new report indexing the sample values interpreting the // samples with the provided function. func New(prof *profile.Profile, o *Options) *Report { … } // NewDefault builds a new report indexing the last sample value // available. func NewDefault(prof *profile.Profile, options Options) *Report { … } // computeTotal computes the sum of the absolute value of all sample values. // If any samples have label indicating they belong to the diff base, then the // total will only include samples with that label. func computeTotal(prof *profile.Profile, value, meanDiv func(v []int64) int64) int64 { … } type Report … // Total returns the total number of samples in a report. func (rpt *Report) Total() int64 { … } // OutputFormat returns the output format for the report. func (rpt *Report) OutputFormat() int { … } func abs64(i int64) int64 { … }