Nice work! Some random low priority comments: In "Just walk the task list once per timeout" https://cgit.freedesktop.org/libreoffice/core/commit/?h=feature/new-vcl-scheduler&id=435e21fe0330436e76e5e053d5d5d94df734a554 The evaluate_entry label doesn't make the code any easier to read. In "Reorganize Scheduler priority classes" https://cgit.freedesktop.org/libreoffice/core/commit/?h=feature/new-vcl-scheduler&id=5e4361e84607fc6d7623b31630505da7c934b945 (1) you haven't used a consistent mapping from old to new - sometimes LOW maps to HIGH_IDLE, sometimes HIGHEST maps to HIGH_IDLE. Perhaps there is a reason for this? (2) I would call HIGH_IDLE, either PRE_RESIZE or BEFORE_RESIZE, because it's not any kind of IDLE anymore. I would call DEFAULT_IDLE just IDLE. In "Handle all main loop and task events" https://cgit.freedesktop.org/libreoffice/core/commit/?h=feature/new-vcl-scheduler&id=102c41c2e429bee489334361536779aa298bc181 - bProcessedEvent = bProcessedEvent || bScheduledEevent; + bProcessedEvent |= bScheduledEevent; In "Run Idle tasks immediatly" https://cgit.freedesktop.org/libreoffice/core/commit/?h=feature/new-vcl-scheduler&id=a1ecb280872c5487615558f8d140a380ef3e0d36 It occurs to me that when we get an overload condition, it would be very helpful to dump the names of the current events.