aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout/parallel.rs
diff options
context:
space:
mode:
authorbors-servo <metajack+bors@gmail.com>2015-07-06 08:29:17 -0600
committerbors-servo <metajack+bors@gmail.com>2015-07-06 08:29:17 -0600
commita3821bf24094bf5bb2a9553e66b69da3b6430aa5 (patch)
treea032c77c25aaafb41899de6755326471b451e053 /components/layout/parallel.rs
parent6386addb01dfec4bda38f99e534516ddf5ff77aa (diff)
parent24730f1078a216c3d32d3efc9c6a7c01b82a1706 (diff)
downloadservo-a3821bf24094bf5bb2a9553e66b69da3b6430aa5.tar.gz
servo-a3821bf24094bf5bb2a9553e66b69da3b6430aa5.zip
Auto merge of #6547 - Ms2ger:workqueue-reference, r=pcwalton
Borrow the QueueData for WorkQueue::run. This allows us to get rid of the raw pointers and unsafe dereferencing in the parallel layout implementation. <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/6547) <!-- Reviewable:end -->
Diffstat (limited to 'components/layout/parallel.rs')
-rw-r--r--components/layout/parallel.rs68
1 files changed, 34 insertions, 34 deletions
diff --git a/components/layout/parallel.rs b/components/layout/parallel.rs
index 65bf7fb0eae..748f84d1a0d 100644
--- a/components/layout/parallel.rs
+++ b/components/layout/parallel.rs
@@ -8,7 +8,7 @@
#![allow(unsafe_code)]
-use context::{LayoutContext, SharedLayoutContextWrapper, SharedLayoutContext};
+use context::{LayoutContext, SharedLayoutContext};
use flow::{Flow, MutableFlowUtils, PreorderFlowTraversal, PostorderFlowTraversal};
use flow;
use flow_ref::FlowRef;
@@ -88,29 +88,29 @@ pub type UnsafeFlowList = (Box<Vec<UnsafeLayoutNode>>, usize);
pub type ChunkedDomTraversalFunction =
extern "Rust" fn(UnsafeLayoutNodeList,
- &mut WorkerProxy<SharedLayoutContextWrapper,UnsafeLayoutNodeList>);
+ &mut WorkerProxy<SharedLayoutContext,UnsafeLayoutNodeList>);
pub type DomTraversalFunction =
extern "Rust" fn(UnsafeLayoutNode,
- &mut WorkerProxy<SharedLayoutContextWrapper,UnsafeLayoutNodeList>);
+ &mut WorkerProxy<SharedLayoutContext,UnsafeLayoutNodeList>);
pub type ChunkedFlowTraversalFunction =
- extern "Rust" fn(UnsafeFlowList, &mut WorkerProxy<SharedLayoutContextWrapper,UnsafeFlowList>);
+ extern "Rust" fn(UnsafeFlowList, &mut WorkerProxy<SharedLayoutContext,UnsafeFlowList>);
pub type FlowTraversalFunction =
- extern "Rust" fn(UnsafeFlow, &mut WorkerProxy<SharedLayoutContextWrapper,UnsafeFlowList>);
+ extern "Rust" fn(UnsafeFlow, &mut WorkerProxy<SharedLayoutContext,UnsafeFlowList>);
/// A parallel top-down DOM traversal.
pub trait ParallelPreorderDomTraversal : PreorderDomTraversal {
fn run_parallel(&self,
nodes: UnsafeLayoutNodeList,
- proxy: &mut WorkerProxy<SharedLayoutContextWrapper,UnsafeLayoutNodeList>);
+ proxy: &mut WorkerProxy<SharedLayoutContext,UnsafeLayoutNodeList>);
#[inline(always)]
fn run_parallel_helper(
&self,
unsafe_nodes: UnsafeLayoutNodeList,
- proxy: &mut WorkerProxy<SharedLayoutContextWrapper,UnsafeLayoutNodeList>,
+ proxy: &mut WorkerProxy<SharedLayoutContext,UnsafeLayoutNodeList>,
top_down_func: ChunkedDomTraversalFunction,
bottom_up_func: DomTraversalFunction) {
let mut discovered_child_nodes = Vec::new();
@@ -169,7 +169,7 @@ trait ParallelPostorderDomTraversal : PostorderDomTraversal {
/// fetch-and-subtract the parent's children count.
fn run_parallel(&self,
mut unsafe_node: UnsafeLayoutNode,
- proxy: &mut WorkerProxy<SharedLayoutContextWrapper,UnsafeLayoutNodeList>) {
+ proxy: &mut WorkerProxy<SharedLayoutContext,UnsafeLayoutNodeList>) {
loop {
// Get a real layout node.
let node: LayoutNode = unsafe {
@@ -179,7 +179,7 @@ trait ParallelPostorderDomTraversal : PostorderDomTraversal {
// Perform the appropriate operation.
self.process(node);
- let shared_layout_context = unsafe { &*(proxy.user_data().0) };
+ let shared_layout_context = proxy.user_data();
let layout_context = LayoutContext::new(shared_layout_context);
let parent = match node.layout_parent_node(layout_context.shared) {
@@ -239,7 +239,7 @@ trait ParallelPostorderFlowTraversal : PostorderFlowTraversal {
/// fetch-and-subtract the parent's children count.
fn run_parallel(&self,
mut unsafe_flow: UnsafeFlow,
- _: &mut WorkerProxy<SharedLayoutContextWrapper,UnsafeFlowList>) {
+ _: &mut WorkerProxy<SharedLayoutContext,UnsafeFlowList>) {
loop {
unsafe {
// Get a real flow.
@@ -285,14 +285,14 @@ trait ParallelPostorderFlowTraversal : PostorderFlowTraversal {
trait ParallelPreorderFlowTraversal : PreorderFlowTraversal {
fn run_parallel(&self,
unsafe_flows: UnsafeFlowList,
- proxy: &mut WorkerProxy<SharedLayoutContextWrapper,UnsafeFlowList>);
+ proxy: &mut WorkerProxy<SharedLayoutContext,UnsafeFlowList>);
fn should_record_thread_ids(&self) -> bool;
#[inline(always)]
fn run_parallel_helper(&self,
unsafe_flows: UnsafeFlowList,
- proxy: &mut WorkerProxy<SharedLayoutContextWrapper,UnsafeFlowList>,
+ proxy: &mut WorkerProxy<SharedLayoutContext,UnsafeFlowList>,
top_down_func: ChunkedFlowTraversalFunction,
bottom_up_func: FlowTraversalFunction) {
let mut discovered_child_flows = Vec::new();
@@ -338,7 +338,7 @@ impl<'a> ParallelPostorderFlowTraversal for BubbleISizes<'a> {}
impl<'a> ParallelPreorderFlowTraversal for AssignISizes<'a> {
fn run_parallel(&self,
unsafe_flows: UnsafeFlowList,
- proxy: &mut WorkerProxy<SharedLayoutContextWrapper,UnsafeFlowList>) {
+ proxy: &mut WorkerProxy<SharedLayoutContext,UnsafeFlowList>) {
self.run_parallel_helper(unsafe_flows,
proxy,
assign_inline_sizes,
@@ -355,7 +355,7 @@ impl<'a> ParallelPostorderFlowTraversal for AssignBSizesAndStoreOverflow<'a> {}
impl<'a> ParallelPreorderFlowTraversal for ComputeAbsolutePositions<'a> {
fn run_parallel(&self,
unsafe_flows: UnsafeFlowList,
- proxy: &mut WorkerProxy<SharedLayoutContextWrapper, UnsafeFlowList>) {
+ proxy: &mut WorkerProxy<SharedLayoutContext, UnsafeFlowList>) {
self.run_parallel_helper(unsafe_flows,
proxy,
compute_absolute_positions,
@@ -374,14 +374,14 @@ impl<'a> ParallelPostorderDomTraversal for ConstructFlows<'a> {}
impl <'a> ParallelPreorderDomTraversal for RecalcStyleForNode<'a> {
fn run_parallel(&self,
unsafe_nodes: UnsafeLayoutNodeList,
- proxy: &mut WorkerProxy<SharedLayoutContextWrapper, UnsafeLayoutNodeList>) {
+ proxy: &mut WorkerProxy<SharedLayoutContext, UnsafeLayoutNodeList>) {
self.run_parallel_helper(unsafe_nodes, proxy, recalc_style, construct_flows)
}
}
fn recalc_style(unsafe_nodes: UnsafeLayoutNodeList,
- proxy: &mut WorkerProxy<SharedLayoutContextWrapper, UnsafeLayoutNodeList>) {
- let shared_layout_context = unsafe { &*(proxy.user_data().0) };
+ proxy: &mut WorkerProxy<SharedLayoutContext, UnsafeLayoutNodeList>) {
+ let shared_layout_context = proxy.user_data();
let layout_context = LayoutContext::new(shared_layout_context);
let recalc_style_for_node_traversal = RecalcStyleForNode {
layout_context: &layout_context,
@@ -390,8 +390,8 @@ fn recalc_style(unsafe_nodes: UnsafeLayoutNodeList,
}
fn construct_flows(unsafe_node: UnsafeLayoutNode,
- proxy: &mut WorkerProxy<SharedLayoutContextWrapper, UnsafeLayoutNodeList>) {
- let shared_layout_context = unsafe { &*(proxy.user_data().0) };
+ proxy: &mut WorkerProxy<SharedLayoutContext, UnsafeLayoutNodeList>) {
+ let shared_layout_context = proxy.user_data();
let layout_context = LayoutContext::new(shared_layout_context);
let construct_flows_traversal = ConstructFlows {
layout_context: &layout_context,
@@ -400,8 +400,8 @@ fn construct_flows(unsafe_node: UnsafeLayoutNode,
}
fn assign_inline_sizes(unsafe_flows: UnsafeFlowList,
- proxy: &mut WorkerProxy<SharedLayoutContextWrapper,UnsafeFlowList>) {
- let shared_layout_context = unsafe { &*(proxy.user_data().0) };
+ proxy: &mut WorkerProxy<SharedLayoutContext,UnsafeFlowList>) {
+ let shared_layout_context = proxy.user_data();
let layout_context = LayoutContext::new(shared_layout_context);
let assign_inline_sizes_traversal = AssignISizes {
layout_context: &layout_context,
@@ -411,8 +411,8 @@ fn assign_inline_sizes(unsafe_flows: UnsafeFlowList,
fn assign_block_sizes_and_store_overflow(
unsafe_flow: UnsafeFlow,
- proxy: &mut WorkerProxy<SharedLayoutContextWrapper,UnsafeFlowList>) {
- let shared_layout_context = unsafe { &*(proxy.user_data().0) };
+ proxy: &mut WorkerProxy<SharedLayoutContext,UnsafeFlowList>) {
+ let shared_layout_context = proxy.user_data();
let layout_context = LayoutContext::new(shared_layout_context);
let assign_block_sizes_traversal = AssignBSizesAndStoreOverflow {
layout_context: &layout_context,
@@ -422,8 +422,8 @@ fn assign_block_sizes_and_store_overflow(
fn compute_absolute_positions(
unsafe_flows: UnsafeFlowList,
- proxy: &mut WorkerProxy<SharedLayoutContextWrapper, UnsafeFlowList>) {
- let shared_layout_context = unsafe { &*(proxy.user_data().0) };
+ proxy: &mut WorkerProxy<SharedLayoutContext, UnsafeFlowList>) {
+ let shared_layout_context = proxy.user_data();
let layout_context = LayoutContext::new(shared_layout_context);
let compute_absolute_positions_traversal = ComputeAbsolutePositions {
layout_context: &layout_context,
@@ -432,8 +432,8 @@ fn compute_absolute_positions(
}
fn build_display_list(unsafe_flow: UnsafeFlow,
- proxy: &mut WorkerProxy<SharedLayoutContextWrapper, UnsafeFlowList>) {
- let shared_layout_context = unsafe { &*(proxy.user_data().0) };
+ proxy: &mut WorkerProxy<SharedLayoutContext, UnsafeFlowList>) {
+ let shared_layout_context = proxy.user_data();
let layout_context = LayoutContext::new(shared_layout_context);
let build_display_list_traversal = BuildDisplayList {
@@ -444,20 +444,20 @@ fn build_display_list(unsafe_flow: UnsafeFlow,
}
fn run_queue_with_custom_work_data_type<To,F>(
- queue: &mut WorkQueue<SharedLayoutContextWrapper, WorkQueueData>,
+ queue: &mut WorkQueue<SharedLayoutContext, WorkQueueData>,
callback: F,
shared_layout_context: &SharedLayoutContext)
- where To: 'static + Send, F: FnOnce(&mut WorkQueue<SharedLayoutContextWrapper,To>) {
- let queue: &mut WorkQueue<SharedLayoutContextWrapper,To> = unsafe {
+ where To: 'static + Send, F: FnOnce(&mut WorkQueue<SharedLayoutContext,To>) {
+ let queue: &mut WorkQueue<SharedLayoutContext,To> = unsafe {
mem::transmute(queue)
};
callback(queue);
- queue.run(SharedLayoutContextWrapper(shared_layout_context as *const _));
+ queue.run(shared_layout_context);
}
pub fn traverse_dom_preorder(root: LayoutNode,
shared_layout_context: &SharedLayoutContext,
- queue: &mut WorkQueue<SharedLayoutContextWrapper, WorkQueueData>) {
+ queue: &mut WorkQueue<SharedLayoutContext, WorkQueueData>) {
run_queue_with_custom_work_data_type(queue, |queue| {
queue.push(WorkUnit {
fun: recalc_style,
@@ -471,7 +471,7 @@ pub fn traverse_flow_tree_preorder(
profiler_metadata: ProfilerMetadata,
time_profiler_chan: time::ProfilerChan,
shared_layout_context: &SharedLayoutContext,
- queue: &mut WorkQueue<SharedLayoutContextWrapper, WorkQueueData>) {
+ queue: &mut WorkQueue<SharedLayoutContext, WorkQueueData>) {
if opts::get().bubble_inline_sizes_separately {
let layout_context = LayoutContext::new(shared_layout_context);
let bubble_inline_sizes = BubbleISizes { layout_context: &layout_context };
@@ -494,7 +494,7 @@ pub fn build_display_list_for_subtree(
profiler_metadata: ProfilerMetadata,
time_profiler_chan: time::ProfilerChan,
shared_layout_context: &SharedLayoutContext,
- queue: &mut WorkQueue<SharedLayoutContextWrapper, WorkQueueData>) {
+ queue: &mut WorkQueue<SharedLayoutContext, WorkQueueData>) {
run_queue_with_custom_work_data_type(queue, |queue| {
profile(time::ProfilerCategory::LayoutParallelWarmup, profiler_metadata,
time_profiler_chan, || {