ns_cavegen/lua/timer.lua

98 lines
2.1 KiB
Lua

local internal = {
waypoints = {},
stats = {},
sessions = 0,
last = os.clock()
}
timer = {}
function timer.start()
internal.waypoints = {}
internal.now()
internal.sessions = internal.sessions + 1
end
function timer.checkpoint(name)
local now = os.clock()
table.insert(internal.waypoints, { name, internal.last, now })
internal.now()
end
function timer.stop()
local name_len = 0
for _, t in ipairs(internal.waypoints) do
local name = t[1]
local start = t[2]
local stop = t[3]
local stat = internal.stats[name]
if stat then
internal.stats[name] = stat + (stop - start)
else
internal.stats[name] = stop - start
end
name_len = math.max(name_len, name)
end
local h1 = "Task"
local h2 = "Time"
local h3 = "Time (avg)"
internal.log(
table.concat(
{ h1
, string.rep(" ", name_len - string.len(h1))
, " | "
, h2
, string.rep(" ", 8 - string.len(h2))
, " | "
, h3
}
, ""
)
)
internal.log(string.rep("-", name_len + 3 + 8 + 3 + 8))
for _, t in ipairs(internal.waypoints) do
local name = t[1]
local duration = tostring(math.round(1e3 * (t[3] - t[2])))
local avg_duration = tostring(math.round(1e3 * internal.stats[name] / internal.sessions))
internal.log(
table.concat(
{ name
, string.rep(" ", name_len - string.len(name))
, " | "
, string.rep(" ", 5 - string.len(duration))
, duration
, " ms | "
, string.rep(" ", 5 - string.len(avg_duration))
, avg_duration
, " ms"
}
, ""
)
)
end
end
-- Log text to the Minetest chat
function internal.log(text)
minetest.chat_send_all(os.time() .. " - " .. text)
end
function internal.now()
internal.last = os.clock()
end
internal.now()