| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | package driver |
| |
|
| | import ( |
| | "embed" |
| | "fmt" |
| | "html/template" |
| | "os" |
| | "sync" |
| |
|
| | "github.com/google/pprof/internal/report" |
| | ) |
| |
|
| | var ( |
| | htmlTemplates *template.Template |
| | htmlTemplateInit sync.Once |
| | ) |
| |
|
| | |
| | |
| | func getHTMLTemplates() *template.Template { |
| | htmlTemplateInit.Do(func() { |
| | htmlTemplates = template.New("templategroup") |
| | addTemplates(htmlTemplates) |
| | report.AddSourceTemplates(htmlTemplates) |
| | }) |
| | return htmlTemplates |
| | } |
| |
|
| | |
| | var embeddedFiles embed.FS |
| |
|
| | |
| | func addTemplates(templates *template.Template) { |
| | |
| | loadFile := func(fname string) string { |
| | data, err := embeddedFiles.ReadFile(fname) |
| | if err != nil { |
| | fmt.Fprintf(os.Stderr, "internal/driver: embedded file %q not found\n", |
| | fname) |
| | os.Exit(1) |
| | } |
| | return string(data) |
| | } |
| | loadCSS := func(fname string) string { |
| | return `<style type="text/css">` + "\n" + loadFile(fname) + `</style>` + "\n" |
| | } |
| | loadJS := func(fname string) string { |
| | return `<script>` + "\n" + loadFile(fname) + `</script>` + "\n" |
| | } |
| |
|
| | |
| | def := func(name, contents string) { |
| | sub := template.New(name) |
| | template.Must(sub.Parse(contents)) |
| | template.Must(templates.AddParseTree(name, sub.Tree)) |
| | } |
| |
|
| | |
| | def("css", loadCSS("html/common.css")) |
| | def("header", loadFile("html/header.html")) |
| | def("graph", loadFile("html/graph.html")) |
| | def("graph_css", loadCSS("html/graph.css")) |
| | def("script", loadJS("html/common.js")) |
| | def("top", loadFile("html/top.html")) |
| | def("sourcelisting", loadFile("html/source.html")) |
| | def("plaintext", loadFile("html/plaintext.html")) |
| | |
| | def("stacks", loadFile("html/stacks.html")) |
| | def("stacks_css", loadCSS("html/stacks.css")) |
| | def("stacks_js", loadJS("html/stacks.js")) |
| | } |
| |
|