diff options
author | Martin Robinson <mrobinson@igalia.com> | 2023-05-02 08:35:33 +0200 |
---|---|---|
committer | Martin Robinson <mrobinson@igalia.com> | 2023-05-05 17:16:38 +0200 |
commit | 2d31d4301d66bce4678af848e80905a35b9c02aa (patch) | |
tree | d6386d2c0984ea74b733e3393a187aff6065ad1f /components/layout_thread_2020/lib.rs | |
parent | ab0d462c83b6a13d64f664e09276d6c8decb5a02 (diff) | |
download | servo-2d31d4301d66bce4678af848e80905a35b9c02aa.tar.gz servo-2d31d4301d66bce4678af848e80905a35b9c02aa.zip |
Eliminate duplicate Layout DOM wrappers
There are duplicate sets of Layout DOM wrappers: one for Layout 2013 and
one for Layout 2020. As part of cleaning up and simplifying the
wrappers, this change parameterizes them on the specific layout data
they contain. This allows them to be shared again. In addition, various
small cleanups are included.
Fixes #29691.
Diffstat (limited to 'components/layout_thread_2020/lib.rs')
-rw-r--r-- | components/layout_thread_2020/lib.rs | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/components/layout_thread_2020/lib.rs b/components/layout_thread_2020/lib.rs index df7f2e90827..ddfbc69222f 100644 --- a/components/layout_thread_2020/lib.rs +++ b/components/layout_thread_2020/lib.rs @@ -11,17 +11,12 @@ #[macro_use] extern crate crossbeam_channel; #[macro_use] -extern crate html5ever; -#[macro_use] extern crate lazy_static; #[macro_use] extern crate log; #[macro_use] extern crate profile_traits; -mod dom_wrapper; - -use crate::dom_wrapper::{ServoLayoutDocument, ServoLayoutElement, ServoLayoutNode}; use app_units::Au; use crossbeam_channel::{Receiver, Sender}; use embedder_traits::resources::{self, Resource}; @@ -35,6 +30,7 @@ use ipc_channel::ipc::{self, IpcReceiver, IpcSender}; use ipc_channel::router::ROUTER; use layout::context::LayoutContext; use layout::display_list::{DisplayListBuilder, WebRenderImageInfo}; +use layout::element_data::LayoutDataForElement; use layout::layout_debug; use layout::query::{ process_content_box_request, process_content_boxes_request, process_resolved_font_style_query, @@ -60,6 +56,7 @@ use parking_lot::RwLock; use profile_traits::mem::{self as profile_mem, Report, ReportKind, ReportsChan}; use profile_traits::time::{self as profile_time, profile, TimerMetadata}; use profile_traits::time::{TimerMetadataFrameType, TimerMetadataReflowType}; +use script::layout_dom::{ServoLayoutDocument, ServoLayoutElement, ServoLayoutNode}; use script_layout_interface::message::{LayoutThreadInit, Msg, NodesFromPointQueryType}; use script_layout_interface::message::{QueryMsg, ReflowComplete, ReflowGoal, ScriptReflow}; use script_layout_interface::rpc::TextIndexResponse; @@ -804,7 +801,7 @@ impl LayoutThread { data: &mut ScriptReflowResult, possibly_locked_rw_data: &mut RwData<'a, 'b>, ) { - let document = unsafe { ServoLayoutNode::new(&data.document) }; + let document = unsafe { ServoLayoutNode::<LayoutDataForElement>::new(&data.document) }; let document = document.as_document().unwrap(); let mut rw_data = possibly_locked_rw_data.lock(); @@ -959,11 +956,19 @@ impl LayoutThread { let elements_with_snapshot: Vec<_> = restyles .iter() .filter(|r| r.1.snapshot.is_some()) - .map(|r| unsafe { ServoLayoutNode::new(&r.0).as_element().unwrap() }) + .map(|r| unsafe { + ServoLayoutNode::<LayoutDataForElement>::new(&r.0) + .as_element() + .unwrap() + }) .collect(); for (el, restyle) in restyles { - let el = unsafe { ServoLayoutNode::new(&el).as_element().unwrap() }; + let el = unsafe { + ServoLayoutNode::<LayoutDataForElement>::new(&el) + .as_element() + .unwrap() + }; // If we haven't styled this node yet, we don't need to track a // restyle. @@ -999,14 +1004,16 @@ impl LayoutThread { ); let dirty_root = unsafe { - ServoLayoutNode::new(&data.dirty_root.unwrap()) + ServoLayoutNode::<LayoutDataForElement>::new(&data.dirty_root.unwrap()) .as_element() .unwrap() }; let traversal = RecalcStyle::new(layout_context); let token = { - let shared = DomTraversal::<ServoLayoutElement>::shared_context(&traversal); + let shared = DomTraversal::<ServoLayoutElement<LayoutDataForElement>>::shared_context( + &traversal, + ); RecalcStyle::pre_traverse(dirty_root, shared) }; @@ -1014,7 +1021,8 @@ impl LayoutThread { let rayon_pool = rayon_pool.as_ref(); if token.should_traverse() { - let dirty_root = driver::traverse_dom(&traversal, token, rayon_pool).as_node(); + let dirty_root: ServoLayoutNode<LayoutDataForElement> = + driver::traverse_dom(&traversal, token, rayon_pool).as_node(); let root_node = root_element.as_node(); let mut box_tree = self.box_tree.borrow_mut(); @@ -1126,12 +1134,12 @@ impl LayoutThread { process_node_scroll_area_request(node, self.fragment_tree.borrow().clone()); }, &QueryMsg::NodeScrollIdQuery(node) => { - let node = unsafe { ServoLayoutNode::new(&node) }; + let node = unsafe { ServoLayoutNode::<LayoutDataForElement>::new(&node) }; rw_data.scroll_id_response = Some(process_node_scroll_id_request(self.id, node)); }, &QueryMsg::ResolvedStyleQuery(node, ref pseudo, ref property) => { - let node = unsafe { ServoLayoutNode::new(&node) }; + let node = unsafe { ServoLayoutNode::<LayoutDataForElement>::new(&node) }; let fragment_tree = self.fragment_tree.borrow().clone(); rw_data.resolved_style_response = process_resolved_style_request( context, @@ -1142,7 +1150,7 @@ impl LayoutThread { ); }, &QueryMsg::ResolvedFontStyleQuery(node, ref property, ref value) => { - let node = unsafe { ServoLayoutNode::new(&node) }; + let node = unsafe { ServoLayoutNode::<LayoutDataForElement>::new(&node) }; rw_data.resolved_font_style_response = process_resolved_font_style_query(node, property, value); }, @@ -1172,7 +1180,7 @@ impl LayoutThread { results.iter().map(|result| result.node).collect() }, &QueryMsg::ElementInnerTextQuery(node) => { - let node = unsafe { ServoLayoutNode::new(&node) }; + let node = unsafe { ServoLayoutNode::<LayoutDataForElement>::new(&node) }; rw_data.element_inner_text_response = process_element_inner_text_query(node); }, &QueryMsg::InnerWindowDimensionsQuery(_browsing_context_id) => { @@ -1232,7 +1240,7 @@ impl LayoutThread { &self, fragment_tree: Arc<FragmentTree>, reflow_goal: &ReflowGoal, - document: Option<&ServoLayoutDocument>, + document: Option<&ServoLayoutDocument<LayoutDataForElement>>, context: &mut LayoutContext, ) { Self::cancel_animations_for_nodes_not_in_fragment_tree( |