diff options
Diffstat (limited to 'Master/texmf-dist/scripts/context/lua/mtx-profile.lua')
-rw-r--r-- | Master/texmf-dist/scripts/context/lua/mtx-profile.lua | 55 |
1 files changed, 33 insertions, 22 deletions
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-profile.lua b/Master/texmf-dist/scripts/context/lua/mtx-profile.lua index 74e1d153845..3550474f38c 100644 --- a/Master/texmf-dist/scripts/context/lua/mtx-profile.lua +++ b/Master/texmf-dist/scripts/context/lua/mtx-profile.lua @@ -12,8 +12,22 @@ if not modules then modules = { } end modules ['mtx-profile'] = { local match, format, find = string.match, string.format, string.find local helpinfo = [[ ---analyze analyze lua calls ---trace analyze tex calls +<?xml version="1.0"?> +<application> + <metadata> + <entry name="name">mtx-profile</entry> + <entry name="detail">ConTeXt MkIV LuaTeX Profiler</entry> + <entry name="version">1.00</entry> + </metadata> + <flags> + <category name="basic"> + <subcategory> + <flag name="analyze"><short>analyze lua calls</short></flag> + <flag name="trace"><short>analyze tex calls</short></flag> + </subcategory> + </category> + </flags> +</application> ]] local application = logs.application { @@ -41,33 +55,28 @@ function scripts.profiler.analyze(filename) if f then local times, counts, calls = { }, { }, { } local totalruntime, totalcount, totalcalls = 0, 0, 0 - while true do - local line = f:read() - if line then - local stacklevel, filename, functionname, linenumber, currentline, localtime, totaltime = line:match("^(%d+)\t(.-)\t(.-)\t(.-)\t(.-)\t(.-)\t(.-)") - if not filename then - -- next - elseif filename == "=[C]" then - if not functionname:find("^%(") then - calls[functionname] = (calls[functionname] or 0) + 1 - end - else - local filename = filename:match("^@(.*)$") - if filename then - local fi = times[filename] - if not fi then fi = { } times[filename] = fi end - fi[functionname] = (fi[functionname] or 0) + tonumber(localtime) - counts[functionname] = (counts[functionname] or 0) + 1 - end + for line in f:lines() do + local stacklevel, filename, functionname, linenumber, currentline, localtime, totaltime = line:match("^(%d+)\t(.-)\t(.-)\t(.-)\t(.-)\t(.-)\t(.-)") + if not filename then + -- next + elseif filename == "=[C]" then + if not functionname:find("^%(") then + calls[functionname] = (calls[functionname] or 0) + 1 end else - break + local filename = filename:match("^@(.*)$") + if filename then + local fi = times[filename] + if not fi then fi = { } times[filename] = fi end + fi[functionname] = (fi[functionname] or 0) + tonumber(localtime) + counts[functionname] = (counts[functionname] or 0) + 1 + end end end f:close() print("") local loaded = { } - sortedtable.sortedkeys(times) + local sorted = table.sortedkeys(times) for i=1,#sorted do local filename = sorted[i] local functions = times[filename] @@ -171,6 +180,8 @@ if environment.argument("analyze") then scripts.profiler.analyze(environment.files[1] or "luatex-profile.log") elseif environment.argument("trace") then scripts.profiler.analyze(environment.files[1] or "temp.log") +elseif environment.argument("exporthelp") then + application.export(environment.argument("exporthelp"),environment.files[1]) else application.help() end |