From 57e1b25cbd4f3de64ad783c4332ee7075423526d Mon Sep 17 00:00:00 2001 From: Cameron McCormack Date: Fri, 10 Feb 2017 10:21:34 +0800 Subject: [PATCH] stylo: Make Servo_TraverseSubtree return whether a post-traversal is required. MozReview-Commit-ID: 8EWxdt0pZ6W --- components/style/gecko_bindings/bindings.rs | 2 +- ports/geckolib/glue.rs | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/components/style/gecko_bindings/bindings.rs b/components/style/gecko_bindings/bindings.rs index 93956c73cce..b3295e928cb 100644 --- a/components/style/gecko_bindings/bindings.rs +++ b/components/style/gecko_bindings/bindings.rs @@ -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); diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index 72c0b5daf61..c754da42e79 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -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]