1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-06-01 03:08:13 +00:00

WebContent: Coalesce paint invalidations to avoid spamming client

Some content cause a lot of paint invalidations (e.g someone drawing to
a <canvas> repeatedly) and we don't need to spam the client about this.
Instead, accumulate a dirty rect, and send it once per event loop step.
This commit is contained in:
Andreas Kling 2021-09-28 22:53:59 +02:00
parent 82af69376b
commit 651f30dfbe
2 changed files with 11 additions and 2 deletions

View file

@ -21,6 +21,10 @@ PageHost::PageHost(ClientConnection& client)
, m_page(make<Web::Page>(*this))
{
setup_palette();
m_invalidation_coalescing_timer = Core::Timer::create_single_shot(0, [this] {
m_client.async_did_invalidate_content_rect(m_invalidation_rect);
m_invalidation_rect = {};
});
}
PageHost::~PageHost()
@ -77,9 +81,11 @@ void PageHost::set_viewport_rect(const Gfx::IntRect& rect)
page().top_level_browsing_context().set_viewport_rect(rect);
}
void PageHost::page_did_invalidate(const Gfx::IntRect& content_rect)
void PageHost::page_did_invalidate(Gfx::IntRect const& content_rect)
{
m_client.async_did_invalidate_content_rect(content_rect);
m_invalidation_rect = m_invalidation_rect.united(content_rect);
if (!m_invalidation_coalescing_timer->is_active())
m_invalidation_coalescing_timer->start();
}
void PageHost::page_did_change_selection()