aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/window.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/window.rs')
-rw-r--r--components/script/dom/window.rs52
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 {