mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +01:00
Pass pending restyles instead of draining them from layout
This commit is contained in:
parent
400c7012b1
commit
60ca98b753
7 changed files with 26 additions and 42 deletions
|
@ -71,7 +71,7 @@ use crate::dom::location::Location;
|
|||
use crate::dom::messageevent::MessageEvent;
|
||||
use crate::dom::mouseevent::MouseEvent;
|
||||
use crate::dom::node::{self, document_from_node, window_from_node, CloneChildrenFlag};
|
||||
use crate::dom::node::{LayoutNodeHelpers, Node, NodeDamage, NodeFlags, ShadowIncluding};
|
||||
use crate::dom::node::{Node, NodeDamage, NodeFlags, ShadowIncluding};
|
||||
use crate::dom::nodeiterator::NodeIterator;
|
||||
use crate::dom::nodelist::NodeList;
|
||||
use crate::dom::pagetransitionevent::PageTransitionEvent;
|
||||
|
@ -134,6 +134,7 @@ use profile_traits::ipc as profile_ipc;
|
|||
use profile_traits::time::{TimerMetadata, TimerMetadataFrameType, TimerMetadataReflowType};
|
||||
use ref_slice::ref_slice;
|
||||
use script_layout_interface::message::{Msg, PendingRestyle, ReflowGoal};
|
||||
use script_layout_interface::TrustedNodeAddress;
|
||||
use script_traits::{AnimationState, DocumentActivity, MouseButton, MouseEventType};
|
||||
use script_traits::{
|
||||
MsDuration, ScriptMsg, TouchEventType, TouchId, UntrustedNodeAddress, WheelDelta,
|
||||
|
@ -2606,7 +2607,6 @@ pub enum DocumentSource {
|
|||
#[allow(unsafe_code)]
|
||||
pub trait LayoutDocumentHelpers {
|
||||
unsafe fn is_html_document_for_layout(&self) -> bool;
|
||||
unsafe fn drain_pending_restyles(&self) -> Vec<(LayoutDom<Element>, PendingRestyle)>;
|
||||
unsafe fn needs_paint_from_layout(&self);
|
||||
unsafe fn will_paint(&self);
|
||||
unsafe fn quirks_mode(&self) -> QuirksMode;
|
||||
|
@ -2623,22 +2623,6 @@ impl LayoutDocumentHelpers for LayoutDom<Document> {
|
|||
(*self.unsafe_get()).is_html_document
|
||||
}
|
||||
|
||||
#[inline]
|
||||
#[allow(unrooted_must_root)]
|
||||
unsafe fn drain_pending_restyles(&self) -> Vec<(LayoutDom<Element>, PendingRestyle)> {
|
||||
let mut elements = (*self.unsafe_get())
|
||||
.pending_restyles
|
||||
.borrow_mut_for_layout();
|
||||
// Elements were in a document when they were added to this list, but that
|
||||
// may no longer be true when the next layout occurs.
|
||||
let result = elements
|
||||
.drain()
|
||||
.map(|(k, v)| (k.to_layout(), v))
|
||||
.filter(|&(ref k, _)| k.upcast::<Node>().get_flag(NodeFlags::IS_CONNECTED))
|
||||
.collect();
|
||||
result
|
||||
}
|
||||
|
||||
#[inline]
|
||||
unsafe fn needs_paint_from_layout(&self) {
|
||||
(*self.unsafe_get()).needs_paint.set(true)
|
||||
|
@ -3579,6 +3563,16 @@ impl Document {
|
|||
(None, None) => ElementLookupResult::None,
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(unrooted_must_root)]
|
||||
pub fn drain_pending_restyles(&self) -> Vec<(TrustedNodeAddress, PendingRestyle)> {
|
||||
self.pending_restyles
|
||||
.borrow_mut()
|
||||
.drain()
|
||||
.filter(|(k, _)| k.upcast::<Node>().get_flag(NodeFlags::IS_CONNECTED))
|
||||
.map(|(k, v)| (k.upcast::<Node>().to_trusted_node_address(), v))
|
||||
.collect()
|
||||
}
|
||||
}
|
||||
|
||||
impl Element {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue