stylo: Make Servo_TraverseSubtree return whether a post-traversal is required.

MozReview-Commit-ID: 8EWxdt0pZ6W
This commit is contained in:
Cameron McCormack 2017-02-10 10:21:34 +08:00
parent 10994ea758
commit 57e1b25cbd
2 changed files with 7 additions and 2 deletions

View file

@ -1476,7 +1476,7 @@ extern "C" {
extern "C" {
pub fn Servo_TraverseSubtree(root: RawGeckoElementBorrowed,
set: RawServoStyleSetBorrowed,
root_behavior: TraversalRootBehavior);
root_behavior: TraversalRootBehavior) -> bool;
}
extern "C" {
pub fn Servo_AssertTreeIsClean(root: RawGeckoElementBorrowed);

View file

@ -164,14 +164,19 @@ fn traverse_subtree(element: GeckoElement, raw_data: RawServoStyleSetBorrowed,
}
}
/// Traverses the subtree rooted at `root` for restyling. Returns whether a
/// Gecko post-traversal (to perform lazy frame construction, or consume any
/// RestyleData, or drop any ElementData) is required.
#[no_mangle]
pub extern "C" fn Servo_TraverseSubtree(root: RawGeckoElementBorrowed,
raw_data: RawServoStyleSetBorrowed,
behavior: structs::TraversalRootBehavior) -> () {
behavior: structs::TraversalRootBehavior) -> bool {
let element = GeckoElement(root);
debug!("Servo_TraverseSubtree: {:?}", element);
traverse_subtree(element, raw_data,
behavior == structs::TraversalRootBehavior::UnstyledChildrenOnly);
element.has_dirty_descendants() || element.mutate_data().unwrap().has_restyle()
}
#[no_mangle]