mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +01:00
Only consider fully active documents when running the 'update the rendering' steps (#35245)
This is specified in https://html.spec.whatwg.org/multipage/#update-the-rendering step 3.2 but we where not filtering out inactive documents. Signed-off-by: webbeef <me@webbeef.org>
This commit is contained in:
parent
8999b539df
commit
c4f4d5cc04
2 changed files with 18 additions and 9 deletions
|
@ -2264,6 +2264,10 @@ impl Document {
|
|||
&mut *self.animation_frame_list.borrow_mut(),
|
||||
);
|
||||
|
||||
self.pending_animation_ticks
|
||||
.borrow_mut()
|
||||
.remove(AnimationTickType::REQUEST_ANIMATION_FRAME);
|
||||
|
||||
self.running_animation_callbacks.set(true);
|
||||
let was_faking_animation_frames = self.is_faking_animation_frames();
|
||||
let timing = self.global().performance().Now();
|
||||
|
|
|
@ -1205,13 +1205,11 @@ impl ScriptThread {
|
|||
.documents
|
||||
.borrow()
|
||||
.iter()
|
||||
.any(|(_, doc)| doc.has_received_raf_tick());
|
||||
.any(|(_, doc)| doc.is_fully_active() && doc.has_received_raf_tick());
|
||||
|
||||
let any_animations_running = self
|
||||
.documents
|
||||
.borrow()
|
||||
.iter()
|
||||
.any(|(_, document)| document.animations().running_animation_count() != 0);
|
||||
let any_animations_running = self.documents.borrow().iter().any(|(_, document)| {
|
||||
document.is_fully_active() && document.animations().running_animation_count() != 0
|
||||
});
|
||||
|
||||
// TODO: The specification says to filter out non-renderable documents,
|
||||
// as well as those for which a rendering update would be unnecessary,
|
||||
|
@ -1251,6 +1249,10 @@ impl ScriptThread {
|
|||
.find_document(*pipeline_id)
|
||||
.expect("Got pipeline for Document not managed by this ScriptThread.");
|
||||
|
||||
if !document.is_fully_active() {
|
||||
continue;
|
||||
}
|
||||
|
||||
// TODO(#31581): The steps in the "Revealing the document" section need to be implemente
|
||||
// `process_pending_compositor_events` handles the focusing steps as well as other events
|
||||
// from the compositor.
|
||||
|
@ -1350,14 +1352,17 @@ impl ScriptThread {
|
|||
// ticks). In this case, don't schedule an opportunity, just wait for the next
|
||||
// one.
|
||||
if self.documents.borrow().iter().any(|(_, document)| {
|
||||
document.animations().running_animation_count() != 0 ||
|
||||
document.has_active_request_animation_frame_callbacks()
|
||||
document.is_fully_active() &&
|
||||
(document.animations().running_animation_count() != 0 ||
|
||||
document.has_active_request_animation_frame_callbacks())
|
||||
}) {
|
||||
return;
|
||||
}
|
||||
|
||||
let Some((_, document)) = self.documents.borrow().iter().find(|(_, document)| {
|
||||
!document.window().layout_blocked() && document.needs_reflow().is_some()
|
||||
document.is_fully_active() &&
|
||||
!document.window().layout_blocked() &&
|
||||
document.needs_reflow().is_some()
|
||||
}) else {
|
||||
return;
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue