Chromium Code Reviews| Index: Source/core/css/invalidation/StyleInvalidator.cpp |
| diff --git a/Source/core/css/invalidation/StyleInvalidator.cpp b/Source/core/css/invalidation/StyleInvalidator.cpp |
| index fe400494f515777168ffb5def3c8e6dbd9129aff..665d9ac91488b9dc0e7bb37fbb97c741fa0bf0d9 100644 |
| --- a/Source/core/css/invalidation/StyleInvalidator.cpp |
| +++ b/Source/core/css/invalidation/StyleInvalidator.cpp |
| @@ -16,18 +16,56 @@ |
| namespace WebCore { |
| -void StyleInvalidator::invalidate() |
| +void StyleInvalidator::invalidate(Document& document) |
| { |
| - if (Element* documentElement = m_document.documentElement()) |
| + if (Element* documentElement = document.documentElement()) |
| invalidate(*documentElement); |
| - m_document.clearChildNeedsStyleInvalidation(); |
| - m_document.clearNeedsStyleInvalidation(); |
| + document.clearChildNeedsStyleInvalidation(); |
| + document.clearNeedsStyleInvalidation(); |
| + clear(); |
| +} |
| + |
| +void StyleInvalidator::scheduleInvalidation(PassRefPtr<DescendantInvalidationSet> invalidationSet, Element* element) |
| +{ |
| + ensurePendingInvalidationList(element).append(invalidationSet); |
| + element->setNeedsStyleInvalidation(); |
| +} |
| + |
| +StyleInvalidator::InvalidationList& StyleInvalidator::ensurePendingInvalidationList(Element* element) |
|
esprehn
2014/03/31 18:20:39
by reference
chrishtr
2014/03/31 19:22:59
Done.
|
| +{ |
| + PendingInvalidationMap::AddResult addResult = m_pendingInvalidationMap.add(element, nullptr); |
| + if (addResult.isNewEntry) |
| + addResult.storedValue->value = adoptPtr(new InvalidationList); |
| + return *addResult.storedValue->value; |
| +} |
| + |
| +void StyleInvalidator::clearStyleInvalidation(Node* node) |
| +{ |
| + node->clearChildNeedsStyleInvalidation(); |
| + node->clearNeedsStyleInvalidation(); |
| + if (node->isElementNode()) |
| + m_pendingInvalidationMap.remove(toElement(node)); |
| +} |
| + |
| +void StyleInvalidator::clear() |
| +{ |
| m_pendingInvalidationMap.clear(); |
| + m_recursionData.clear(); |
|
esprehn
2014/03/31 18:20:39
How is it possible to have recursion data at this
chrishtr
2014/03/31 19:22:59
It should not be possible. Removed.
|
| +} |
| + |
| +void StyleInvalidator::RecursionData::clear(); |
| +{ |
| + m_invalidationClasses.clear(); |
| + m_invalidationAttributes.clear(); |
| + m_foundInvalidationSet = false; |
| +} |
| + |
| +StyleInvalidator::RecursionData::RecursionData() |
| +{ |
| + clear(); |
| } |
| -StyleInvalidator::StyleInvalidator(Document& document) |
| - : m_document(document) |
| - , m_pendingInvalidationMap(document.styleResolver()->ruleFeatureSet().pendingInvalidationMap()) |
| +StyleInvalidator::StyleInvalidator() |
| { } |
| void StyleInvalidator::RecursionData::pushInvalidationSet(const DescendantInvalidationSet& invalidationSet) |
| @@ -60,10 +98,10 @@ bool StyleInvalidator::checkInvalidationSetsAgainstElement(Element& element) |
| { |
| bool thisElementNeedsStyleRecalc = false; |
| if (element.needsStyleInvalidation()) { |
| - if (RuleFeatureSet::InvalidationList* invalidationList = m_pendingInvalidationMap.get(&element)) { |
| + if (InvalidationList* invalidationList = m_pendingInvalidationMap.get(&element)) { |
| // FIXME: it's really only necessary to clone the render style for this element, not full style recalc. |
| thisElementNeedsStyleRecalc = true; |
| - for (RuleFeatureSet::InvalidationList::const_iterator it = invalidationList->begin(); it != invalidationList->end(); ++it) { |
| + for (InvalidationList::const_iterator it = invalidationList->begin(); it != invalidationList->end(); ++it) { |
| m_recursionData.pushInvalidationSet(**it); |
| if ((*it)->wholeSubtreeInvalid()) { |
| element.setNeedsStyleRecalc(SubtreeStyleChange); |