-- +---------------+
-- | Benchmark Mod |
-- | by Zamiel |
-- +---------------+
-- This is a mod that will benchmark two different functions to calculate
-- how much more efficient one function is over the other.
local mod = RegisterMod("test-benchmark", 1);
-- Benchmark configuration
mod.numTrials = 100000 -- This is how many times each of the two functions will be executed
-- Global variables
mod.sfx = SFXManager()
local averages = {}
-- ModCallbacks.MC_POST_GAME_STARTED (15)
function mod:PostGameStarted()
Isaac.DebugString("MC_POST_GAME_STARTED")
-- Get the two average times
for i = 1, 2 do
local totalTime = 0
for j = 1, mod.numTrials do
local startTime = Isaac.GetTime()
if i == 1 then
mod:Function1()
elseif i == 2 then
mod:Function2()
end
local endTime = Isaac.GetTime()
local elapsedTime = endTime - startTime
totalTime = totalTime + elapsedTime
end
local averageTime = totalTime / mod.numTrials
Isaac.DebugString("The average time of function " .. tostring(i) .. " is: " .. tostring(averageTime))
averages[i] = averageTime -- Store it for later
end
-- Compare the two average times
local functionDifference = averages[1] - averages[2]
Isaac.DebugString("The difference is: " .. tostring(functionDifference))
local percent = functionDifference / averages[1] * 100
percent = round(percent, 2)
Isaac.DebugString("This is a difference of " .. tostring(percent) .. "%.")
end
-- The slower function
function mod:Function1()
local sfx = SFXManager()
sfx:Play(SoundEffect.SOUND_THUMBS_DOWN, 1, 0, false, 1) -- 267
end
-- The faster function
function mod:Function2()
mod.sfx:Play(SoundEffect.SOUND_THUMBS_DOWN, 1, 0, false, 1) -- 267
end
-- Callback definitions
mod:AddCallback(ModCallbacks.MC_POST_GAME_STARTED, mod.PostGameStarted)
-- Welcome message
Isaac.DebugString("+-------------------------------+")
Isaac.DebugString("| Bencharmking mod initialized. |")
Isaac.DebugString("+-------------------------------+")
-- Miscellaneous helper functions
-- From: http://lua-users.org/wiki/SimpleRound
function round(num, numDecimalPlaces)
local mult = 10^(numDecimalPlaces or 0)
return math.floor(num * mult + 0.5) / mult
end
Comments