mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-27 20:25:44 +00:00
7b31481d83
One less hack, a few more to go. Bug: 1374235 Reviewed-by: bholley MozReview-Commit-ID: 6katL1EGn2U Signed-off-by: Emilio Cobos Álvarez <emilio@crisal.io> Source-Repo: https://github.com/servo/servo Source-Revision: 876b70b02c7a3c8aad26b26dcbcfddaa5c747493 --HG-- extra : subtree_source : https%3A//hg.mozilla.org/projects/converted-servo-linear extra : subtree_revision : c421be7da780736f47930015ff021477f04fcef7
81 lines
3.4 KiB
Rust
81 lines
3.4 KiB
Rust
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
//! Flags that control the traversal process.
|
|
//!
|
|
//! We CamelCase rather than UPPER_CASING so that we can grep for the same
|
|
//! strings across gecko and servo.
|
|
#![allow(non_upper_case_globals)]
|
|
|
|
bitflags! {
|
|
/// Flags that control the traversal process.
|
|
pub flags TraversalFlags: u32 {
|
|
/// Traverse only elements for animation restyles.
|
|
const AnimationOnly = 1 << 0,
|
|
/// Traverse and update all elements with CSS animations since
|
|
/// @keyframes rules may have changed. Triggered by CSS rule changes.
|
|
const ForCSSRuleChanges = 1 << 1,
|
|
/// Styles unstyled elements, but does not handle invalidations on
|
|
/// already-styled elements.
|
|
const UnstyledOnly = 1 << 2,
|
|
/// A forgetful traversal ignores the previous state of the frame tree, and
|
|
/// thus does not compute damage or maintain other state describing the styles
|
|
/// pre-traversal. A forgetful traversal is usually the right thing if you
|
|
/// aren't going to do a post-traversal.
|
|
const Forgetful = 1 << 3,
|
|
/// Clears all the dirty bits on the elements traversed.
|
|
const ClearDirtyBits = 1 << 5,
|
|
/// Clears the animation-only dirty descendants bit in the subtree.
|
|
const ClearAnimationOnlyDirtyDescendants = 1 << 6,
|
|
/// 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,
|
|
|
|
}
|
|
}
|
|
|
|
/// Asserts that all TraversalFlags flags have a matching ServoTraversalFlags value in gecko.
|
|
#[cfg(feature = "gecko")]
|
|
#[inline]
|
|
pub fn assert_traversal_flags_match() {
|
|
use gecko_bindings::structs;
|
|
|
|
macro_rules! check_traversal_flags {
|
|
( $( $a:ident => $b:ident ),*, ) => {
|
|
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 => AnimationOnly,
|
|
ServoTraversalFlags_ForCSSRuleChanges => ForCSSRuleChanges,
|
|
ServoTraversalFlags_UnstyledOnly => UnstyledOnly,
|
|
ServoTraversalFlags_Forgetful => Forgetful,
|
|
ServoTraversalFlags_ClearDirtyBits => ClearDirtyBits,
|
|
ServoTraversalFlags_ClearAnimationOnlyDirtyDescendants =>
|
|
ClearAnimationOnlyDirtyDescendants,
|
|
ServoTraversalFlags_ParallelTraversal => ParallelTraversal,
|
|
ServoTraversalFlags_FlushThrottledAnimations => FlushThrottledAnimations,
|
|
}
|
|
}
|
|
|
|
impl TraversalFlags {
|
|
/// Returns true if the traversal is for animation-only restyles.
|
|
#[inline]
|
|
pub fn for_animation_only(&self) -> bool {
|
|
self.contains(AnimationOnly)
|
|
}
|
|
}
|