1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#![allow(non_upper_case_globals)]
bitflags! {
pub struct TraversalFlags: u32 {
const AnimationOnly = 1 << 0;
const ForCSSRuleChanges = 1 << 1;
const Forgetful = 1 << 3;
const ClearDirtyBits = 1 << 5;
const ClearAnimationOnlyDirtyDescendants = 1 << 6;
const ParallelTraversal = 1 << 7;
const FlushThrottledAnimations = 1 << 8;
}
}
#[cfg(feature = "gecko")]
#[inline]
pub fn assert_traversal_flags_match() {
use gecko_bindings::structs;
macro_rules! check_traversal_flags {
( $( $a:ident => $b:path ),*, ) => {
if cfg!(debug_assertions) {
let mut modes = TraversalFlags::all();
$(
assert_eq!(structs::$a as usize, $b.bits() as usize, stringify!($b));
modes.remove($b);
)*
assert_eq!(modes, TraversalFlags::empty(), "all TraversalFlags bits should have an assertion");
}
}
}
check_traversal_flags! {
ServoTraversalFlags_AnimationOnly => TraversalFlags::AnimationOnly,
ServoTraversalFlags_ForCSSRuleChanges => TraversalFlags::ForCSSRuleChanges,
ServoTraversalFlags_Forgetful => TraversalFlags::Forgetful,
ServoTraversalFlags_ClearDirtyBits => TraversalFlags::ClearDirtyBits,
ServoTraversalFlags_ClearAnimationOnlyDirtyDescendants =>
TraversalFlags::ClearAnimationOnlyDirtyDescendants,
ServoTraversalFlags_ParallelTraversal => TraversalFlags::ParallelTraversal,
ServoTraversalFlags_FlushThrottledAnimations => TraversalFlags::FlushThrottledAnimations,
}
}
impl TraversalFlags {
#[inline]
pub fn for_animation_only(&self) -> bool {
self.contains(TraversalFlags::AnimationOnly)
}
}