forked from rojo-rbx/rojo
58 lines
1.2 KiB
Lua
58 lines
1.2 KiB
Lua
local Settings = require(script.Parent.Settings)
|
|
|
|
local clock = os.clock
|
|
|
|
local Timer = {
|
|
_entries = {},
|
|
}
|
|
|
|
function Timer._start(label)
|
|
local start = clock()
|
|
if not label then
|
|
error("[Rojo-Timer] Timer.start: label is required", 2)
|
|
return
|
|
end
|
|
|
|
table.insert(Timer._entries, { label, start })
|
|
end
|
|
|
|
function Timer._stop()
|
|
local stop = clock()
|
|
|
|
local entry = table.remove(Timer._entries)
|
|
if not entry then
|
|
error("[Rojo-Timer] Timer.stop: no label to stop", 2)
|
|
return
|
|
end
|
|
|
|
local label = entry[1]
|
|
if #Timer._entries > 0 then
|
|
local priorLabels = {}
|
|
for _, priorEntry in ipairs(Timer._entries) do
|
|
table.insert(priorLabels, priorEntry[1])
|
|
end
|
|
label = table.concat(priorLabels, "/") .. "/" .. label
|
|
end
|
|
|
|
local start = entry[2]
|
|
local duration = stop - start
|
|
print(string.format("[Rojo-Timer] %s took %.3f ms", label, duration * 1000))
|
|
end
|
|
|
|
-- Replace functions with no-op if not in debug mode
|
|
local function no_op() end
|
|
local function setFunctions(enabled)
|
|
if enabled then
|
|
Timer.start = Timer._start
|
|
Timer.stop = Timer._stop
|
|
else
|
|
Timer.start = no_op
|
|
Timer.stop = no_op
|
|
end
|
|
end
|
|
|
|
Settings:onChanged("timingLogsEnabled", setFunctions)
|
|
setFunctions(Settings:get("timingLogsEnabled"))
|
|
|
|
return Timer
|