mirror of
https://github.com/servo/servo.git
synced 2025-07-22 23:03:42 +01:00
layout: Move overflow calculation to be a separate, sequential,
bottom-up pass. Right now, the only reason that overflow calculation works is that we rely on script inducing extra reflows that are sent for display. This was preventing #10021 from landing. This change regresses layout performance by about 1% in my tests. Fixes #7797 properly.
This commit is contained in:
parent
2d6283c64b
commit
5ea8c34276
7 changed files with 60 additions and 17 deletions
|
@ -12,7 +12,7 @@ use app_units::Au;
|
|||
use azure::azure::AzColor;
|
||||
use canvas_traits::CanvasMsg;
|
||||
use construct::ConstructionResult;
|
||||
use context::{SharedLayoutContext, heap_size_of_local_context};
|
||||
use context::{LayoutContext, SharedLayoutContext, heap_size_of_local_context};
|
||||
use display_list_builder::ToGfxColor;
|
||||
use euclid::Matrix4;
|
||||
use euclid::point::Point2D;
|
||||
|
@ -1336,14 +1336,23 @@ impl LayoutThread {
|
|||
Some(ref mut parallel) => {
|
||||
// Parallel mode.
|
||||
LayoutThread::solve_constraints_parallel(parallel,
|
||||
&mut root_flow,
|
||||
profiler_metadata,
|
||||
self.time_profiler_chan.clone(),
|
||||
&*layout_context);
|
||||
&mut root_flow,
|
||||
profiler_metadata,
|
||||
self.time_profiler_chan.clone(),
|
||||
&*layout_context);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
profile(time::ProfilerCategory::LayoutStoreOverflow,
|
||||
self.profiler_metadata(),
|
||||
self.time_profiler_chan.clone(),
|
||||
|| {
|
||||
let layout_context = LayoutContext::new(&*layout_context);
|
||||
sequential::store_overflow(&layout_context,
|
||||
flow_ref::deref_mut(&mut root_flow) as &mut Flow);
|
||||
});
|
||||
|
||||
self.perform_post_main_layout_passes(data, rw_data, layout_context);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue