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:
parent
82af69376b
commit
651f30dfbe
2 changed files with 11 additions and 2 deletions
|
@ -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()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue