Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(57)

Unified Diff: sky/engine/core/css/invalidation/StyleInvalidator.cpp

Issue 712173002: Remove StyleInvalidator machinery. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sky/engine/core/css/invalidation/StyleInvalidator.h ('k') | sky/engine/core/css/resolver/StyleResolver.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/engine/core/css/invalidation/StyleInvalidator.cpp
diff --git a/sky/engine/core/css/invalidation/StyleInvalidator.cpp b/sky/engine/core/css/invalidation/StyleInvalidator.cpp
deleted file mode 100644
index 5cded2d23774a12fd9eab7f082aa2939aa17f215..0000000000000000000000000000000000000000
--- a/sky/engine/core/css/invalidation/StyleInvalidator.cpp
+++ /dev/null
@@ -1,167 +0,0 @@
-
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "config.h"
-
-#include "core/css/invalidation/StyleInvalidator.h"
-
-#include "core/css/invalidation/DescendantInvalidationSet.h"
-#include "core/dom/Document.h"
-#include "core/dom/Element.h"
-#include "core/dom/ElementTraversal.h"
-#include "core/dom/shadow/ElementShadow.h"
-#include "core/dom/shadow/ShadowRoot.h"
-#include "core/rendering/RenderObject.h"
-
-namespace blink {
-
-void StyleInvalidator::invalidate(Document& document)
-{
- RecursionData recursionData;
- if (Element* documentElement = document.documentElement())
- invalidate(*documentElement, recursionData);
- document.clearChildNeedsStyleInvalidation();
- document.clearNeedsStyleInvalidation();
- clearPendingInvalidations();
-}
-
-void StyleInvalidator::scheduleInvalidation(PassRefPtr<DescendantInvalidationSet> invalidationSet, Element& element)
-{
- ASSERT(element.inActiveDocument());
- ASSERT(element.styleChangeType() < SubtreeStyleChange);
- InvalidationList& list = ensurePendingInvalidationList(element);
- // If we're already going to invalidate the whole subtree we don't need to store any new sets.
- if (!list.isEmpty() && list.last()->wholeSubtreeInvalid())
- return;
- // If this set would invalidate the whole subtree we can discard all existing sets.
- if (invalidationSet->wholeSubtreeInvalid())
- list.clear();
- list.append(invalidationSet);
- element.setNeedsStyleInvalidation();
-}
-
-StyleInvalidator::InvalidationList& StyleInvalidator::ensurePendingInvalidationList(Element& element)
-{
- PendingInvalidationMap::AddResult addResult = m_pendingInvalidationMap.add(&element, nullptr);
- if (addResult.isNewEntry)
- addResult.storedValue->value = adoptPtr(new InvalidationList);
- return *addResult.storedValue->value;
-}
-
-void StyleInvalidator::clearInvalidation(Node& node)
-{
- if (node.isElementNode() && node.needsStyleInvalidation())
- m_pendingInvalidationMap.remove(toElement(&node));
-}
-
-void StyleInvalidator::clearPendingInvalidations()
-{
- m_pendingInvalidationMap.clear();
-}
-
-StyleInvalidator::StyleInvalidator()
-{
-}
-
-StyleInvalidator::~StyleInvalidator()
-{
-}
-
-void StyleInvalidator::RecursionData::pushInvalidationSet(const DescendantInvalidationSet& invalidationSet)
-{
- ASSERT(!m_wholeSubtreeInvalid);
- if (invalidationSet.treeBoundaryCrossing())
- m_treeBoundaryCrossing = true;
- if (invalidationSet.wholeSubtreeInvalid()) {
- m_wholeSubtreeInvalid = true;
- return;
- }
- m_invalidationSets.append(&invalidationSet);
- m_invalidateCustomPseudo = invalidationSet.customPseudoInvalid();
-}
-
-bool StyleInvalidator::RecursionData::matchesCurrentInvalidationSets(Element& element)
-{
- ASSERT(!m_wholeSubtreeInvalid);
-
- for (InvalidationSets::iterator it = m_invalidationSets.begin(); it != m_invalidationSets.end(); ++it) {
- if ((*it)->invalidatesElement(element))
- return true;
- }
-
- return false;
-}
-
-bool StyleInvalidator::checkInvalidationSetsAgainstElement(Element& element, StyleInvalidator::RecursionData& recursionData)
-{
- if (element.styleChangeType() >= SubtreeStyleChange || recursionData.wholeSubtreeInvalid()) {
- recursionData.setWholeSubtreeInvalid();
- return false;
- }
- if (element.needsStyleInvalidation()) {
- if (InvalidationList* invalidationList = m_pendingInvalidationMap.get(&element)) {
- for (InvalidationList::const_iterator it = invalidationList->begin(); it != invalidationList->end(); ++it)
- recursionData.pushInvalidationSet(**it);
- // FIXME: It's really only necessary to clone the render style for this element, not full style recalc.
- return true;
- }
- }
- return recursionData.matchesCurrentInvalidationSets(element);
-}
-
-bool StyleInvalidator::invalidateChildren(Element& element, StyleInvalidator::RecursionData& recursionData)
-{
- bool someChildrenNeedStyleRecalc = false;
- for (ShadowRoot* root = element.youngestShadowRoot(); root; root = root->olderShadowRoot()) {
- if (!recursionData.treeBoundaryCrossing() && !root->childNeedsStyleInvalidation() && !root->needsStyleInvalidation())
- continue;
- for (Element* child = ElementTraversal::firstChild(*root); child; child = ElementTraversal::nextSibling(*child)) {
- bool childRecalced = invalidate(*child, recursionData);
- someChildrenNeedStyleRecalc = someChildrenNeedStyleRecalc || childRecalced;
- }
- root->clearChildNeedsStyleInvalidation();
- root->clearNeedsStyleInvalidation();
- }
- for (Element* child = ElementTraversal::firstChild(element); child; child = ElementTraversal::nextSibling(*child)) {
- bool childRecalced = invalidate(*child, recursionData);
- someChildrenNeedStyleRecalc = someChildrenNeedStyleRecalc || childRecalced;
- }
- return someChildrenNeedStyleRecalc;
-}
-
-bool StyleInvalidator::invalidate(Element& element, StyleInvalidator::RecursionData& recursionData)
-{
- RecursionCheckpoint checkpoint(&recursionData);
-
- bool thisElementNeedsStyleRecalc = checkInvalidationSetsAgainstElement(element, recursionData);
-
- bool someChildrenNeedStyleRecalc = false;
- if (recursionData.hasInvalidationSets() || element.childNeedsStyleInvalidation())
- someChildrenNeedStyleRecalc = invalidateChildren(element, recursionData);
-
- if (thisElementNeedsStyleRecalc) {
- element.setNeedsStyleRecalc(recursionData.wholeSubtreeInvalid() ? SubtreeStyleChange : LocalStyleChange);
- } else if (recursionData.hasInvalidationSets() && someChildrenNeedStyleRecalc) {
- // Clone the RenderStyle in order to preserve correct style sharing, if possible. Otherwise recalc style.
- if (RenderObject* renderer = element.renderer())
- renderer->setStyleInternal(RenderStyle::clone(renderer->style()));
- else
- element.setNeedsStyleRecalc(LocalStyleChange);
- }
-
- element.clearChildNeedsStyleInvalidation();
- element.clearNeedsStyleInvalidation();
-
- return thisElementNeedsStyleRecalc;
-}
-
-void StyleInvalidator::trace(Visitor* visitor)
-{
-#if ENABLE(OILPAN)
- visitor->trace(m_pendingInvalidationMap);
-#endif
-}
-
-} // namespace blink
« no previous file with comments | « sky/engine/core/css/invalidation/StyleInvalidator.h ('k') | sky/engine/core/css/resolver/StyleResolver.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698