mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
Auto merge of #13873 - mrobinson:remove-nesting, r=glennw
Remove stacking context nesting from WebRender display construction <!-- Please describe your changes on the following line: --> --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [ ] These changes fix #__ (github issue number if applicable). <!-- Either: --> - [ ] There are tests for these changes OR - [x] These changes do not require tests because they should not produce any behavior changes. <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/13873) <!-- Reviewable:end -->
This commit is contained in:
commit
d5e412b3f1
22 changed files with 663 additions and 507 deletions
|
@ -9,7 +9,7 @@
|
|||
|
||||
use app_units::Au;
|
||||
use azure::azure_hl::Color;
|
||||
use euclid::{Matrix4D, Point2D, Rect, Size2D};
|
||||
use euclid::{Point2D, Rect, Size2D};
|
||||
use gfx::display_list::{BorderRadii, BoxShadowClipMode, ClippingRegion};
|
||||
use gfx::display_list::{DisplayItem, DisplayList, DisplayListTraversal};
|
||||
use gfx::display_list::{GradientStop, StackingContext, StackingContextType};
|
||||
|
@ -25,7 +25,6 @@ trait WebRenderStackingContextConverter {
|
|||
api: &mut webrender_traits::RenderApi,
|
||||
pipeline_id: webrender_traits::PipelineId,
|
||||
epoch: webrender_traits::Epoch,
|
||||
scroll_layer_id: Option<webrender_traits::ScrollLayerId>,
|
||||
frame_builder: &mut WebRenderFrameBuilder)
|
||||
-> webrender_traits::StackingContextId;
|
||||
|
||||
|
@ -34,7 +33,6 @@ trait WebRenderStackingContextConverter {
|
|||
api: &mut webrender_traits::RenderApi,
|
||||
pipeline_id: webrender_traits::PipelineId,
|
||||
epoch: webrender_traits::Epoch,
|
||||
scroll_layer_id: Option<webrender_traits::ScrollLayerId>,
|
||||
builder: &mut webrender_traits::DisplayListBuilder,
|
||||
frame_builder: &mut WebRenderFrameBuilder,
|
||||
force_positioned_stacking_level: bool);
|
||||
|
@ -45,7 +43,6 @@ pub trait WebRenderDisplayListConverter {
|
|||
api: &mut webrender_traits::RenderApi,
|
||||
pipeline_id: webrender_traits::PipelineId,
|
||||
epoch: webrender_traits::Epoch,
|
||||
scroll_layer_id: Option<webrender_traits::ScrollLayerId>,
|
||||
frame_builder: &mut WebRenderFrameBuilder)
|
||||
-> webrender_traits::StackingContextId;
|
||||
}
|
||||
|
@ -253,7 +250,6 @@ impl WebRenderStackingContextConverter for StackingContext {
|
|||
api: &mut webrender_traits::RenderApi,
|
||||
pipeline_id: webrender_traits::PipelineId,
|
||||
epoch: webrender_traits::Epoch,
|
||||
scroll_layer_id: Option<webrender_traits::ScrollLayerId>,
|
||||
builder: &mut webrender_traits::DisplayListBuilder,
|
||||
frame_builder: &mut WebRenderFrameBuilder,
|
||||
_force_positioned_stacking_level: bool) {
|
||||
|
@ -263,18 +259,11 @@ impl WebRenderStackingContextConverter for StackingContext {
|
|||
let stacking_context = &stacking_context_item.stacking_context;
|
||||
debug_assert!(stacking_context.context_type == StackingContextType::Real);
|
||||
|
||||
let scroll_layer_id_for_children = if self.overflow_scroll_id.is_some() {
|
||||
scroll_layer_id
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
let stacking_context_id =
|
||||
stacking_context.convert_to_webrender(traversal,
|
||||
api,
|
||||
pipeline_id,
|
||||
epoch,
|
||||
scroll_layer_id_for_children,
|
||||
frame_builder);
|
||||
builder.push_stacking_context(stacking_context_id);
|
||||
|
||||
|
@ -290,7 +279,6 @@ impl WebRenderStackingContextConverter for StackingContext {
|
|||
api: &mut webrender_traits::RenderApi,
|
||||
pipeline_id: webrender_traits::PipelineId,
|
||||
epoch: webrender_traits::Epoch,
|
||||
scroll_layer_id: Option<webrender_traits::ScrollLayerId>,
|
||||
frame_builder: &mut WebRenderFrameBuilder)
|
||||
-> webrender_traits::StackingContextId {
|
||||
let webrender_scroll_policy = match self.scroll_policy {
|
||||
|
@ -300,10 +288,11 @@ impl WebRenderStackingContextConverter for StackingContext {
|
|||
|
||||
let webrender_stacking_context_id = self.id.convert_to_webrender();
|
||||
|
||||
let outer_overflow = if self.overflow_scroll_id.is_none() {
|
||||
self.overflow.to_rectf()
|
||||
let scroll_layer_id = if self.overflow_scroll_id.is_some() ||
|
||||
self.id == StackingContextId::root() {
|
||||
Some(frame_builder.next_scroll_layer_id())
|
||||
} else {
|
||||
Rect::new(Point2D::zero(), self.bounds.size).to_rectf()
|
||||
None
|
||||
};
|
||||
|
||||
let mut sc =
|
||||
|
@ -311,7 +300,7 @@ impl WebRenderStackingContextConverter for StackingContext {
|
|||
scroll_layer_id,
|
||||
webrender_scroll_policy,
|
||||
self.bounds.to_rectf(),
|
||||
outer_overflow,
|
||||
self.overflow.to_rectf(),
|
||||
self.z_index,
|
||||
&self.transform,
|
||||
&self.perspective,
|
||||
|
@ -321,47 +310,13 @@ impl WebRenderStackingContextConverter for StackingContext {
|
|||
&mut frame_builder.auxiliary_lists_builder);
|
||||
|
||||
let mut builder = webrender_traits::DisplayListBuilder::new();
|
||||
|
||||
if let Some(inner_stacking_context_id) = self.overflow_scroll_id {
|
||||
let inner_webrender_stacking_context_id =
|
||||
inner_stacking_context_id.convert_to_webrender();
|
||||
let mut inner_sc =
|
||||
webrender_traits::StackingContext::new(inner_webrender_stacking_context_id,
|
||||
Some(frame_builder.next_scroll_layer_id()),
|
||||
webrender_scroll_policy,
|
||||
self.overflow.to_rectf(),
|
||||
self.overflow.to_rectf(),
|
||||
self.z_index,
|
||||
&Matrix4D::identity(),
|
||||
&Matrix4D::identity(),
|
||||
false,
|
||||
webrender_traits::MixBlendMode::Normal,
|
||||
Vec::new(),
|
||||
&mut frame_builder.auxiliary_lists_builder);
|
||||
let mut inner_builder = webrender_traits::DisplayListBuilder::new();
|
||||
self.convert_children_to_webrender(traversal,
|
||||
api,
|
||||
pipeline_id,
|
||||
epoch,
|
||||
None,
|
||||
&mut inner_builder,
|
||||
frame_builder,
|
||||
false);
|
||||
|
||||
frame_builder.add_display_list(api, inner_builder.finalize(), &mut inner_sc);
|
||||
let new_id = frame_builder.add_stacking_context(api, pipeline_id, inner_sc);
|
||||
builder.push_stacking_context(new_id);
|
||||
} else {
|
||||
self.convert_children_to_webrender(traversal,
|
||||
api,
|
||||
pipeline_id,
|
||||
epoch,
|
||||
scroll_layer_id,
|
||||
&mut builder,
|
||||
frame_builder,
|
||||
false);
|
||||
}
|
||||
|
||||
self.convert_children_to_webrender(traversal,
|
||||
api,
|
||||
pipeline_id,
|
||||
epoch,
|
||||
&mut builder,
|
||||
frame_builder,
|
||||
false);
|
||||
|
||||
frame_builder.add_display_list(api, builder.finalize(), &mut sc);
|
||||
frame_builder.add_stacking_context(api, pipeline_id, sc)
|
||||
|
@ -373,7 +328,6 @@ impl WebRenderDisplayListConverter for DisplayList {
|
|||
api: &mut webrender_traits::RenderApi,
|
||||
pipeline_id: webrender_traits::PipelineId,
|
||||
epoch: webrender_traits::Epoch,
|
||||
scroll_layer_id: Option<webrender_traits::ScrollLayerId>,
|
||||
frame_builder: &mut WebRenderFrameBuilder)
|
||||
-> webrender_traits::StackingContextId {
|
||||
let mut traversal = DisplayListTraversal::new(self);
|
||||
|
@ -385,7 +339,6 @@ impl WebRenderDisplayListConverter for DisplayList {
|
|||
api,
|
||||
pipeline_id,
|
||||
epoch,
|
||||
scroll_layer_id,
|
||||
frame_builder)
|
||||
}
|
||||
_ => unreachable!("DisplayList did not start with StackingContext."),
|
||||
|
|
|
@ -981,12 +981,10 @@ impl LayoutThread {
|
|||
|
||||
// TODO(gw) For now only create a root scrolling layer!
|
||||
let mut frame_builder = WebRenderFrameBuilder::new(pipeline_id);
|
||||
let root_scroll_layer_id = frame_builder.next_scroll_layer_id();
|
||||
let sc_id = rw_data.display_list.as_ref().unwrap().convert_to_webrender(
|
||||
&mut self.webrender_api,
|
||||
pipeline_id,
|
||||
epoch,
|
||||
Some(root_scroll_layer_id),
|
||||
&mut frame_builder);
|
||||
let root_background_color = get_root_flow_background_color(layout_root);
|
||||
let root_background_color =
|
||||
|
|
44
components/servo/Cargo.lock
generated
44
components/servo/Cargo.lock
generated
|
@ -46,8 +46,8 @@ dependencies = [
|
|||
"util 0.0.1",
|
||||
"util_tests 0.0.1",
|
||||
"webdriver_server 0.0.1",
|
||||
"webrender 0.6.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.6.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender 0.7.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.7.0 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -233,7 +233,7 @@ dependencies = [
|
|||
"offscreen_gl_context 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"plugins 0.0.1",
|
||||
"util 0.0.1",
|
||||
"webrender_traits 0.6.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.7.0 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -250,7 +250,7 @@ dependencies = [
|
|||
"plugins 0.0.1",
|
||||
"serde 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_derive 0.8.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.6.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.7.0 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -338,8 +338,8 @@ dependencies = [
|
|||
"time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"webrender 0.6.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.6.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender 0.7.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.7.0 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -370,7 +370,7 @@ dependencies = [
|
|||
"style_traits 0.0.1",
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"webrender_traits 0.6.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.7.0 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -815,7 +815,7 @@ dependencies = [
|
|||
"unicode-script 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"webrender_traits 0.6.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.7.0 (git+https://github.com/servo/webrender)",
|
||||
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"xi-unicode 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
@ -1166,7 +1166,7 @@ dependencies = [
|
|||
"unicode-script 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"webrender_traits 0.6.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.7.0 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -1205,7 +1205,7 @@ dependencies = [
|
|||
"style 0.0.1",
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"webrender_traits 0.6.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.7.0 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -1219,7 +1219,7 @@ dependencies = [
|
|||
"profile_traits 0.0.1",
|
||||
"script_traits 0.0.1",
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.6.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.7.0 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -1388,7 +1388,7 @@ dependencies = [
|
|||
"plugins 0.0.1",
|
||||
"serde 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_derive 0.8.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.6.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.7.0 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -1426,7 +1426,7 @@ dependencies = [
|
|||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"uuid 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.6.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.7.0 (git+https://github.com/servo/webrender)",
|
||||
"websocket 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
|
@ -1484,7 +1484,7 @@ dependencies = [
|
|||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"uuid 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.6.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.7.0 (git+https://github.com/servo/webrender)",
|
||||
"websocket 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
|
@ -1989,7 +1989,7 @@ dependencies = [
|
|||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"uuid 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.6.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.7.0 (git+https://github.com/servo/webrender)",
|
||||
"websocket 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"xml5ever 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
@ -2660,8 +2660,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "webrender"
|
||||
version = "0.6.0"
|
||||
source = "git+https://github.com/servo/webrender#dce9d1ab8607f6b39cbcebad1d3e9272ad8cd75e"
|
||||
version = "0.7.0"
|
||||
source = "git+https://github.com/servo/webrender#a3adb113f95b682ae3176c4000bdcaad1e7cb940"
|
||||
dependencies = [
|
||||
"app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"bincode 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -2680,13 +2680,13 @@ dependencies = [
|
|||
"offscreen_gl_context 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rayon 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.6.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.7.0 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "webrender_traits"
|
||||
version = "0.6.0"
|
||||
source = "git+https://github.com/servo/webrender#dce9d1ab8607f6b39cbcebad1d3e9272ad8cd75e"
|
||||
version = "0.7.0"
|
||||
source = "git+https://github.com/servo/webrender#a3adb113f95b682ae3176c4000bdcaad1e7cb940"
|
||||
dependencies = [
|
||||
"app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -3002,8 +3002,8 @@ dependencies = [
|
|||
"checksum wayland-sys 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9633f7fe5de56544215f82eaf1b76bf1b584becf7f08b58cbef4c2c7d10e803a"
|
||||
"checksum wayland-window 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "309b69d3a863c9c21422d889fb7d98cf02f8a2ca054960a49243ce5b67ad884c"
|
||||
"checksum webdriver 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee2d66e90672022ced375134329c57be4db228b19b120b97b744a469c381be06"
|
||||
"checksum webrender 0.6.0 (git+https://github.com/servo/webrender)" = "<none>"
|
||||
"checksum webrender_traits 0.6.0 (git+https://github.com/servo/webrender)" = "<none>"
|
||||
"checksum webrender 0.7.0 (git+https://github.com/servo/webrender)" = "<none>"
|
||||
"checksum webrender_traits 0.7.0 (git+https://github.com/servo/webrender)" = "<none>"
|
||||
"checksum websocket 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4a1a6ea5ed0367f32eb3d94dcc58859ef4294b5f75ba983dbf56ac314af45d"
|
||||
"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
|
||||
"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue