# scripts/lib/render-hotspots.awk # Render a per-line hotspot HTML report from sorted TSV rows. # Input TSV (sorted slowest-first): "\t\t\t". # Variables: # -v TITLE="..." # -v SRC= source file for the primary target, used to show line text. function esc(s) { gsub(/&/, "\\&", s); gsub(//, "\\>", s) return s } BEGIN { FS = "\t"; n = 0 # Load source lines for text display (best effort). if (SRC != "") { i = 0 while ((getline ln < SRC) > 0) { i++; srctext[i] = ln } close(SRC) srcbase = SRC; sub(/.*\//, "", srcbase); sub(/.*\\/, "", srcbase) } } { n++ ms[n] = $1 + 0 hits[n] = $2 + 0 file[n] = $3 line[n] = $4 + 0 if (n == 1) maxv = $1 + 0 } END { print "" print "" esc(TITLE) "" print "" print "

" esc(TITLE) "

" print "
cumulative self-time per source line, slowest first
" print "" for (i = 1; i <= n; i++) { w = (maxv > 0 ? (ms[i] * 100.0 / maxv) : 0) txt = "" if (file[i] == srcbase && (line[i] in srctext)) txt = srctext[line[i]] printf "", i, ms[i], hits[i] printf "", esc(file[i]), line[i], esc(txt) printf "\n", w } print "
#mshitsfile:linesource
%d%.1f%d%s:%d%s
" }