98 lines
2.1 KiB
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()
|