if Platform.developer then
function MeasureMaxGameSpeedAchievable(speed_test_time, lo, hi)
if not IsRealTimeThread() then
CreateRealTimeThread(function() MeasureMaxGameSpeedAchievable(speed_test_time, lo, hi) end)
return
end
speed_test_time = speed_test_time or 10000
lo = lo or 1000
hi = hi or 10000
table.change(config, "MeasureMaxGameSpeedAchievable", {
StoryBitsSuspended = true
})
local old_ignoreerrors = IgnoreDebugErrors(true)
Msg("LuaPerformanceBegin")
hr.GameTimeBehindDetect = true
local time_factor = (lo < const.DefaultTimeFactor) and const.DefaultTimeFactor or lo
while hi - lo >= 1000 do
print(string.format("Testing time factor %d for %dms(+%dms tolerance)", time_factor, speed_test_time, config.GameTimeBehindTimeTolerance))
SetTimeFactor(time_factor)
local start_time = GetPreciseTicks()
while (not hr.GameTimeBehindFlag) and (GetPreciseTicks() - start_time < speed_test_time + config.GameTimeBehindTimeTolerance) do
Sleep(1000)
end
if hr.GameTimeBehindFlag then
hi = time_factor
print(string.format("Time Factor %d FAIL", time_factor))
else
lo = time_factor
print(string.format("Time Factor %d SUCCESS", time_factor))
end
time_factor = (lo + hi) / 2
end
print(string.format("Max Time Factor: %d", lo))
hr.GameTimeBehindDetect = false
Msg("LuaPerformanceEnd")
IgnoreDebugErrors(old_ignoreerrors)
table.restore(config, "MeasureMaxGameSpeedAchievable")
return lo
end
function MeasureLuaPerformance(time)
time = time or 10000
CreateRealTimeThread(function()
local start_time = GetPreciseTicks()
local lo, hi = 1000, 100000
local time_factor = MeasureMaxGameSpeedAchievable(time, lo, hi)
print(string.format("Time factor supported: %d", time_factor))
ReloadLua()
print(string.format("Measurements executed in %ds", (GetPreciseTicks() - start_time) / 1000))
end)
end
end