Skip to content

Optimize setting group rendering

uramer requested to merge uramer/openmw:update_setting_pages into master

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

Merge request reports