summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/core-uti.lua
diff options
context:
space:
mode:
authorMojca Miklavec <mojca.miklavec@gmail.com>2012-05-14 17:38:55 +0000
committerMojca Miklavec <mojca.miklavec@gmail.com>2012-05-14 17:38:55 +0000
commit15995e10bfc68edf79970c4ea4fbb6678566c46e (patch)
tree2de7ca2a83f2d37ef043ad7429a5cb945bb79ddb /Master/texmf-dist/tex/context/base/core-uti.lua
parentc9a39f716f1e5ec820ed3aab2c9aef25c5a9d730 (diff)
ConTeXt 2012.05.14 16:00
git-svn-id: svn://tug.org/texlive/trunk@26371 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context/base/core-uti.lua')
-rw-r--r--Master/texmf-dist/tex/context/base/core-uti.lua121
1 files changed, 89 insertions, 32 deletions
diff --git a/Master/texmf-dist/tex/context/base/core-uti.lua b/Master/texmf-dist/tex/context/base/core-uti.lua
index 02411f13d99..1657a75e26d 100644
--- a/Master/texmf-dist/tex/context/base/core-uti.lua
+++ b/Master/texmf-dist/tex/context/base/core-uti.lua
@@ -19,9 +19,11 @@ saves much runtime but at the cost of more memory usage.</p>
local format, match = string.format, string.match
local next, type, tostring = next, type, tostring
+local concat = table.concat
local definetable = utilities.tables.definetable
local accesstable = utilities.tables.accesstable
+local migratetable = utilities.tables.migratetable
local serialize = table.serialize
local packers = utilities.packers
local allocate = utilities.storage.allocate
@@ -32,7 +34,7 @@ local report_jobcontrol = logs.reporter("jobcontrol")
job = job or { }
local job = job
-job.version = 1.14
+job.version = 1.19
-- some day we will implement loading of other jobs and then we need
-- job.jobs
@@ -51,10 +53,18 @@ end
job.comment(format("version: %1.2f",job.version))
+local enabled = true
+
+directives.register("job.save",function(v) enabled = v end)
+
+function job.disablesave() -- can be command
+ enabled = false
+end
+
function job.initialize(loadname,savename)
job.load(loadname) -- has to come after structure is defined !
luatex.registerstopactions(function()
- if not status.lasterrorstring or status.lasterrorstring == "" then
+ if enabled and not status.lasterrorstring or status.lasterrorstring == "" then
job.save(savename)
end
end)
@@ -66,7 +76,7 @@ end
-- as an example we implement variables
-local tobesaved, collected, checksums = allocate(), allocate(), allocate()
+local tobesaved, collected, checksums = allocate(), allocate(), allocate()
local jobvariables = {
collected = collected,
@@ -125,9 +135,11 @@ local jobpacker = packers.new(packlist,1.01)
job.pack = true
-local _save_, _load_ = { }, { } -- registers timing
+directives.register("job.pack",function(v) pack = v end)
+
+local _save_, _load_, _others_ = { }, { }, { } -- registers timing
-function job.save(filename)
+function job.save(filename) -- we could return a table but it can get pretty large
statistics.starttiming(_save_)
local f = io.open(filename,'w')
if f then
@@ -135,9 +147,13 @@ function job.save(filename)
f:write("-- ",comment[c],"\n")
end
f:write("\n")
+ f:write("local utilitydata = { }\n")
+ f:write("\n")
for l=1,#savelist do
- local list = savelist[l]
- local target, data, finalizer = list[1], list[2], list[4]
+ local list = savelist[l]
+ local target = format("utilitydata.%s",list[1])
+ local data = list[2]
+ local finalizer = list[4]
if type(finalizer) == "function" then
finalizer()
end
@@ -149,15 +165,17 @@ function job.save(filename)
end
if job.pack then
packers.strip(jobpacker)
- f:write(serialize(jobpacker,"job.packed",true,true),"\n")
+ f:write(serialize(jobpacker,"utilitydata.job.packed",true,true),"\n")
end
+ f:write("\n")
+ f:write("return utilitydata\n")
+ f:write("\n")
f:close()
end
statistics.stoptiming(_save_)
end
-function job.load(filename)
- statistics.starttiming(_load_)
+local function load(filename)
local data = io.loaddata(filename)
if data and data ~= "" then
local version = tonumber(match(data,"^-- version: ([%d%.]+)"))
@@ -165,24 +183,51 @@ function job.load(filename)
report_jobcontrol("version mismatch with jobfile: %s <> %s", version or "?", job.version)
else
local data = loadstring(data)
- if data then
- data()
- end
- for l=1,#savelist do
- local list = savelist[l]
- local target, initializer = list[1], list[3]
- local result = mark(accesstable(target))
- packers.unpack(result,job.packed,true)
- if type(initializer) == "function" then
- initializer(result)
- end
+ return data and data()
+ end
+ end
+end
+
+function job.load(filename)
+ statistics.starttiming(_load_)
+ local utilitydata = load(filename)
+ if utilitydata then
+ local jobpacker = utilitydata.job.packed
+ for l=1,#savelist do
+ local list = savelist[l]
+ local target = list[1]
+ local initializer = list[3]
+ local result = accesstable(target,utilitydata)
+ packers.unpack(result,jobpacker,true)
+ migratetable(target,mark(result))
+ if type(initializer) == "function" then
+ initializer(result)
end
- job.packed = nil
end
end
statistics.stoptiming(_load_)
end
+function job.loadother(filename)
+ statistics.starttiming(_load_)
+ _others_[#_others_+1] = file.nameonly(filename)
+ local utilitydata = load(filename)
+ if utilitydata then
+ local jobpacker = utilitydata.job.packed
+ local unpacked = { }
+ for l=1,#savelist do
+ local list = savelist[l]
+ local target = list[1]
+ local result = accesstable(target,utilitydata)
+ packers.unpack(result,jobpacker,true)
+ migratetable(target,result,unpacked)
+ end
+ unpacked.job.packed = nil -- nicer in inspecting
+ return unpacked
+ end
+ statistics.stoptiming(_load_)
+end
+
-- eventually this will end up in strc-ini
statistics.register("startup time", function()
@@ -190,8 +235,18 @@ statistics.register("startup time", function()
end)
statistics.register("jobdata time",function()
- if statistics.elapsedindeed(_save_) or statistics.elapsedindeed(_load_) then
- return format("%s seconds saving, %s seconds loading", statistics.elapsedtime(_save_), statistics.elapsedtime(_load_))
+ if enabled then
+ if #_others_ > 0 then
+ return format("%s seconds saving, %s seconds loading, other files: %s",statistics.elapsedtime(_save_),statistics.elapsedtime(_load_),concat(_others_," "))
+ else
+ return format("%s seconds saving, %s seconds loading",statistics.elapsedtime(_save_),statistics.elapsedtime(_load_))
+ end
+ else
+ if #_others_ > 0 then
+ return format("nothing saved, %s seconds loading, other files: %s",statistics.elapsedtime(_load_),concat(_others_," "))
+ else
+ return format("nothing saved, %s seconds loading",statistics.elapsedtime(_load_))
+ end
end
end)
@@ -212,13 +267,15 @@ statistics.register("randomizer", function()
end)
function statistics.formatruntime(runtime)
- local shipped = tex.count['nofshipouts']
- local pages = tex.count['realpageno'] - 1
- if shipped > 0 or pages > 0 then
- local persecond = shipped / runtime
- if pages == 0 then pages = shipped end
- return format("%s seconds, %i processed pages, %i shipped pages, %.3f pages/second",runtime,pages,shipped,persecond)
- else
- return format("%s seconds",runtime)
+ if not environment.initex then -- else error when testing as not counters yet
+ local shipped = tex.count['nofshipouts']
+ local pages = tex.count['realpageno'] - 1
+ if shipped > 0 or pages > 0 then
+ local persecond = shipped / runtime
+ if pages == 0 then pages = shipped end
+ return format("%s seconds, %i processed pages, %i shipped pages, %.3f pages/second",runtime,pages,shipped,persecond)
+ else
+ return format("%s seconds",runtime)
+ end
end
end