script: Remove note_rendering_opportunity and rendering_opportunity (#34575)

A rendering opportunity is now unconditionally triggered by handling IPC
messages in the `ScriptThread`, unless animations are running in which
case it's driven by the compositor. We can now remove calls to
`note_rendering_opportunity` and `rendering_opportunity`.

There is one tricky case, which is when a promise completion during a
microtask checkpoint dirties the page again. In this case we need to
trigger a new rendering opportunity, unless animations are running.  In
a followup change, when not driven by the compositor, rendering
opportunities will be driven by a timed task, meaning we can remove this
workaround.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
This commit is contained in:
Martin Robinson 2024-12-12 09:43:58 +01:00 committed by GitHub
parent 7fcde1f7a3
commit 2bcee38e52
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 63 additions and 66 deletions

View file

@ -43,3 +43,19 @@ impl TaskSource for RenderingTaskSource {
self.0.send(msg_task).map_err(|_| ())
}
}
impl RenderingTaskSource {
/// This queues a task that will not be cancelled when its associated
/// global scope gets destroyed.
pub fn queue_unconditionally<T>(&self, task: T) -> Result<(), ()>
where
T: TaskOnce + 'static,
{
self.0.send(CommonScriptMsg::Task(
ScriptThreadEventCategory::NetworkEvent,
Box::new(task),
Some(self.1),
RenderingTaskSource::NAME,
))
}
}