diff options
author | Ms2ger <Ms2ger@gmail.com> | 2015-10-29 16:55:27 +0100 |
---|---|---|
committer | Ms2ger <Ms2ger@gmail.com> | 2015-10-29 16:55:27 +0100 |
commit | cce510900e9d1f95990556135b285e4b10f8eddd (patch) | |
tree | 062b21ee3cae4aeddc7347e3bd20d314ce5d2797 /components/layout/layout_task.rs | |
parent | 1eb8900f486e681888f0e5dccd7e677cd17ecadd (diff) | |
download | servo-cce510900e9d1f95990556135b285e4b10f8eddd.tar.gz servo-cce510900e9d1f95990556135b285e4b10f8eddd.zip |
Use LayoutNode::new to avoid transmute calls in LayoutTask.
Diffstat (limited to 'components/layout/layout_task.rs')
-rw-r--r-- | components/layout/layout_task.rs | 34 |
1 files changed, 9 insertions, 25 deletions
diff --git a/components/layout/layout_task.rs b/components/layout/layout_task.rs index ad7bf3942ff..f4ea681e24a 100644 --- a/components/layout/layout_task.rs +++ b/components/layout/layout_task.rs @@ -51,9 +51,7 @@ use profile_traits::time::{self, ProfilerMetadata, profile}; use query::{LayoutRPCImpl, process_content_box_request, process_content_boxes_request}; use query::{MarginPadding, MarginRetrievingFragmentBorderBoxIterator, PositionProperty}; use query::{PositionRetrievingFragmentBorderBoxIterator, Side}; -use script::dom::bindings::js::LayoutJS; -use script::dom::document::Document; -use script::dom::node::{LayoutData, Node}; +use script::dom::node::LayoutData; use script::layout_interface::Animation; use script::layout_interface::{LayoutChan, LayoutRPC, OffsetParentResponse}; use script::layout_interface::{Msg, NewLayoutTaskInfo, Reflow, ReflowGoal, ReflowQueryType}; @@ -90,7 +88,7 @@ use util::opts; use util::task::spawn_named_with_send_on_failure; use util::task_state; use util::workqueue::WorkQueue; -use wrapper::{LayoutDocument, LayoutNode, ThreadSafeLayoutNode}; +use wrapper::{LayoutNode, ThreadSafeLayoutNode}; /// The number of screens of data we're allowed to generate display lists for in each direction. pub const DISPLAY_PORT_SIZE_FACTOR: i32 = 8; @@ -895,17 +893,9 @@ impl LayoutTask { property: &Atom, layout_root: &mut FlowRef) -> Option<String> { - // FIXME: Isolate this transmutation into a "bridge" module. - // FIXME(rust#16366): The following line had to be moved because of a - // rustc bug. It should be in the next unsafe block. - let node: LayoutJS<Node> = unsafe { - LayoutJS::from_trusted_node_address(requested_node) - }; - let node: &LayoutNode = unsafe { - transmute(&node) - }; + let node = unsafe { LayoutNode::new(&requested_node) }; - let layout_node = ThreadSafeLayoutNode::new(node); + let layout_node = ThreadSafeLayoutNode::new(&node); let layout_node = match pseudo { &Some(PseudoElement::Before) => layout_node.get_before_pseudo(), &Some(PseudoElement::After) => layout_node.get_after_pseudo(), @@ -1136,15 +1126,9 @@ impl LayoutTask { }; let _ajst = AutoJoinScriptTask { data: data }; - // FIXME: Isolate this transmutation into a "bridge" module. - let mut doc: LayoutJS<Document> = unsafe { - LayoutJS::from_trusted_node_address(data.document).downcast::<Document>().unwrap() - }; - let doc: &mut LayoutDocument = unsafe { - transmute(&mut doc) - }; - - let node: LayoutNode = match doc.root_node() { + let document = unsafe { LayoutNode::new(&data.document) }; + let document = document.as_document().unwrap(); + let node: LayoutNode = match document.root_node() { None => return, Some(x) => x, }; @@ -1199,7 +1183,7 @@ impl LayoutTask { } } - let event_state_changes = doc.drain_event_state_changes(); + let event_state_changes = document.drain_event_state_changes(); if !needs_dirtying { for &(el, state) in event_state_changes.iter() { assert!(!state.is_empty()); @@ -1233,7 +1217,7 @@ impl LayoutTask { }); // Retrieve the (possibly rebuilt) root flow. - rw_data.root_flow = self.try_get_layout_root(node.clone()); + rw_data.root_flow = self.try_get_layout_root(node); } // Send new canvas renderers to the paint task |