88 lines
1.9 KiB
Lua
88 lines
1.9 KiB
Lua
|
local this = {}
|
||
|
|
||
|
local updateLimit = 50
|
||
|
|
||
|
local benchmarkingThings = {}
|
||
|
|
||
|
local latestBenchmark = {}
|
||
|
local doneBench = {}
|
||
|
|
||
|
local function shrt(num)
|
||
|
return math.floor(num * 10000) / 10000
|
||
|
end
|
||
|
|
||
|
this.update = function()
|
||
|
doneBench = {}
|
||
|
end
|
||
|
|
||
|
this.startBenchmark = function(name)
|
||
|
latestBenchmark[name] = love.timer.getTime()
|
||
|
end
|
||
|
|
||
|
this.stopBenchmark = function(name)
|
||
|
if not benchmarkingThings[name] then benchmarkingThings[name] = {} end
|
||
|
|
||
|
if doneBench[name] then
|
||
|
local tbl = benchmarkingThings[name]
|
||
|
tbl[#tbl] = tbl[#tbl] + love.timer.getTime() - latestBenchmark[name]
|
||
|
else
|
||
|
table.insert(benchmarkingThings[name], love.timer.getTime() - latestBenchmark[name])
|
||
|
end
|
||
|
|
||
|
doneBench[name] = true
|
||
|
if #benchmarkingThings[name] > updateLimit then table.remove(benchmarkingThings[name], 1) end
|
||
|
end
|
||
|
|
||
|
this.getAverage = function(name)
|
||
|
local things
|
||
|
if name then
|
||
|
things = benchmarkingThings[name]
|
||
|
else
|
||
|
things = {}
|
||
|
for key in pairs(this.benchmarks) do
|
||
|
for _,n in ipairs(benchmarkingThings[key]) do
|
||
|
table.insert(things, n)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local total = 0
|
||
|
for _,n in ipairs(things) do
|
||
|
total = total + n
|
||
|
end
|
||
|
|
||
|
return total / #things
|
||
|
end
|
||
|
|
||
|
this.renderBenchmark = function()
|
||
|
local font = love.graphics.getFont()
|
||
|
local result = ''
|
||
|
local rowNum = 0
|
||
|
|
||
|
local averages = {}
|
||
|
local max = 0
|
||
|
|
||
|
for n,_ in pairs(this.benchmarks) do
|
||
|
local average = this.getAverage(n)
|
||
|
max = math.max(average, max)
|
||
|
averages[n] = average
|
||
|
end
|
||
|
for n,_ in pairs(this.benchmarks) do
|
||
|
local average = averages[n]
|
||
|
result = result .. '\n' .. shrt(average) .. 'ms' .. ' ' .. n
|
||
|
rowNum = rowNum + 1
|
||
|
|
||
|
local yoff = rowNum * font:getHeight()
|
||
|
|
||
|
love.graphics.setColor(1, 1, 1, 0.7)
|
||
|
|
||
|
love.graphics.rectangle('fill', 0, yoff, average * 1/max * love.graphics.getWidth(), font:getHeight())
|
||
|
end
|
||
|
|
||
|
love.graphics.setColor(0, 0, 0)
|
||
|
love.graphics.print(result)
|
||
|
end
|
||
|
|
||
|
this.benchmarks = benchmarkingThings
|
||
|
|
||
|
return this
|