mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
Auto merge of #19380 - emilio:my-existence-seems-a-continuous-fight-with-xbl, r=heycam
style: Bring back the optimization to avoid traversing XBL subtrees that will likely change. Bug: 1420496 Reviewed-by: heycam MozReview-Commit-ID: 3sIGtcVOt0r <!-- 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/19380) <!-- Reviewable:end -->
This commit is contained in:
commit
769b643c0f
3 changed files with 24 additions and 8 deletions
File diff suppressed because one or more lines are too long
|
@ -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