mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
style: Bring back the optimization to avoid traversing XBL subtrees that will likely change.
We need to get rid of BindingHolder to handle properly the case of an invalid binding URL. Bug: 1420496 Reviewed-by: heycam MozReview-Commit-ID: 3sIGtcVOt0r
This commit is contained in:
parent
0df51515c3
commit
d61c9a8d31
2 changed files with 19 additions and 3 deletions
|
@ -296,7 +296,7 @@ impl ComputedValuesInner {
|
|||
|
||||
#[allow(non_snake_case)]
|
||||
pub fn has_moz_binding(&self) -> bool {
|
||||
!self.get_box().gecko.mBinding.mPtr.mRawPtr.is_null()
|
||||
!self.get_box().gecko.mBinding.mRawPtr.is_null()
|
||||
}
|
||||
|
||||
// FIXME(bholley): Implement this properly.
|
||||
|
@ -3290,7 +3290,7 @@ fn static_assert() {
|
|||
longhands::scroll_snap_coordinate::computed_value::T(vec)
|
||||
}
|
||||
|
||||
${impl_css_url('_moz_binding', 'mBinding.mPtr')}
|
||||
${impl_css_url('_moz_binding', 'mBinding')}
|
||||
|
||||
${impl_transition_time_value('delay', 'Delay')}
|
||||
${impl_transition_time_value('duration', 'Duration')}
|
||||
|
|
|
@ -255,6 +255,7 @@ pub trait DomTraversal<E: TElement> : Sync {
|
|||
context: &mut StyleContext<E>,
|
||||
parent: E,
|
||||
parent_data: &ElementData,
|
||||
is_initial_style: bool,
|
||||
) -> bool {
|
||||
debug_assert!(parent.has_current_styles_for_traversal(
|
||||
parent_data,
|
||||
|
@ -267,6 +268,21 @@ pub trait DomTraversal<E: TElement> : Sync {
|
|||
return true;
|
||||
}
|
||||
|
||||
// Gecko-only XBL handling.
|
||||
//
|
||||
// When we apply the XBL binding during frame construction, we restyle
|
||||
// the whole subtree again if the binding is valid, so assuming it's
|
||||
// likely to load valid bindings, we avoid wasted work here, which may
|
||||
// be a very big perf hit when elements with bindings are nested
|
||||
// heavily.
|
||||
if cfg!(feature = "gecko") &&
|
||||
is_initial_style &&
|
||||
parent_data.styles.primary().has_moz_binding()
|
||||
{
|
||||
debug!("Parent {:?} has XBL binding, deferring traversal", parent);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -476,7 +492,7 @@ where
|
|||
|
||||
traverse_children =
|
||||
traverse_children &&
|
||||
!traversal.should_cull_subtree(context, element, &data);
|
||||
!traversal.should_cull_subtree(context, element, &data, is_initial_style);
|
||||
|
||||
// Examine our children, and enqueue the appropriate ones for traversal.
|
||||
if traverse_children {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue