Optimize setting group rendering
Currently rendering setting pages with multiple groups is very slow. The MR also fixes a couple bugs related to Elements being layout children that I've found while working on it.
In current master, on my machine this amount of groups takes about 7 seconds to render. With this MR, it takes 140ms.
local I = require('openmw.interfaces')
local core = require('openmw.core')
I.Settings.registerPage {
key = 'PerformanceTest',
l10n = 'PerformanceTest',
name = 'Performance Test',
description = '',
}
for i=1, 100 do
I.Settings.registerGroup {
key = 'SettingsGroup_'..tostring(i),
name = 'Name '..tostring(i),
description = 'Description '..tostring(i),
page = 'PerformanceTest',
order = i,
l10n = 'PerformanceTest',
permanentStorage = true,
settings = {},
}
end
local oldTimestamp = nil
local frameNumber = 0
return {
engineHandlers = {
onFrame = function()
frameNumber = frameNumber + 1
if frameNumber == 1 then
oldTimestamp = core.getRealTime()
elseif frameNumber == 2 then
local timestamp = core.getRealTime()
print(string.format('First frame took: %.4f', timestamp - oldTimestamp))
end
end,
},
}
Edited by uramer