diff options
Diffstat (limited to 'components/script/dom/window.rs')
-rw-r--r-- | components/script/dom/window.rs | 52 |
1 files changed, 27 insertions, 25 deletions
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index f6177e90fcf..5d4e3c3a72e 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -66,7 +66,7 @@ use num_traits::ToPrimitive; use profile_traits::mem::ProfilerChan as MemProfilerChan; use profile_traits::time::ProfilerChan as TimeProfilerChan; use script_layout_interface::{TrustedNodeAddress, PendingImageState}; -use script_layout_interface::message::{Msg, Reflow, ReflowGoal, ScriptReflow}; +use script_layout_interface::message::{Msg, Reflow, QueryMsg, ReflowGoal, ScriptReflow}; use script_layout_interface::reporter::CSSErrorReporter; use script_layout_interface::rpc::{ContentBoxResponse, ContentBoxesResponse, LayoutRPC}; use script_layout_interface::rpc::{NodeScrollIdResponse, ResolvedStyleResponse, TextIndexResponse}; @@ -1374,12 +1374,16 @@ impl Window { issued_reflow } + pub fn layout_reflow(&self, query_msg: QuerMsg) -> bool { + self.reflow(ReflowGoal::LayoutQuery(query_msg, time::precise_time_ns()), ReflowReason::Query) + } + pub fn layout(&self) -> &LayoutRPC { &*self.layout_rpc } pub fn content_box_query(&self, content_box_request: TrustedNodeAddress) -> Option<Rect<Au>> { - if !self.reflow(ReflowGoal::ContentBoxQuery(content_box_request), ReflowReason::Query) { + if !self.layout_reflow(QueryMsg::ContentBoxQuery(content_box_request)) { return None; } let ContentBoxResponse(rect) = self.layout_rpc.content_box(); @@ -1387,7 +1391,7 @@ impl Window { } pub fn content_boxes_query(&self, content_boxes_request: TrustedNodeAddress) -> Vec<Rect<Au>> { - if !self.reflow(ReflowGoal::ContentBoxesQuery(content_boxes_request), ReflowReason::Query) { + if !self.layout_reflow(QueryMsg::ContentBoxesQuery(content_boxes_request)) { return vec![]; } let ContentBoxesResponse(rects) = self.layout_rpc.content_boxes(); @@ -1395,14 +1399,14 @@ impl Window { } pub fn client_rect_query(&self, node_geometry_request: TrustedNodeAddress) -> Rect<i32> { - if !self.reflow(ReflowGoal::NodeGeometryQuery(node_geometry_request), ReflowReason::Query) { + if !self.layout_reflow(QueryMsg::NodeGeometryQuery(node_geometry_request)) { return Rect::zero(); } self.layout_rpc.node_geometry().client_rect } pub fn scroll_area_query(&self, node: TrustedNodeAddress) -> Rect<i32> { - if !self.reflow(ReflowGoal::NodeScrollGeometryQuery(node), ReflowReason::Query) { + if !self.layout_reflow(QueryMsg::NodeScrollGeometryQuery(node)) { return Rect::zero(); } self.layout_rpc.node_scroll_area().client_rect @@ -1425,10 +1429,7 @@ impl Window { y_: f64, behavior: ScrollBehavior ) { - if !self.reflow( - ReflowGoal::NodeScrollIdQuery(node.to_trusted_node_address()), - ReflowReason::Query - ) { + if !self.layout_reflow(QueryMsg::NodeScrollIdQuery(node.to_trusted_node_address())) { return; } @@ -1452,8 +1453,7 @@ impl Window { element: TrustedNodeAddress, pseudo: Option<PseudoElement>, property: PropertyId) -> DOMString { - if !self.reflow(ReflowGoal::ResolvedStyleQuery(element, pseudo, property), - ReflowReason::Query) { + if !self.layout_reflow(QueryMsg::ResolvedStyleQuery(element, pseudo, property)) { return DOMString::new(); } let ResolvedStyleResponse(resolved) = self.layout_rpc.resolved_style(); @@ -1462,7 +1462,7 @@ impl Window { #[allow(unsafe_code)] pub fn offset_parent_query(&self, node: TrustedNodeAddress) -> (Option<DomRoot<Element>>, Rect<Au>) { - if !self.reflow(ReflowGoal::OffsetParentQuery(node), ReflowReason::Query) { + if !self.layout_reflow(QueryMsg::OffsetParentQuery(node)) { return (None, Rect::zero()); } @@ -1477,7 +1477,7 @@ impl Window { } pub fn style_query(&self, node: TrustedNodeAddress) -> Option<servo_arc::Arc<ComputedValues>> { - if !self.reflow(ReflowGoal::StyleQuery(node), ReflowReason::Query) { + if !self.layout_reflow(QueryMsg::StyleQuery(node)) { return None } self.layout_rpc.style().0 @@ -1488,7 +1488,7 @@ impl Window { node: TrustedNodeAddress, point_in_node: Point2D<f32> ) -> TextIndexResponse { - if !self.reflow(ReflowGoal::TextIndexQuery(node, point_in_node), ReflowReason::Query) { + if !self.layout_reflow(QueryMsg::TextIndexQuery(node, point_in_node)) { return TextIndexResponse(None); } self.layout_rpc.text_index() @@ -1870,18 +1870,20 @@ fn debug_reflow_events(id: PipelineId, reflow_goal: &ReflowGoal, reason: &Reflow let mut debug_msg = format!("**** pipeline={}", id); debug_msg.push_str(match *reflow_goal { ReflowGoal::Full => "\tFull", - ReflowGoal::ContentBoxQuery(_n) => "\tContentBoxQuery", - ReflowGoal::ContentBoxesQuery(_n) => "\tContentBoxesQuery", - ReflowGoal::NodesFromPointQuery(..) => "\tNodesFromPointQuery", - ReflowGoal::NodeGeometryQuery(_n) => "\tNodeGeometryQuery", - ReflowGoal::NodeScrollGeometryQuery(_n) => "\tNodeScrollGeometryQuery", - ReflowGoal::NodeScrollIdQuery(_n) => "\tNodeScrollIdQuery", - ReflowGoal::ResolvedStyleQuery(_, _, _) => "\tResolvedStyleQuery", - ReflowGoal::OffsetParentQuery(_n) => "\tOffsetParentQuery", - ReflowGoal::StyleQuery(_n) => "\tStyleQuery", - ReflowGoal::TextIndexQuery(..) => "\tTextIndexQuery", ReflowGoal::TickAnimations => "\tTickAnimations", - ReflowGoal::ElementInnerTextQuery(_) => "\tElementInnerTextQuery", + ReflowGoal::LayoutQuery(ref query_msg, _) => match query_msg { + &QueryMsg::ContentBoxQuery(_n) => "\tContentBoxQuery", + &QueryMsg::ContentBoxesQuery(_n) => "\tContentBoxesQuery", + &QueryMsg::NodesFromPointQuery(..) => "\tNodesFromPointQuery", + &QueryMsg::NodeGeometryQuery(_n) => "\tNodeGeometryQuery", + &QueryMsg::NodeScrollGeometryQuery(_n) => "\tNodeScrollGeometryQuery", + &QueryMsg::NodeScrollIdQuery(_n) => "\tNodeScrollIdQuery", + &QueryMsg::ResolvedStyleQuery(_, _, _) => "\tResolvedStyleQuery", + &QueryMsg::OffsetParentQuery(_n) => "\tOffsetParentQuery", + &QueryMsg::StyleQuery(_n) => "\tStyleQuery", + &QueryMsg::TextIndexQuery(..) => "\tTextIndexQuery", + &QueryMsg::ElementInnerTextQuery(_) => "\tElementInnerTextQuery", + }, }); debug_msg.push_str(match *reason { |