diff options
Diffstat (limited to 'tex/context/base/trac-tim.lua')
-rw-r--r-- | tex/context/base/trac-tim.lua | 276 |
1 files changed, 138 insertions, 138 deletions
diff --git a/tex/context/base/trac-tim.lua b/tex/context/base/trac-tim.lua index 15ac9bf1b..e62e7e149 100644 --- a/tex/context/base/trac-tim.lua +++ b/tex/context/base/trac-tim.lua @@ -1,138 +1,138 @@ -if not modules then modules = { } end modules ['trac-tim'] = { - version = 1.001, - comment = "companion to m-timing.tex", - author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", - copyright = "PRAGMA ADE / ConTeXt Development Team", - license = "see context related readme files" -} - -local format, gsub = string.format, string.gsub -local concat, sort = table.concat, table.sort -local next, tonumber = next, tonumber - -moduledata = moduledata or { } -local progress = moduledata.progress or { } -moduledata.progress = progress - -local report_timing = logs.reporter("timing") - -if not nodes then nodes = { } end -- when loaded in mtxrun - -progress.parameters = nodes and nodes.snapshots.getparameters -progress.defaultfilename = ((tex and tex.jobname) or "whatever") .. "-luatex-progress" - --- storage - -function progress.store() - nodes.snapshots.takesample() -end - -function progress.save(name) - local filename = (name or progress.defaultfilename) .. ".lut" - report_timing("saving data in %a",filename) - table.save(filename,nodes.snapshots.getsamples()) - nodes.snapshots.resetsamples() -end - --- conversion - -local processed = { } -local parameters = progress.parameters() - -local function convert(name) - name = name ~= "" and name or progress.defaultfilename - if not processed[name] then - local names, top, bot, pages, paths, keys = { }, { }, { }, 0, { }, { } - local data = table.load(name .. ".lut") - if data then - pages = #data - if pages > 1 then - local factor = 100 - for k=1,#data do - for k, v in next, data[k].node_memory do - keys[k] = true - end - end - for k=1,#data do - local m = data[k].node_memory - for k, v in next, keys do - if not m[k] then m[k] = 0 end - end - end - local function path(tag,subtag) - local b, t, s = nil, nil, { } - for k=1,#data do - local v = data[k][tag] - v = v and (subtag and v[subtag]) or v - if v then - v = tonumber(v) - if b then - if v > t then t = v end - if v < b then b = v end - else - t = v - b = v - end - s[k] = v - else - s[k] = 0 - end - end - local tagname = subtag or tag - top[tagname] = gsub(format("%.3f",t),"%.000$","") - bot[tagname] = gsub(format("%.3f",b),"%.000$","") - local delta = t-b - if delta == 0 then - delta = 1 - else - delta = factor/delta - end - for k=1,#s do - s[k] = format("(%s,%s)",k,(s[k]-b)*delta) - end - paths[tagname] = concat(s,"--") - end - for i=1,#parameters do - path(parameters[i]) - end - for tag, _ in next, keys do - path("node_memory",tag) - names[#names+1] = tag - end - pages = pages - 1 - end - end - sort(names) - processed[name] = { - names = names, - top = top, - bot = bot, - pages = pages, - paths = paths, - } - end - return processed[name] -end - -progress.convert = convert - -function progress.bot(name,tag) - return convert(name).bot[tag] or 0 -end - -function progress.top(name,tag) - return convert(name).top[tag] or 0 -end - -function progress.pages(name,tag) - return convert(name).pages or 0 -end - -function progress.path(name,tag) - return convert(name).paths[tag] or "origin" -end - -function progress.nodes(name) - return convert(name).names or { } -end - +if not modules then modules = { } end modules ['trac-tim'] = {
+ version = 1.001,
+ comment = "companion to m-timing.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local format, gsub = string.format, string.gsub
+local concat, sort = table.concat, table.sort
+local next, tonumber = next, tonumber
+
+moduledata = moduledata or { }
+local progress = moduledata.progress or { }
+moduledata.progress = progress
+
+local report_timing = logs.reporter("timing")
+
+if not nodes then nodes = { } end -- when loaded in mtxrun
+
+progress.parameters = nodes and nodes.snapshots.getparameters
+progress.defaultfilename = ((tex and tex.jobname) or "whatever") .. "-luatex-progress"
+
+-- storage
+
+function progress.store()
+ nodes.snapshots.takesample()
+end
+
+function progress.save(name)
+ local filename = (name or progress.defaultfilename) .. ".lut"
+ report_timing("saving data in %a",filename)
+ table.save(filename,nodes.snapshots.getsamples())
+ nodes.snapshots.resetsamples()
+end
+
+-- conversion
+
+local processed = { }
+local parameters = progress.parameters()
+
+local function convert(name)
+ name = name ~= "" and name or progress.defaultfilename
+ if not processed[name] then
+ local names, top, bot, pages, paths, keys = { }, { }, { }, 0, { }, { }
+ local data = table.load(name .. ".lut")
+ if data then
+ pages = #data
+ if pages > 1 then
+ local factor = 100
+ for k=1,#data do
+ for k, v in next, data[k].node_memory do
+ keys[k] = true
+ end
+ end
+ for k=1,#data do
+ local m = data[k].node_memory
+ for k, v in next, keys do
+ if not m[k] then m[k] = 0 end
+ end
+ end
+ local function path(tag,subtag)
+ local b, t, s = nil, nil, { }
+ for k=1,#data do
+ local v = data[k][tag]
+ v = v and (subtag and v[subtag]) or v
+ if v then
+ v = tonumber(v)
+ if b then
+ if v > t then t = v end
+ if v < b then b = v end
+ else
+ t = v
+ b = v
+ end
+ s[k] = v
+ else
+ s[k] = 0
+ end
+ end
+ local tagname = subtag or tag
+ top[tagname] = gsub(format("%.3f",t),"%.000$","")
+ bot[tagname] = gsub(format("%.3f",b),"%.000$","")
+ local delta = t-b
+ if delta == 0 then
+ delta = 1
+ else
+ delta = factor/delta
+ end
+ for k=1,#s do
+ s[k] = format("(%s,%s)",k,(s[k]-b)*delta)
+ end
+ paths[tagname] = concat(s,"--")
+ end
+ for i=1,#parameters do
+ path(parameters[i])
+ end
+ for tag, _ in next, keys do
+ path("node_memory",tag)
+ names[#names+1] = tag
+ end
+ pages = pages - 1
+ end
+ end
+ sort(names)
+ processed[name] = {
+ names = names,
+ top = top,
+ bot = bot,
+ pages = pages,
+ paths = paths,
+ }
+ end
+ return processed[name]
+end
+
+progress.convert = convert
+
+function progress.bot(name,tag)
+ return convert(name).bot[tag] or 0
+end
+
+function progress.top(name,tag)
+ return convert(name).top[tag] or 0
+end
+
+function progress.pages(name,tag)
+ return convert(name).pages or 0
+end
+
+function progress.path(name,tag)
+ return convert(name).paths[tag] or "origin"
+end
+
+function progress.nodes(name)
+ return convert(name).names or { }
+end
+
|