diff --git a/servo/components/style/dom.rs b/servo/components/style/dom.rs index d2ed5ae3d99e..7df9c850fd42 100644 --- a/servo/components/style/dom.rs +++ b/servo/components/style/dom.rs @@ -462,6 +462,28 @@ pub trait TElement : Eq + PartialEq + Debug + Hash + Sized + Copy + Clone + data.has_styles() && !data.restyle.hint.has_non_animation_invalidations() } + /// Returns whether the element's styles are up-to-date after traversal + /// (i.e. in post traversal). + fn has_current_styles(&self, data: &ElementData) -> bool { + if self.has_snapshot() && !self.handled_snapshot() { + return false; + } + + data.has_styles() && + // TODO(hiro): When an animating element moved into subtree of + // contenteditable element, there remains animation restyle hints in + // post traversal. It's generally harmless since the hints will be + // processed in a next styling but ideally it should be processed soon. + // + // Without this, we get failures in: + // layout/style/crashtests/1383319.html + // layout/style/crashtests/1383001.html + // + // https://bugzilla.mozilla.org/show_bug.cgi?id=1389675 tracks fixing + // this. + !data.restyle.hint.has_non_animation_invalidations() + } + /// Flag that this element has a descendant for style processing. /// /// Only safe to call with exclusive access to the element. diff --git a/servo/components/style/gecko/generated/bindings.rs b/servo/components/style/gecko/generated/bindings.rs index 86d0d7638997..e9e012a3a892 100644 --- a/servo/components/style/gecko/generated/bindings.rs +++ b/servo/components/style/gecko/generated/bindings.rs @@ -2815,13 +2815,11 @@ extern "C" { } extern "C" { pub fn Servo_TakeChangeHint(element: RawGeckoElementBorrowed, - flags: ServoTraversalFlags, was_restyled: *mut bool) -> nsChangeHint; } extern "C" { pub fn Servo_ResolveStyle(element: RawGeckoElementBorrowed, - set: RawServoStyleSetBorrowed, - flags: ServoTraversalFlags) + set: RawServoStyleSetBorrowed) -> ServoStyleContextStrong; } extern "C" { diff --git a/servo/components/style/gecko/generated/structs_debug.rs b/servo/components/style/gecko/generated/structs_debug.rs index 1a871409077d..ead3685edd3a 100644 --- a/servo/components/style/gecko/generated/structs_debug.rs +++ b/servo/components/style/gecko/generated/structs_debug.rs @@ -4944,6 +4944,9 @@ pub mod root { pub const ServoTraversalFlags_ParallelTraversal: root::mozilla::ServoTraversalFlags = 128; + pub const ServoTraversalFlags_FlushThrottledAnimations: + root::mozilla::ServoTraversalFlags = + 256; pub type ServoTraversalFlags = u32; #[repr(i32)] #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] @@ -6644,12 +6647,6 @@ pub mod root { Standard = 1, Layer = 2, } - #[repr(i32)] - #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] - pub enum EffectCompositor_AnimationRestyleType { - Throttled = 0, - Full = 1, - } #[repr(C)] #[derive(Debug)] pub struct EffectCompositor_AnimationStyleRuleProcessor { @@ -33560,7 +33557,7 @@ pub mod root { root::nsTArray ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_200547_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_200542_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -33916,7 +33913,7 @@ pub mod root { root::mozilla::binding_danger::TErrorResult ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_202364_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_202359_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -34077,7 +34074,7 @@ pub mod root { root::JS::DeletePolicy ) )); } #[test] - fn __bindgen_test_layout_iterator_open0_input_iterator_tag_UniquePtr_open1_JSErrorNotes_Note_DeletePolicy_open2_JSErrorNotes_Note_close2_close1_long__bindgen_ty_id_207983__bindgen_ty_id_207990_close0_instantiation() { + fn __bindgen_test_layout_iterator_open0_input_iterator_tag_UniquePtr_open1_JSErrorNotes_Note_DeletePolicy_open2_JSErrorNotes_Note_close2_close1_long__bindgen_ty_id_207978__bindgen_ty_id_207985_close0_instantiation() { assert_eq!(::std::mem::size_of::() , 1usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -34303,7 +34300,7 @@ pub mod root { root::RefPtr ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_210468_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_210463_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -34371,7 +34368,7 @@ pub mod root { root::nsCOMPtr ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_210770_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_210765_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -34483,7 +34480,7 @@ pub mod root { root::RefPtr ) )); } #[test] - fn __bindgen_test_layout_NotNull_open0__bindgen_ty_id_211312_close0_instantiation() { + fn __bindgen_test_layout_NotNull_open0__bindgen_ty_id_211307_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -34865,7 +34862,7 @@ pub mod root { root::RefPtr ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_211727_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_211722_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -34955,7 +34952,7 @@ pub mod root { ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_212126_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_212121_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -35056,7 +35053,7 @@ pub mod root { root::nsTArray<::nsstring::nsStringRepr> ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_213091_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_213085_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -35145,7 +35142,7 @@ pub mod root { root::RefPtr ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_213396_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_213390_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -35156,7 +35153,7 @@ pub mod root { root::nsTArray<*mut root::nsIContent> ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_213401_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_213395_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -35213,7 +35210,7 @@ pub mod root { root::RefPtr ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_213892_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_213886_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -35861,7 +35858,7 @@ pub mod root { root::nsCOMPtr ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_216753_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_216747_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -35940,7 +35937,7 @@ pub mod root { root::mozilla::DefaultDelete ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_223015_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_223009_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -35973,7 +35970,7 @@ pub mod root { root::RefPtr ) )); } #[test] - fn __bindgen_test_layout_Heap_open0__bindgen_ty_id_224176_close0_instantiation() { + fn __bindgen_test_layout_Heap_open0__bindgen_ty_id_224170_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -35984,7 +35981,7 @@ pub mod root { root::JS::Heap<*mut root::JSObject> ) )); } #[test] - fn __bindgen_test_layout_Heap_open0__bindgen_ty_id_224180_close0_instantiation() { + fn __bindgen_test_layout_Heap_open0__bindgen_ty_id_224174_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36006,7 +36003,7 @@ pub mod root { root::nsCOMPtr ) )); } #[test] - fn __bindgen_test_layout_TenuredHeap_open0__bindgen_ty_id_224187_close0_instantiation() { + fn __bindgen_test_layout_TenuredHeap_open0__bindgen_ty_id_224181_close0_instantiation() { assert_eq!(::std::mem::size_of::() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36085,7 +36082,7 @@ pub mod root { ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_225360_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_225354_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36280,7 +36277,7 @@ pub mod root { root::nsTArray ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_226808_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_226802_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36385,7 +36382,7 @@ pub mod root { root::nsRefPtrHashKey ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_229231_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_229225_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37086,7 +37083,7 @@ pub mod root { root::RefPtr ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_231784_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_231778_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37323,7 +37320,7 @@ pub mod root { root::nsCOMPtr ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_239592_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_239586_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37334,7 +37331,7 @@ pub mod root { root::nsTArray<*mut root::nsIContent> ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_239597_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_239591_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37422,7 +37419,7 @@ pub mod root { root::RefPtr ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_239710_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_239704_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37709,7 +37706,7 @@ pub mod root { ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_241296_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_241290_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37731,7 +37728,7 @@ pub mod root { root::RefPtr ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_241458_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_241452_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37742,7 +37739,7 @@ pub mod root { root::nsTArray<*mut root::nsIContent> ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_241463_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_241457_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37874,7 +37871,7 @@ pub mod root { root::nsTArray ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_243547_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_243541_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37885,7 +37882,7 @@ pub mod root { root::nsTArray<*mut root::mozilla::css::DocumentRule> ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_243555_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_243549_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( diff --git a/servo/components/style/gecko/generated/structs_release.rs b/servo/components/style/gecko/generated/structs_release.rs index d726fa9f8270..be299f97ee74 100644 --- a/servo/components/style/gecko/generated/structs_release.rs +++ b/servo/components/style/gecko/generated/structs_release.rs @@ -4832,6 +4832,9 @@ pub mod root { pub const ServoTraversalFlags_ParallelTraversal: root::mozilla::ServoTraversalFlags = 128; + pub const ServoTraversalFlags_FlushThrottledAnimations: + root::mozilla::ServoTraversalFlags = + 256; pub type ServoTraversalFlags = u32; #[repr(i32)] #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] @@ -6524,12 +6527,6 @@ pub mod root { Standard = 1, Layer = 2, } - #[repr(i32)] - #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] - pub enum EffectCompositor_AnimationRestyleType { - Throttled = 0, - Full = 1, - } #[repr(C)] #[derive(Debug)] pub struct EffectCompositor_AnimationStyleRuleProcessor { @@ -33068,7 +33065,7 @@ pub mod root { root::nsTArray ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_198186_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_198181_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -33424,7 +33421,7 @@ pub mod root { root::mozilla::binding_danger::TErrorResult ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_199969_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_199964_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -33585,7 +33582,7 @@ pub mod root { root::JS::DeletePolicy ) )); } #[test] - fn __bindgen_test_layout_iterator_open0_input_iterator_tag_UniquePtr_open1_JSErrorNotes_Note_DeletePolicy_open2_JSErrorNotes_Note_close2_close1_long__bindgen_ty_id_205560__bindgen_ty_id_205567_close0_instantiation() { + fn __bindgen_test_layout_iterator_open0_input_iterator_tag_UniquePtr_open1_JSErrorNotes_Note_DeletePolicy_open2_JSErrorNotes_Note_close2_close1_long__bindgen_ty_id_205555__bindgen_ty_id_205562_close0_instantiation() { assert_eq!(::std::mem::size_of::() , 1usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -33811,7 +33808,7 @@ pub mod root { root::RefPtr ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_208043_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_208038_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -33879,7 +33876,7 @@ pub mod root { root::nsCOMPtr ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_208345_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_208340_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -33991,7 +33988,7 @@ pub mod root { root::RefPtr ) )); } #[test] - fn __bindgen_test_layout_NotNull_open0__bindgen_ty_id_208887_close0_instantiation() { + fn __bindgen_test_layout_NotNull_open0__bindgen_ty_id_208882_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -34371,7 +34368,7 @@ pub mod root { root::RefPtr ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_209300_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_209295_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -34461,7 +34458,7 @@ pub mod root { ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_209697_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_209692_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -34562,7 +34559,7 @@ pub mod root { root::nsTArray<::nsstring::nsStringRepr> ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_210652_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_210646_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -34651,7 +34648,7 @@ pub mod root { root::RefPtr ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_210955_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_210949_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -34662,7 +34659,7 @@ pub mod root { root::nsTArray<*mut root::nsIContent> ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_210960_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_210954_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -34719,7 +34716,7 @@ pub mod root { root::RefPtr ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_211435_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_211429_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -35354,7 +35351,7 @@ pub mod root { root::nsCOMPtr ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_214266_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_214260_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -35433,7 +35430,7 @@ pub mod root { root::mozilla::DefaultDelete ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_220511_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_220505_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -35466,7 +35463,7 @@ pub mod root { root::RefPtr ) )); } #[test] - fn __bindgen_test_layout_Heap_open0__bindgen_ty_id_221672_close0_instantiation() { + fn __bindgen_test_layout_Heap_open0__bindgen_ty_id_221666_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -35477,7 +35474,7 @@ pub mod root { root::JS::Heap<*mut root::JSObject> ) )); } #[test] - fn __bindgen_test_layout_Heap_open0__bindgen_ty_id_221676_close0_instantiation() { + fn __bindgen_test_layout_Heap_open0__bindgen_ty_id_221670_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -35499,7 +35496,7 @@ pub mod root { root::nsCOMPtr ) )); } #[test] - fn __bindgen_test_layout_TenuredHeap_open0__bindgen_ty_id_221683_close0_instantiation() { + fn __bindgen_test_layout_TenuredHeap_open0__bindgen_ty_id_221677_close0_instantiation() { assert_eq!(::std::mem::size_of::() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -35578,7 +35575,7 @@ pub mod root { ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_222856_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_222850_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -35773,7 +35770,7 @@ pub mod root { root::nsTArray ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_224304_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_224298_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -35878,7 +35875,7 @@ pub mod root { root::nsRefPtrHashKey ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_226692_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_226686_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36579,7 +36576,7 @@ pub mod root { root::RefPtr ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_229169_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_229163_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36816,7 +36813,7 @@ pub mod root { root::nsCOMPtr ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_236977_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_236971_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36827,7 +36824,7 @@ pub mod root { root::nsTArray<*mut root::nsIContent> ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_236982_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_236976_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36915,7 +36912,7 @@ pub mod root { root::RefPtr ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_237095_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_237089_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37202,7 +37199,7 @@ pub mod root { ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_238675_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_238669_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37224,7 +37221,7 @@ pub mod root { root::RefPtr ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_238833_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_238827_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37235,7 +37232,7 @@ pub mod root { root::nsTArray<*mut root::nsIContent> ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_238838_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_238832_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37367,7 +37364,7 @@ pub mod root { root::nsTArray ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_240912_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_240906_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37378,7 +37375,7 @@ pub mod root { root::nsTArray<*mut root::mozilla::css::DocumentRule> ) )); } #[test] - fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_240918_close0_instantiation() { + fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_240912_close0_instantiation() { assert_eq!(::std::mem::size_of::>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( diff --git a/servo/components/style/traversal_flags.rs b/servo/components/style/traversal_flags.rs index 2e3e0f4c2ad3..473b576a4563 100644 --- a/servo/components/style/traversal_flags.rs +++ b/servo/components/style/traversal_flags.rs @@ -34,6 +34,10 @@ bitflags! { /// Allows the traversal to run in parallel if there are sufficient cores on /// the machine. const ParallelTraversal = 1 << 7, + /// Flush throttled animations. By default, we only update throttled animations + /// when we have other non-throttled work to do. With this flag, we + /// unconditionally tick and process them. + const FlushThrottledAnimations = 1 << 8, } } @@ -67,6 +71,7 @@ pub fn assert_traversal_flags_match() { ServoTraversalFlags_ClearAnimationOnlyDirtyDescendants => ClearAnimationOnlyDirtyDescendants, ServoTraversalFlags_ParallelTraversal => ParallelTraversal, + ServoTraversalFlags_FlushThrottledAnimations => FlushThrottledAnimations, } } diff --git a/servo/ports/geckolib/glue.rs b/servo/ports/geckolib/glue.rs index 0d0ff0db9bea..d20fce6fb139 100644 --- a/servo/ports/geckolib/glue.rs +++ b/servo/ports/geckolib/glue.rs @@ -278,13 +278,6 @@ pub extern "C" fn Servo_TraverseSubtree(root: RawGeckoElementBorrowed, } } - if traversal_flags.for_animation_only() { - debug!("Servo_TraverseSubtree complete (animation-only, aodd={})", - element.has_animation_only_dirty_descendants()); - return element.has_animation_only_dirty_descendants() || - element.borrow_data().unwrap().restyle.is_restyle(); - } - traverse_subtree(element, raw_data, traversal_flags, @@ -2782,10 +2775,8 @@ pub extern "C" fn Servo_NoteExplicitHints(element: RawGeckoElementBorrowed, #[no_mangle] pub extern "C" fn Servo_TakeChangeHint(element: RawGeckoElementBorrowed, - raw_flags: ServoTraversalFlags, was_restyled: *mut bool) -> nsChangeHint { - let flags = TraversalFlags::from_bits_truncate(raw_flags); let mut was_restyled = unsafe { was_restyled.as_mut().unwrap() }; let element = GeckoElement(element); @@ -2794,25 +2785,7 @@ pub extern "C" fn Servo_TakeChangeHint(element: RawGeckoElementBorrowed, *was_restyled = data.restyle.is_restyle(); let damage = data.restyle.damage; - if flags.for_animation_only() { - if !*was_restyled { - // Don't touch elements if the element was not restyled - // in throttled animation flush. - debug!("Skip post traversal for throttled animation flush {:?} restyle={:?}", - element, data.restyle); - return nsChangeHint(0); - } - // In the case where we call this function for post traversal for - // flusing throttled animations (i.e. without normal restyle - // traversal), we need to preserve restyle hints for normal restyle - // traversal. Restyle hints for animations have been already - // removed during animation-only traversal. - debug_assert!(!data.restyle.hint.has_animation_hint(), - "Animation restyle hints should have been already removed"); - data.clear_restyle_flags_and_damage(); - } else { - data.clear_restyle_state(); - } + data.clear_restyle_state(); damage } None => { @@ -2828,11 +2801,9 @@ pub extern "C" fn Servo_TakeChangeHint(element: RawGeckoElementBorrowed, #[no_mangle] pub extern "C" fn Servo_ResolveStyle(element: RawGeckoElementBorrowed, - _raw_data: RawServoStyleSetBorrowed, - raw_flags: ServoTraversalFlags) + _raw_data: RawServoStyleSetBorrowed) -> ServoStyleContextStrong { - let flags = TraversalFlags::from_bits_truncate(raw_flags); let element = GeckoElement(element); debug!("Servo_ResolveStyle: {:?}", element); let data = @@ -2840,9 +2811,7 @@ pub extern "C" fn Servo_ResolveStyle(element: RawGeckoElementBorrowed, // TODO(emilio): Downgrade to debug assertions when close to release. assert!(data.has_styles(), "Resolving style on unstyled element"); - // In the case where we process for throttled animation, there remaings - // restyle hints other than animation hints. - debug_assert!(element.has_current_styles_for_traversal(&*data, flags), + debug_assert!(element.has_current_styles(&*data), "Resolving style on {:?} without current styles: {:?}", element, data); data.styles.primary().clone().into() }