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

Unified Diff: Source/core/dom/Document.cpp

Issue 1023393002: Cache element indices for :nth-child and :nth-last-child selectors. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Moved nth-index-cache scope to updateStyle Created 5 years, 9 months 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
Index: Source/core/dom/Document.cpp
diff --git a/Source/core/dom/Document.cpp b/Source/core/dom/Document.cpp
index 0e83a6fc8b4c3f1f9d4761ba9695a15ff178e575..3ec67f73373a14d35c7d83f201945f89c0fb0cad 100644
--- a/Source/core/dom/Document.cpp
+++ b/Source/core/dom/Document.cpp
@@ -86,6 +86,7 @@
#include "core/dom/NodeRenderingTraversal.h"
#include "core/dom/NodeTraversal.h"
#include "core/dom/NodeWithIndex.h"
+#include "core/dom/NthIndexCache.h"
#include "core/dom/ProcessingInstruction.h"
#include "core/dom/RequestAnimationFrameCallback.h"
#include "core/dom/ScriptRunner.h"
@@ -474,6 +475,7 @@ Document::Document(const DocumentInit& initializer, DocumentClassFlags documentC
, m_hasViewportUnits(false)
, m_styleRecalcElementCounter(0)
, m_parserSyncPolicy(AllowAsynchronousParsing)
+ , m_useNthIndexCache(false)
{
if (m_frame) {
ASSERT(m_frame->page());
@@ -656,6 +658,22 @@ SelectorQueryCache& Document::selectorQueryCache()
return *m_selectorQueryCache;
}
+NthIndexCache* Document::nthIndexCache()
+{
+ if (!m_useNthIndexCache)
+ return nullptr;
+ if (!m_nthIndexCache)
+ m_nthIndexCache = NthIndexCache::create(*this);
+ return m_nthIndexCache.get();
+}
+
+void Document::setUseNthIndexCache(bool use)
+{
+ m_useNthIndexCache = use;
+ if (!use && m_nthIndexCache)
+ m_nthIndexCache->clear();
+}
+
MediaQueryMatcher& Document::mediaQueryMatcher()
{
if (!m_mediaQueryMatcher)
@@ -1773,6 +1791,8 @@ void Document::updateStyle(StyleRecalcChange change)
HTMLFrameOwnerElement::UpdateSuspendScope suspendWidgetHierarchyUpdates;
m_lifecycle.advanceTo(DocumentLifecycle::InStyleRecalc);
+ UseNthIndexCacheScope nthIndexScope(*this);
+
if (styleChangeType() >= SubtreeStyleChange)
change = Force;
@@ -5714,6 +5734,7 @@ DEFINE_TRACE(Document)
visitor->trace(m_visibilityObservers);
visitor->trace(m_userActionElements);
visitor->trace(m_svgExtensions);
+ visitor->trace(m_nthIndexCache);
visitor->trace(m_timeline);
visitor->trace(m_compositorPendingAnimations);
visitor->trace(m_contextDocument);

Powered by Google App Engine
This is Rietveld 408576698