| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | package driver |
| |
|
| | import ( |
| | "encoding/json" |
| | "html/template" |
| | "net/http" |
| |
|
| | "github.com/google/pprof/internal/measurement" |
| | ) |
| |
|
| | |
| | func (ui *webInterface) stackView(w http.ResponseWriter, req *http.Request) { |
| | |
| | rpt, errList := ui.makeReport(w, req, []string{"svg"}, func(cfg *config) { |
| | cfg.CallTree = true |
| | cfg.Trim = false |
| | if cfg.Granularity == "" { |
| | cfg.Granularity = "filefunctions" |
| | } |
| | }) |
| | if rpt == nil { |
| | return |
| | } |
| |
|
| | |
| | stacks := rpt.Stacks() |
| | b, err := json.Marshal(stacks) |
| | if err != nil { |
| | http.Error(w, "error serializing stacks for flame graph", |
| | http.StatusInternalServerError) |
| | ui.options.UI.PrintErr(err) |
| | return |
| | } |
| |
|
| | nodes := make([]string, len(stacks.Sources)) |
| | for i, src := range stacks.Sources { |
| | nodes[i] = src.FullName |
| | } |
| | nodes[0] = "" |
| |
|
| | ui.render(w, req, "stacks", rpt, errList, stacks.Legend(), webArgs{ |
| | Stacks: template.JS(b), |
| | Nodes: nodes, |
| | UnitDefs: measurement.UnitTypes, |
| | }) |
| | } |
| |
|