Speeding up

Last week I got back to working on Doomsday after taking an extended break (that featured large quantities of Uncharted). I took significant steps forward in supporting the Snowberry resource pack formats, made further UI improvements, and applied various performance optimizations.

The changes described below are available in today’s build 1983.

Doomsday now recognizes the Snowberry add-on formats. At the moment, this means that Doomsday can parse some of the metadata they contain and that they will be listed as packages in the Packages list in Home. There is still a bunch of additional processing that is needed to emulate how these files were treated in Snowberry, with regard to handling package collections and automatic loading.

The Home UI widgets were completely unsuitable for displaying a list of thousands of items, so I needed to implement a better way to handle the situation. The packages list now only creates widgets for the currently visible items so the complete set of items can be arbitrarily large. While the basic mechanism is working well enough so that it won’t hinder development of package management any more, there is still room for improvement (e.g., scrolling very quickly or jumping to a far-away position in the list may cause performance to slow down momentarily).

For the first time in a while, I took a closer look at engine startup performance in a profiler. I managed to identify and fix a number of moderate issues. The most significant ones were related to name-based data lookups and checking the current system time. In the former case, text comparisons were being made using an unnecessarily slow method, the effects of which were greatly multiplied by the large number of lookups being done particularly when creating new widgets (for instance when scrolling in a list). In the latter case, there were several instances where the code was checking the full system time and date (which is relatively slow) instead of just quickly checking the time elapsed since the engine was started. The full time and date are sometimes useful, but most of the time one can make do by just calculating differences in seconds.

The Home UI remains a work in progress but we’re definitely getting closer to the finish line. Once the Snowberry add-ons are handled adequately, I can start shifting my attention to polishing things for a stable release.