Wayland: minimize surface commits and limit them to the main thread

Before of this patch, as explained in the usual
commented-wall-of-text-longer-than-the-actual-patch-itself™, due to the
multithreaded nature of the Wayland thread, it was possible to commit a
surface while the renderer was doing stuff, which was _very_ wrong.

Initially the consequences of such a sin weren't obvious but, now that
explicit synchronization is becoming more and more common, we can't
commit a buffer randomly without basically guaranteeing a nasty, nasty
crash (and we should have avoided commits altogether in the first place
to ensure atomic surface updates).

We now only trigger a commit _in the main thread_ when low processor usage
mode is on _and_ if we know that we won't be rendering anything as, due to
its intermittent nature, it makes "legacy" (pre xdg_wm_base v6) frame
callback based suspension quite annoying.
This commit is contained in:
Riteo
2024-06-27 23:28:29 +02:00
parent cae2f853dc
commit f27471fbd8
4 changed files with 53 additions and 31 deletions

View File

@ -992,6 +992,8 @@ public:
void primary_set_text(const String &p_text);
void commit_surfaces();
void set_frame();
bool get_reset_frame();
bool wait_frame_suspend_ms(int p_timeout);