From 67d6a026674ed53afa5bb0473262b915d9abeb5f Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Wed, 24 Aug 2016 10:22:13 +0200 Subject: [PATCH 1/7] Pass a &mut Flow to iterate_through_flow_tree_fragment_border_boxes. --- components/layout/query.rs | 16 ++++++++-------- components/layout/sequential.rs | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/components/layout/query.rs b/components/layout/query.rs index 3f45941e93a..6ff92e1b5bc 100644 --- a/components/layout/query.rs +++ b/components/layout/query.rs @@ -10,7 +10,7 @@ use euclid::point::Point2D; use euclid::rect::Rect; use euclid::size::Size2D; use flow; -use flow_ref::FlowRef; +use flow_ref::{self, FlowRef}; use fragment::{Fragment, FragmentBorderBoxIterator, SpecificFragmentInfo}; use gfx::display_list::{DisplayItemMetadata, DisplayList, OpaqueNode, ScrollOffsetMap}; use gfx_traits::LayerId; @@ -379,7 +379,7 @@ pub fn process_content_box_request( // FIXME(pcwalton): This has not been updated to handle the stacking context relative // stuff. So the position is wrong in most cases. let mut iterator = UnioningFragmentBorderBoxIterator::new(requested_node.opaque()); - sequential::iterate_through_flow_tree_fragment_border_boxes(layout_root, &mut iterator); + sequential::iterate_through_flow_tree_fragment_border_boxes(flow_ref::deref_mut(layout_root), &mut iterator); match iterator.rect { Some(rect) => rect, None => Rect::zero() @@ -391,7 +391,7 @@ pub fn process_content_boxes_request(requested_node: N, layout_ro // FIXME(pcwalton): This has not been updated to handle the stacking context relative // stuff. So the position is wrong in most cases. let mut iterator = CollectingFragmentBorderBoxIterator::new(requested_node.opaque()); - sequential::iterate_through_flow_tree_fragment_border_boxes(layout_root, &mut iterator); + sequential::iterate_through_flow_tree_fragment_border_boxes(flow_ref::deref_mut(layout_root), &mut iterator); iterator.rects } @@ -584,7 +584,7 @@ impl FragmentBorderBoxIterator for ParentOffsetBorderBoxIterator { pub fn process_node_geometry_request(requested_node: N, layout_root: &mut FlowRef) -> Rect { let mut iterator = FragmentLocatingFragmentIterator::new(requested_node.opaque()); - sequential::iterate_through_flow_tree_fragment_border_boxes(layout_root, &mut iterator); + sequential::iterate_through_flow_tree_fragment_border_boxes(flow_ref::deref_mut(layout_root), &mut iterator); iterator.client_rect } @@ -596,7 +596,7 @@ pub fn process_node_layer_id_request(requested_node: N) -> LayerI pub fn process_node_scroll_area_request< N: LayoutNode>(requested_node: N, layout_root: &mut FlowRef) -> Rect { let mut iterator = UnioningFragmentScrollAreaIterator::new(requested_node.opaque()); - sequential::iterate_through_flow_tree_fragment_border_boxes(layout_root, &mut iterator); + sequential::iterate_through_flow_tree_fragment_border_boxes(flow_ref::deref_mut(layout_root), &mut iterator); match iterator.overflow_direction { OverflowDirection::RightAndDown => { let right = max(iterator.union_rect.size.width, iterator.origin_rect.size.width); @@ -721,7 +721,7 @@ pub fn process_resolved_style_request<'a, N, C>(requested_node: N, PositionRetrievingFragmentBorderBoxIterator::new(requested_node.opaque(), property, position); - sequential::iterate_through_flow_tree_fragment_border_boxes(layout_root, + sequential::iterate_through_flow_tree_fragment_border_boxes(flow_ref::deref_mut(layout_root), &mut iterator); iterator.result.map(|r| r.to_css_string()) } @@ -751,7 +751,7 @@ pub fn process_resolved_style_request<'a, N, C>(requested_node: N, side, margin_padding, style.writing_mode); - sequential::iterate_through_flow_tree_fragment_border_boxes(layout_root, + sequential::iterate_through_flow_tree_fragment_border_boxes(flow_ref::deref_mut(layout_root), &mut iterator); iterator.result.map(|r| r.to_css_string()) }, @@ -777,7 +777,7 @@ pub fn process_resolved_style_request<'a, N, C>(requested_node: N, pub fn process_offset_parent_query(requested_node: N, layout_root: &mut FlowRef) -> OffsetParentResponse { let mut iterator = ParentOffsetBorderBoxIterator::new(requested_node.opaque()); - sequential::iterate_through_flow_tree_fragment_border_boxes(layout_root, &mut iterator); + sequential::iterate_through_flow_tree_fragment_border_boxes(flow_ref::deref_mut(layout_root), &mut iterator); let parent_info_index = iterator.parent_nodes.iter().rposition(|info| info.is_some()); match parent_info_index { Some(parent_info_index) => { diff --git a/components/layout/sequential.rs b/components/layout/sequential.rs index 48a4c3b3889..53d565fc423 100644 --- a/components/layout/sequential.rs +++ b/components/layout/sequential.rs @@ -95,7 +95,7 @@ pub fn build_display_list_for_subtree(root: &mut FlowRef, build_display_list.state.items } -pub fn iterate_through_flow_tree_fragment_border_boxes(root: &mut FlowRef, +pub fn iterate_through_flow_tree_fragment_border_boxes(root: &mut Flow, iterator: &mut FragmentBorderBoxIterator) { fn doit(flow: &mut Flow, level: i32, @@ -117,7 +117,7 @@ pub fn iterate_through_flow_tree_fragment_border_boxes(root: &mut FlowRef, } } - doit(flow_ref::deref_mut(root), 0, iterator, &Point2D::zero()); + doit(root, 0, iterator, &Point2D::zero()); } pub fn store_overflow(layout_context: &LayoutContext, flow: &mut Flow) { From 0efa583df4c9ab78b247192809c2b1e9c5633e26 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Wed, 24 Aug 2016 10:23:45 +0200 Subject: [PATCH 2/7] Pass a &mut Flow to resolve_generated_content. --- components/layout/sequential.rs | 4 ++-- components/layout_thread/lib.rs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/components/layout/sequential.rs b/components/layout/sequential.rs index 53d565fc423..804063b7629 100644 --- a/components/layout/sequential.rs +++ b/components/layout/sequential.rs @@ -23,7 +23,7 @@ use util::opts; pub use style::sequential::traverse_dom; -pub fn resolve_generated_content(root: &mut FlowRef, shared_layout_context: &SharedLayoutContext) { +pub fn resolve_generated_content(root: &mut Flow, shared_layout_context: &SharedLayoutContext) { fn doit(flow: &mut Flow, level: u32, traversal: &mut ResolveGeneratedContent) { if !traversal.should_process(flow) { return @@ -38,7 +38,7 @@ pub fn resolve_generated_content(root: &mut FlowRef, shared_layout_context: &Sha let layout_context = LayoutContext::new(shared_layout_context); let mut traversal = ResolveGeneratedContent::new(&layout_context); - doit(flow_ref::deref_mut(root), 0, &mut traversal) + doit(root, 0, &mut traversal) } pub fn traverse_flow_tree_preorder(root: &mut FlowRef, diff --git a/components/layout_thread/lib.rs b/components/layout_thread/lib.rs index 8d01b9b0a74..2ff314d7170 100644 --- a/components/layout_thread/lib.rs +++ b/components/layout_thread/lib.rs @@ -1446,7 +1446,7 @@ impl LayoutThread { profile(time::ProfilerCategory::LayoutGeneratedContent, self.profiler_metadata(), self.time_profiler_chan.clone(), - || sequential::resolve_generated_content(&mut root_flow, &layout_context)); + || sequential::resolve_generated_content(flow_ref::deref_mut(&mut root_flow), &layout_context)); // Guess float placement. profile(time::ProfilerCategory::LayoutFloatPlacementSpeculation, From fa0e198c8f034ebb9a7cdca618f6ec3c4e193520 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Wed, 24 Aug 2016 10:32:14 +0200 Subject: [PATCH 3/7] Pass a &mut Flow to traverse_flow_tree_preorder. --- components/layout/parallel.rs | 8 ++++---- components/layout/sequential.rs | 4 +--- components/layout_thread/lib.rs | 4 ++-- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/components/layout/parallel.rs b/components/layout/parallel.rs index 9e1009ce835..fcef3b54f98 100644 --- a/components/layout/parallel.rs +++ b/components/layout/parallel.rs @@ -10,7 +10,7 @@ use context::{LayoutContext, SharedLayoutContext}; use flow::{self, Flow, MutableFlowUtils, PostorderFlowTraversal, PreorderFlowTraversal}; -use flow_ref::{self, FlowRef}; +use flow_ref::FlowRef; use profile_traits::time::{self, TimerMetadata, profile}; use std::mem; use std::sync::atomic::{AtomicIsize, Ordering}; @@ -220,7 +220,7 @@ fn assign_block_sizes_and_store_overflow( } pub fn traverse_flow_tree_preorder( - root: &mut FlowRef, + root: &mut Flow, profiler_metadata: Option, time_profiler_chan: time::ProfilerChan, shared_layout_context: &SharedLayoutContext, @@ -228,7 +228,7 @@ pub fn traverse_flow_tree_preorder( if opts::get().bubble_inline_sizes_separately { let layout_context = LayoutContext::new(shared_layout_context); let bubble_inline_sizes = BubbleISizes { layout_context: &layout_context }; - flow_ref::deref_mut(root).traverse_postorder(&bubble_inline_sizes); + root.traverse_postorder(&bubble_inline_sizes); } run_queue_with_custom_work_data_type(queue, |queue| { @@ -236,7 +236,7 @@ pub fn traverse_flow_tree_preorder( time_profiler_chan, || { queue.push(WorkUnit { fun: assign_inline_sizes, - data: (box vec![mut_owned_flow_to_unsafe_flow(root)], 0), + data: (box vec![borrowed_flow_to_unsafe_flow(root)], 0), }) }); }, shared_layout_context); diff --git a/components/layout/sequential.rs b/components/layout/sequential.rs index 804063b7629..5fca977b8b1 100644 --- a/components/layout/sequential.rs +++ b/components/layout/sequential.rs @@ -41,7 +41,7 @@ pub fn resolve_generated_content(root: &mut Flow, shared_layout_context: &Shared doit(root, 0, &mut traversal) } -pub fn traverse_flow_tree_preorder(root: &mut FlowRef, +pub fn traverse_flow_tree_preorder(root: &mut Flow, shared_layout_context: &SharedLayoutContext) { fn doit(flow: &mut Flow, assign_inline_sizes: AssignISizes, @@ -61,8 +61,6 @@ pub fn traverse_flow_tree_preorder(root: &mut FlowRef, let layout_context = LayoutContext::new(shared_layout_context); - let root = flow_ref::deref_mut(root); - if opts::get().bubble_inline_sizes_separately { let bubble_inline_sizes = BubbleISizes { layout_context: &layout_context }; { diff --git a/components/layout_thread/lib.rs b/components/layout_thread/lib.rs index 2ff314d7170..c001f3b2345 100644 --- a/components/layout_thread/lib.rs +++ b/components/layout_thread/lib.rs @@ -875,7 +875,7 @@ impl LayoutThread { fn solve_constraints(layout_root: &mut FlowRef, shared_layout_context: &SharedLayoutContext) { let _scope = layout_debug_scope!("solve_constraints"); - sequential::traverse_flow_tree_preorder(layout_root, shared_layout_context); + sequential::traverse_flow_tree_preorder(flow_ref::deref_mut(layout_root), shared_layout_context); } /// Performs layout constraint solving in parallel. @@ -892,7 +892,7 @@ impl LayoutThread { // NOTE: this currently computes borders, so any pruning should separate that // operation out. - parallel::traverse_flow_tree_preorder(layout_root, + parallel::traverse_flow_tree_preorder(flow_ref::deref_mut(layout_root), profiler_metadata, time_profiler_chan, shared_layout_context, From c1d953cd2e9fa605958f1d3e40e9163fff5b18da Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Wed, 24 Aug 2016 10:36:56 +0200 Subject: [PATCH 4/7] Pass a &mut Flow to build_display_list_for_subtree. --- components/layout/sequential.rs | 8 +++----- components/layout_thread/lib.rs | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/components/layout/sequential.rs b/components/layout/sequential.rs index 5fca977b8b1..f75768fefe9 100644 --- a/components/layout/sequential.rs +++ b/components/layout/sequential.rs @@ -12,7 +12,6 @@ use floats::SpeculatedFloatPlacement; use flow::IS_ABSOLUTELY_POSITIONED; use flow::{PostorderFlowTraversal, PreorderFlowTraversal}; use flow::{self, Flow, ImmutableFlowUtils, InorderFlowTraversal, MutableFlowUtils}; -use flow_ref::{self, FlowRef}; use fragment::FragmentBorderBoxIterator; use generated_content::ResolveGeneratedContent; use gfx::display_list::{DisplayItem, StackingContext}; @@ -75,11 +74,10 @@ pub fn traverse_flow_tree_preorder(root: &mut Flow, doit(root, assign_inline_sizes, assign_block_sizes); } -pub fn build_display_list_for_subtree(root: &mut FlowRef, +pub fn build_display_list_for_subtree(flow_root: &mut Flow, root_stacking_context: &mut StackingContext, shared_layout_context: &SharedLayoutContext) -> Vec { - let flow_root = flow_ref::deref_mut(root); flow_root.traverse_preorder(&ComputeAbsolutePositions { layout_context: shared_layout_context }); let mut children = vec![]; flow_root.collect_stacking_contexts(root_stacking_context.id, @@ -87,9 +85,9 @@ pub fn build_display_list_for_subtree(root: &mut FlowRef, root_stacking_context.add_children(children); let mut build_display_list = BuildDisplayList { state: DisplayListBuildState::new(shared_layout_context, - flow::base(&*flow_root).stacking_context_id), + flow::base(flow_root).stacking_context_id), }; - build_display_list.traverse(&mut *flow_root); + build_display_list.traverse(flow_root); build_display_list.state.items } diff --git a/components/layout_thread/lib.rs b/components/layout_thread/lib.rs index c001f3b2345..9940f2336c6 100644 --- a/components/layout_thread/lib.rs +++ b/components/layout_thread/lib.rs @@ -933,7 +933,7 @@ impl LayoutThread { None); let display_list_entries = - sequential::build_display_list_for_subtree(layout_root, + sequential::build_display_list_for_subtree(flow_ref::deref_mut(layout_root), &mut root_stacking_context, shared_layout_context); From 6d2f772f446f80f8b881acd376a6dade77ecc490 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Wed, 24 Aug 2016 10:48:05 +0200 Subject: [PATCH 5/7] Pass a &mut Flow to compute_abs_pos_and_build_display_list. --- components/layout_thread/lib.rs | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/components/layout_thread/lib.rs b/components/layout_thread/lib.rs index 9940f2336c6..cc3a8046370 100644 --- a/components/layout_thread/lib.rs +++ b/components/layout_thread/lib.rs @@ -901,23 +901,23 @@ impl LayoutThread { fn compute_abs_pos_and_build_display_list(&mut self, data: &Reflow, - layout_root: &mut FlowRef, + layout_root: &mut Flow, shared_layout_context: &mut SharedLayoutContext, rw_data: &mut LayoutThreadData) { - let writing_mode = flow::base(&**layout_root).writing_mode; + let writing_mode = flow::base(layout_root).writing_mode; let (metadata, sender) = (self.profiler_metadata(), self.time_profiler_chan.clone()); profile(time::ProfilerCategory::LayoutDispListBuild, metadata.clone(), sender.clone(), || { - flow::mut_base(flow_ref::deref_mut(layout_root)).stacking_relative_position = + flow::mut_base(layout_root).stacking_relative_position = LogicalPoint::zero(writing_mode).to_physical(writing_mode, self.viewport_size); - flow::mut_base(flow_ref::deref_mut(layout_root)).clip = + flow::mut_base(layout_root).clip = ClippingRegion::from_rect(&data.page_clip_rect); - if flow::base(&**layout_root).restyle_damage.contains(REPAINT) || + if flow::base(layout_root).restyle_damage.contains(REPAINT) || rw_data.display_list.is_none() { let mut root_stacking_context = StackingContext::new(StackingContextId::new(0), StackingContextType::Real, @@ -933,16 +933,15 @@ impl LayoutThread { None); let display_list_entries = - sequential::build_display_list_for_subtree(flow_ref::deref_mut(layout_root), + sequential::build_display_list_for_subtree(layout_root, &mut root_stacking_context, shared_layout_context); debug!("Done building display list."); - let root_background_color = get_root_flow_background_color( - flow_ref::deref_mut(layout_root)); + let root_background_color = get_root_flow_background_color(layout_root); let root_size = { - let root_flow = flow::base(&**layout_root); + let root_flow = flow::base(layout_root); if rw_data.stylist.viewport_constraints().is_some() { root_flow.position.size.to_physical(root_flow.writing_mode) } else { @@ -992,8 +991,7 @@ impl LayoutThread { epoch, Some(root_scroll_layer_id), &mut frame_builder); - let root_background_color = get_root_flow_background_color( - flow_ref::deref_mut(layout_root)); + let root_background_color = get_root_flow_background_color(layout_root); let root_background_color = webrender_traits::ColorF::new(root_background_color.r, root_background_color.g, @@ -1499,7 +1497,7 @@ impl LayoutThread { // Build the display list if necessary, and send it to the painter. if let Some(mut root_flow) = self.root_flow.clone() { self.compute_abs_pos_and_build_display_list(data, - &mut root_flow, + flow_ref::deref_mut(&mut root_flow), &mut *layout_context, rw_data); self.first_reflow = false; From 06aeb72dbc7786f6584ca79ffc40790f91395b93 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Wed, 24 Aug 2016 10:51:26 +0200 Subject: [PATCH 6/7] Pass a &mut Flow to solve_constraints and solve_constraints_parallel. --- components/layout_thread/lib.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/components/layout_thread/lib.rs b/components/layout_thread/lib.rs index cc3a8046370..86b962a7ca7 100644 --- a/components/layout_thread/lib.rs +++ b/components/layout_thread/lib.rs @@ -872,10 +872,10 @@ impl LayoutThread { /// This corresponds to `Reflow()` in Gecko and `layout()` in WebKit/Blink and should be /// benchmarked against those two. It is marked `#[inline(never)]` to aid profiling. #[inline(never)] - fn solve_constraints(layout_root: &mut FlowRef, + fn solve_constraints(layout_root: &mut Flow, shared_layout_context: &SharedLayoutContext) { let _scope = layout_debug_scope!("solve_constraints"); - sequential::traverse_flow_tree_preorder(flow_ref::deref_mut(layout_root), shared_layout_context); + sequential::traverse_flow_tree_preorder(layout_root, shared_layout_context); } /// Performs layout constraint solving in parallel. @@ -884,7 +884,7 @@ impl LayoutThread { /// benchmarked against those two. It is marked `#[inline(never)]` to aid profiling. #[inline(never)] fn solve_constraints_parallel(traversal: &mut WorkQueue, - layout_root: &mut FlowRef, + layout_root: &mut Flow, profiler_metadata: Option, time_profiler_chan: time::ProfilerChan, shared_layout_context: &SharedLayoutContext) { @@ -892,7 +892,7 @@ impl LayoutThread { // NOTE: this currently computes borders, so any pruning should separate that // operation out. - parallel::traverse_flow_tree_preorder(flow_ref::deref_mut(layout_root), + parallel::traverse_flow_tree_preorder(layout_root, profiler_metadata, time_profiler_chan, shared_layout_context, @@ -1463,15 +1463,15 @@ impl LayoutThread { match self.parallel_traversal { None => { // Sequential mode. - LayoutThread::solve_constraints(&mut root_flow, &layout_context) + LayoutThread::solve_constraints(flow_ref::deref_mut(&mut root_flow), &layout_context) } Some(ref mut parallel) => { // Parallel mode. LayoutThread::solve_constraints_parallel(parallel, - &mut root_flow, - profiler_metadata, - self.time_profiler_chan.clone(), - &*layout_context); + flow_ref::deref_mut(&mut root_flow), + profiler_metadata, + self.time_profiler_chan.clone(), + &*layout_context); } } }); From 12d31d2d701a21565d10145b8a19a0773edf3aa6 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Thu, 25 Aug 2016 09:06:55 +0200 Subject: [PATCH 7/7] Pass &mut Flow to query functions. --- components/layout/query.rs | 31 +++++++++++++++---------------- components/layout_thread/lib.rs | 13 +++++++------ 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/components/layout/query.rs b/components/layout/query.rs index 6ff92e1b5bc..c92af15582f 100644 --- a/components/layout/query.rs +++ b/components/layout/query.rs @@ -9,8 +9,7 @@ use construct::ConstructionResult; use euclid::point::Point2D; use euclid::rect::Rect; use euclid::size::Size2D; -use flow; -use flow_ref::{self, FlowRef}; +use flow::{self, Flow}; use fragment::{Fragment, FragmentBorderBoxIterator, SpecificFragmentInfo}; use gfx::display_list::{DisplayItemMetadata, DisplayList, OpaqueNode, ScrollOffsetMap}; use gfx_traits::LayerId; @@ -375,23 +374,23 @@ impl FragmentBorderBoxIterator for MarginRetrievingFragmentBorderBoxIterator { } pub fn process_content_box_request( - requested_node: N, layout_root: &mut FlowRef) -> Rect { + requested_node: N, layout_root: &mut Flow) -> Rect { // FIXME(pcwalton): This has not been updated to handle the stacking context relative // stuff. So the position is wrong in most cases. let mut iterator = UnioningFragmentBorderBoxIterator::new(requested_node.opaque()); - sequential::iterate_through_flow_tree_fragment_border_boxes(flow_ref::deref_mut(layout_root), &mut iterator); + sequential::iterate_through_flow_tree_fragment_border_boxes(layout_root, &mut iterator); match iterator.rect { Some(rect) => rect, None => Rect::zero() } } -pub fn process_content_boxes_request(requested_node: N, layout_root: &mut FlowRef) +pub fn process_content_boxes_request(requested_node: N, layout_root: &mut Flow) -> Vec> { // FIXME(pcwalton): This has not been updated to handle the stacking context relative // stuff. So the position is wrong in most cases. let mut iterator = CollectingFragmentBorderBoxIterator::new(requested_node.opaque()); - sequential::iterate_through_flow_tree_fragment_border_boxes(flow_ref::deref_mut(layout_root), &mut iterator); + sequential::iterate_through_flow_tree_fragment_border_boxes(layout_root, &mut iterator); iterator.rects } @@ -581,10 +580,10 @@ impl FragmentBorderBoxIterator for ParentOffsetBorderBoxIterator { } } -pub fn process_node_geometry_request(requested_node: N, layout_root: &mut FlowRef) +pub fn process_node_geometry_request(requested_node: N, layout_root: &mut Flow) -> Rect { let mut iterator = FragmentLocatingFragmentIterator::new(requested_node.opaque()); - sequential::iterate_through_flow_tree_fragment_border_boxes(flow_ref::deref_mut(layout_root), &mut iterator); + sequential::iterate_through_flow_tree_fragment_border_boxes(layout_root, &mut iterator); iterator.client_rect } @@ -593,10 +592,10 @@ pub fn process_node_layer_id_request(requested_node: N) -> LayerI layout_node.layer_id() } -pub fn process_node_scroll_area_request< N: LayoutNode>(requested_node: N, layout_root: &mut FlowRef) +pub fn process_node_scroll_area_request< N: LayoutNode>(requested_node: N, layout_root: &mut Flow) -> Rect { let mut iterator = UnioningFragmentScrollAreaIterator::new(requested_node.opaque()); - sequential::iterate_through_flow_tree_fragment_border_boxes(flow_ref::deref_mut(layout_root), &mut iterator); + sequential::iterate_through_flow_tree_fragment_border_boxes(layout_root, &mut iterator); match iterator.overflow_direction { OverflowDirection::RightAndDown => { let right = max(iterator.union_rect.size.width, iterator.origin_rect.size.width); @@ -643,7 +642,7 @@ pub fn process_resolved_style_request<'a, N, C>(requested_node: N, style_context: &'a C, pseudo: &Option, property: &Atom, - layout_root: &mut FlowRef) -> Option + layout_root: &mut Flow) -> Option where N: LayoutNode, C: StyleContext<'a> { @@ -695,7 +694,7 @@ pub fn process_resolved_style_request<'a, N, C>(requested_node: N, fn used_value_for_position_property( layout_node: N::ConcreteThreadSafeLayoutNode, - layout_root: &mut FlowRef, + layout_root: &mut Flow, requested_node: N, property: &Atom) -> Option { let maybe_data = layout_node.borrow_layout_data(); @@ -721,7 +720,7 @@ pub fn process_resolved_style_request<'a, N, C>(requested_node: N, PositionRetrievingFragmentBorderBoxIterator::new(requested_node.opaque(), property, position); - sequential::iterate_through_flow_tree_fragment_border_boxes(flow_ref::deref_mut(layout_root), + sequential::iterate_through_flow_tree_fragment_border_boxes(layout_root, &mut iterator); iterator.result.map(|r| r.to_css_string()) } @@ -751,7 +750,7 @@ pub fn process_resolved_style_request<'a, N, C>(requested_node: N, side, margin_padding, style.writing_mode); - sequential::iterate_through_flow_tree_fragment_border_boxes(flow_ref::deref_mut(layout_root), + sequential::iterate_through_flow_tree_fragment_border_boxes(layout_root, &mut iterator); iterator.result.map(|r| r.to_css_string()) }, @@ -774,10 +773,10 @@ pub fn process_resolved_style_request<'a, N, C>(requested_node: N, } } -pub fn process_offset_parent_query(requested_node: N, layout_root: &mut FlowRef) +pub fn process_offset_parent_query(requested_node: N, layout_root: &mut Flow) -> OffsetParentResponse { let mut iterator = ParentOffsetBorderBoxIterator::new(requested_node.opaque()); - sequential::iterate_through_flow_tree_fragment_border_boxes(flow_ref::deref_mut(layout_root), &mut iterator); + sequential::iterate_through_flow_tree_fragment_border_boxes(layout_root, &mut iterator); let parent_info_index = iterator.parent_nodes.iter().rposition(|info| info.is_some()); match parent_info_index { Some(parent_info_index) => { diff --git a/components/layout_thread/lib.rs b/components/layout_thread/lib.rs index 86b962a7ca7..05a983b274d 100644 --- a/components/layout_thread/lib.rs +++ b/components/layout_thread/lib.rs @@ -1209,14 +1209,15 @@ impl LayoutThread { &mut shared_layout_context); if let Some(mut root_flow) = self.root_flow.clone() { + let root_flow = flow_ref::deref_mut(&mut root_flow); match data.query_type { ReflowQueryType::ContentBoxQuery(node) => { let node = unsafe { ServoLayoutNode::new(&node) }; - rw_data.content_box_response = process_content_box_request(node, &mut root_flow); + rw_data.content_box_response = process_content_box_request(node, root_flow); }, ReflowQueryType::ContentBoxesQuery(node) => { let node = unsafe { ServoLayoutNode::new(&node) }; - rw_data.content_boxes_response = process_content_boxes_request(node, &mut root_flow); + rw_data.content_boxes_response = process_content_boxes_request(node, root_flow); }, ReflowQueryType::HitTestQuery(translated_point, client_point, update_cursor) => { let translated_point = @@ -1237,11 +1238,11 @@ impl LayoutThread { }, ReflowQueryType::NodeGeometryQuery(node) => { let node = unsafe { ServoLayoutNode::new(&node) }; - rw_data.client_rect_response = process_node_geometry_request(node, &mut root_flow); + rw_data.client_rect_response = process_node_geometry_request(node, root_flow); }, ReflowQueryType::NodeScrollGeometryQuery(node) => { let node = unsafe { ServoLayoutNode::new(&node) }; - rw_data.scroll_area_response = process_node_scroll_area_request(node, &mut root_flow); + rw_data.scroll_area_response = process_node_scroll_area_request(node, root_flow); }, ReflowQueryType::NodeOverflowQuery(node) => { let node = unsafe { ServoLayoutNode::new(&node) }; @@ -1259,11 +1260,11 @@ impl LayoutThread { &layout_context, pseudo, property, - &mut root_flow); + root_flow); }, ReflowQueryType::OffsetParentQuery(node) => { let node = unsafe { ServoLayoutNode::new(&node) }; - rw_data.offset_parent_response = process_offset_parent_query(node, &mut root_flow); + rw_data.offset_parent_response = process_offset_parent_query(node, root_flow); }, ReflowQueryType::MarginStyleQuery(node) => { let node = unsafe { ServoLayoutNode::new(&node) };