Documentation ¶
Overview ¶
Package graph collects a set of samples into a directed graph.
Index ¶
- func ComposeDot(w io.Writer, g *Graph, a *DotAttributes, c *DotConfig)
- func ShortenFunctionName(f string) string
- type DotAttributes
- type DotConfig
- type DotNodeAttributes
- type Edge
- type EdgeMap
- type Graph
- func (g *Graph) DiscardLowFrequencyNodePtrs(nodeCutoff int64) NodePtrSet
- func (g *Graph) DiscardLowFrequencyNodes(nodeCutoff int64) NodeSet
- func (g *Graph) RemoveRedundantEdges()
- func (g *Graph) SelectTopNodePtrs(maxNodes int, visualMode bool) NodePtrSet
- func (g *Graph) SelectTopNodes(maxNodes int, visualMode bool) NodeSet
- func (g *Graph) SortNodes(cum bool, visualMode bool)
- func (g *Graph) String() string
- func (g *Graph) TrimLowFrequencyEdges(edgeCutoff int64) int
- func (g *Graph) TrimLowFrequencyTags(tagCutoff int64)
- func (g *Graph) TrimTree(kept NodePtrSet)
- type Node
- type NodeInfo
- type NodeMap
- type NodeOrder
- type NodePtrSet
- type NodeSet
- type Nodes
- type Options
- type Tag
- type TagMap
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ComposeDot ¶
func ComposeDot(w io.Writer, g *Graph, a *DotAttributes, c *DotConfig)
ComposeDot creates and writes a in the DOT format to the writer, using the configurations given.
func ShortenFunctionName ¶
ShortenFunctionName returns a shortened version of a function's name.
Types ¶
type DotAttributes ¶
type DotAttributes struct {
Nodes map[*Node]*DotNodeAttributes // A map allowing each Node to have its own visualization option
}
DotAttributes contains details about the graph itself, giving insight into how its elements should be rendered.
type DotConfig ¶
type DotConfig struct { Title string // The title of the DOT graph LegendURL string // The URL to link to from the legend. Labels []string // The labels for the DOT's legend FormatValue func(int64) string // A formatting function for values Total int64 // The total weight of the graph, used to compute percentages }
DotConfig contains attributes about how a graph should be constructed and how it should look.
type DotNodeAttributes ¶
type DotNodeAttributes struct { Shape string // The optional shape of the node when rendered visually Bold bool // If the node should be bold or not Peripheries int // An optional number of borders to place around a node URL string // An optional url link to add to a node Formatter func(*NodeInfo) string // An optional formatter for the node's label }
DotNodeAttributes contains Node specific visualization options.
type Edge ¶
type Edge struct {
Src, Dest *Node
// The summary weight of the edge
Weight, WeightDiv int64
// residual edges connect nodes that were connected through a
// separate node, which has been removed from the report.
Residual bool
// An inline edge represents a call that was inlined into the caller.
Inline bool
}
Edge contains any attributes to be represented about edges in a graph.
func (*Edge) WeightValue ¶
WeightValue returns the weight value for this edge, normalizing if a divisor is available.
type EdgeMap ¶
EdgeMap is used to represent the incoming/outgoing edges from a node.
type Graph ¶
type Graph struct {
Nodes Nodes
}
Graph summarizes a performance profile into a format that is suitable for visualization.
func (*Graph) DiscardLowFrequencyNodePtrs ¶
func (g *Graph) DiscardLowFrequencyNodePtrs(nodeCutoff int64) NodePtrSet
DiscardLowFrequencyNodePtrs returns a NodePtrSet of nodes at or over a specific cum value cutoff.
func (*Graph) DiscardLowFrequencyNodes ¶
DiscardLowFrequencyNodes returns a set of the nodes at or over a specific cum value cutoff.
func (*Graph) RemoveRedundantEdges ¶
func (g *Graph) RemoveRedundantEdges()
RemoveRedundantEdges removes residual edges if the destination can be reached through another path. This is done to simplify the graph while preserving connectivity.
func (*Graph) SelectTopNodePtrs ¶
func (g *Graph) SelectTopNodePtrs(maxNodes int, visualMode bool) NodePtrSet
SelectTopNodePtrs returns a set of the top maxNodes *Node in a graph.
func (*Graph) SelectTopNodes ¶
SelectTopNodes returns a set of the top maxNodes nodes in a graph.
func (*Graph) TrimLowFrequencyEdges ¶
TrimLowFrequencyEdges removes edges that have less than the specified weight. Returns the number of edges removed
func (*Graph) TrimLowFrequencyTags ¶
TrimLowFrequencyTags removes tags that have less than the specified weight.
func (*Graph) TrimTree ¶
func (g *Graph) TrimTree(kept NodePtrSet)
TrimTree trims a Graph in forest form, keeping only the nodes in kept. This will not work correctly if even a single node has multiple parents.
type Node ¶
type Node struct { // Info describes the source location associated to this node. Info NodeInfo // Function represents the function that this node belongs to. On // graphs with sub-function resolution (eg line number or // addresses), two nodes in a NodeMap that are part of the same // function have the same value of Node.Function. If the Node // represents the whole function, it points back to itself. Function *Node // Values associated to this node. Flat is exclusive to this node, // Cum includes all descendents. Flat, FlatDiv, Cum, CumDiv int64 // In and out Contains the nodes immediately reaching or reached by // this node. In, Out EdgeMap // LabelTags provide additional information about subsets of a sample. LabelTags TagMap // NumericTags provide additional values for subsets of a sample. // Numeric tags are optionally associated to a label tag. The key // for NumericTags is the name of the LabelTag they are associated // to, or "" for numeric tags not associated to a label tag. NumericTags map[string]TagMap }
Node is an entry on a profiling report. It represents a unique program location.
func (*Node) AddToEdge ¶
AddToEdge increases the weight of an edge between two nodes. If there isn't such an edge one is created.
func (*Node) AddToEdgeDiv ¶
AddToEdgeDiv increases the weight of an edge between two nodes. If there isn't such an edge one is created.
type NodeInfo ¶
type NodeInfo struct { Name string OrigName string Address uint64 File string StartLine, Lineno int Objfile string }
NodeInfo contains the attributes for a node.
func (*NodeInfo) NameComponents ¶
NameComponents returns the components of the printable name to be used for a node.
func (*NodeInfo) PrintableName ¶
PrintableName calls the Node's Formatter function with a single space separator.
type NodeMap ¶
NodeMap maps from a node info struct to a node. It is used to merge report entries with the same info.
func (NodeMap) FindOrInsertNode ¶
FindOrInsertNode takes the info for a node and either returns a matching node from the node map if one exists, or adds one to the map if one does not. If kept is non-nil, nodes are only added if they can be located on it.
type NodePtrSet ¶
NodePtrSet is a collection of nodes. Trimming a graph or tree requires a set of objects which uniquely identify the nodes to keep. In a graph, NodeInfo works as a unique identifier; however, in a tree multiple nodes may share identical NodeInfos. A *Node does uniquely identify a node so we can use that instead. Though a *Node also uniquely identifies a node in a graph, currently, during trimming, graphs are rebuilt from scratch using only the NodeSet, so there would not be the required context of the initial graph to allow for the use of *Node.
type Nodes ¶
type Nodes []*Node
Nodes is an ordered collection of graph nodes.
func CreateNodes ¶
CreateNodes creates graph nodes for all locations in a profile. It returns set of all nodes, plus a mapping of each location to the set of corresponding nodes (one per location.Line).
type Options ¶
type Options struct { SampleValue func(s []int64) int64 // Function to compute the value of a sample SampleMeanDivisor func(s []int64) int64 // Function to compute the divisor for mean graphs, or nil FormatTag func(int64, string) string // Function to format a sample tag value into a string ObjNames bool // Always preserve obj filename OrigFnNames bool // Preserve original (eg mangled) function names CallTree bool // Build a tree instead of a graph DropNegative bool // Drop nodes with overall negative values KeptNodes NodeSet // If non-nil, only use nodes in this set }
Options encodes the options for constructing a graph
type Tag ¶
type Tag struct { Name string Unit string // Describe the value, "" for non-numeric tags Value int64 Flat, FlatDiv int64 Cum, CumDiv int64 }
Tag represent sample annotations