author | Emilio Cobos Álvarez <emilio@crisal.io> |
Thu, 14 Nov 2019 12:54:00 +0000 | |
changeset 501949 | 3a1f314c3022866babf30d8899f3d19af4f91389 |
parent 501948 | 8029fe5cc2a1bdd54e03e07a9a8498a9a1f3e655 |
child 501950 | 20eae859997faaff797e2c925531a4075d077175 |
push id | 100516 |
push user | ealvarez@mozilla.com |
push date | Thu, 14 Nov 2019 13:44:15 +0000 |
treeherder | autoland@3a1f314c3022 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | smaug |
bugs | 1596391 |
milestone | 72.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/base/nsINode.cpp +++ b/dom/base/nsINode.cpp @@ -1168,17 +1168,17 @@ nsPIDOMWindowOuter* nsINode::GetOwnerGlo nsIGlobalObject* nsINode::GetOwnerGlobal() const { bool dummy; return OwnerDoc()->GetScriptHandlingObject(dummy); } bool nsINode::UnoptimizableCCNode() const { const uintptr_t problematicFlags = (NODE_IS_ANONYMOUS_ROOT | NODE_IS_IN_NATIVE_ANONYMOUS_SUBTREE | - NODE_IS_NATIVE_ANONYMOUS_ROOT | NODE_MAY_BE_IN_BINDING_MNGR); + NODE_IS_NATIVE_ANONYMOUS_ROOT); return HasFlag(problematicFlags) || NodeType() == ATTRIBUTE_NODE || // For strange cases like xbl:content/xbl:children (IsElement() && AsElement()->IsInNamespace(kNameSpaceID_XBL)); } /* static */ bool nsINode::Traverse(nsINode* tmp, nsCycleCollectionTraversalCallback& cb) { if (MOZ_LIKELY(!cb.WantAllTraces())) {
--- a/dom/base/nsINode.h +++ b/dom/base/nsINode.h @@ -126,74 +126,69 @@ enum { NODE_IS_IN_NATIVE_ANONYMOUS_SUBTREE = NODE_FLAG_BIT(3), // Whether this node is the root of a native anonymous (from the perspective // of its parent) subtree. This flag is set-once: once a node has it, it // must not be removed. // NOTE: Should only be used on nsIContent nodes NODE_IS_NATIVE_ANONYMOUS_ROOT = NODE_FLAG_BIT(4), - // Whether a binding manager may have a pointer to this - NODE_MAY_BE_IN_BINDING_MNGR = NODE_FLAG_BIT(5), - - NODE_IS_EDITABLE = NODE_FLAG_BIT(6), - - // Free bit here. + NODE_IS_EDITABLE = NODE_FLAG_BIT(5), // Whether the node participates in a shadow tree. - NODE_IS_IN_SHADOW_TREE = NODE_FLAG_BIT(8), + NODE_IS_IN_SHADOW_TREE = NODE_FLAG_BIT(6), // Node has an :empty or :-moz-only-whitespace selector - NODE_HAS_EMPTY_SELECTOR = NODE_FLAG_BIT(9), + NODE_HAS_EMPTY_SELECTOR = NODE_FLAG_BIT(7), // A child of the node has a selector such that any insertion, // removal, or appending of children requires restyling the parent. - NODE_HAS_SLOW_SELECTOR = NODE_FLAG_BIT(10), + NODE_HAS_SLOW_SELECTOR = NODE_FLAG_BIT(8), // A child of the node has a :first-child, :-moz-first-node, // :only-child, :last-child or :-moz-last-node selector. - NODE_HAS_EDGE_CHILD_SELECTOR = NODE_FLAG_BIT(11), + NODE_HAS_EDGE_CHILD_SELECTOR = NODE_FLAG_BIT(9), // A child of the node has a selector such that any insertion or // removal of children requires restyling later siblings of that // element. Additionally (in this manner it is stronger than // NODE_HAS_SLOW_SELECTOR), if a child's style changes due to any // other content tree changes (e.g., the child changes to or from // matching :empty due to a grandchild insertion or removal), the // child's later siblings must also be restyled. - NODE_HAS_SLOW_SELECTOR_LATER_SIBLINGS = NODE_FLAG_BIT(12), + NODE_HAS_SLOW_SELECTOR_LATER_SIBLINGS = NODE_FLAG_BIT(10), NODE_ALL_SELECTOR_FLAGS = NODE_HAS_EMPTY_SELECTOR | NODE_HAS_SLOW_SELECTOR | NODE_HAS_EDGE_CHILD_SELECTOR | NODE_HAS_SLOW_SELECTOR_LATER_SIBLINGS, // This node needs to go through frame construction to get a frame (or // undisplayed entry). - NODE_NEEDS_FRAME = NODE_FLAG_BIT(13), + NODE_NEEDS_FRAME = NODE_FLAG_BIT(11), // At least one descendant in the flattened tree has NODE_NEEDS_FRAME set. // This should be set on every node on the flattened tree path between the // node(s) with NODE_NEEDS_FRAME and the root content. - NODE_DESCENDANTS_NEED_FRAMES = NODE_FLAG_BIT(14), + NODE_DESCENDANTS_NEED_FRAMES = NODE_FLAG_BIT(12), // Set if the node has the accesskey attribute set. - NODE_HAS_ACCESSKEY = NODE_FLAG_BIT(15), + NODE_HAS_ACCESSKEY = NODE_FLAG_BIT(13), // Set if the node has right-to-left directionality - NODE_HAS_DIRECTION_RTL = NODE_FLAG_BIT(16), + NODE_HAS_DIRECTION_RTL = NODE_FLAG_BIT(14), // Set if the node has left-to-right directionality - NODE_HAS_DIRECTION_LTR = NODE_FLAG_BIT(17), + NODE_HAS_DIRECTION_LTR = NODE_FLAG_BIT(15), NODE_ALL_DIRECTION_FLAGS = NODE_HAS_DIRECTION_LTR | NODE_HAS_DIRECTION_RTL, - NODE_HAS_BEEN_IN_UA_WIDGET = NODE_FLAG_BIT(18), + NODE_HAS_BEEN_IN_UA_WIDGET = NODE_FLAG_BIT(16), // Remaining bits are node type specific. - NODE_TYPE_SPECIFIC_BITS_OFFSET = 19 + NODE_TYPE_SPECIFIC_BITS_OFFSET = 17 }; // Make sure we have space for our bits #define ASSERT_NODE_FLAGS_SPACE(n) \ static_assert(WRAPPER_CACHE_FLAGS_BITS_USED + (n) <= \ sizeof(nsWrapperCache::FlagsType) * 8, \ "Not enough space for our bits") ASSERT_NODE_FLAGS_SPACE(NODE_TYPE_SPECIFIC_BITS_OFFSET);
--- a/servo/components/style/gecko/wrapper.rs +++ b/servo/components/style/gecko/wrapper.rs @@ -295,17 +295,17 @@ impl<'ln> GeckoNode<'ln> { } /// WARNING: This logic is duplicated in Gecko's FlattenedTreeParentIsParent. /// Make sure to mirror any modifications in both places. #[inline] fn flattened_tree_parent_is_parent(&self) -> bool { use crate::gecko_bindings::structs::*; let flags = self.flags(); - if flags & (NODE_MAY_BE_IN_BINDING_MNGR as u32 | NODE_IS_IN_SHADOW_TREE as u32) != 0 { + if !self.is_in_shadow_tree() { return false; } let parent = unsafe { self.0.mParent.as_ref() }.map(GeckoNode); let parent_el = parent.and_then(|p| p.as_element()); if flags & (NODE_IS_NATIVE_ANONYMOUS_ROOT as u32) != 0 && parent_el.map_or(false, |el| el.is_root()) {