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

Unified Diff: third_party/WebKit/Source/core/dom/StyleEngine.cpp

Issue 2572473006: Revert of Collect active stylesheets and and apply asynchronously. (Closed)
Patch Set: Created 4 years 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: third_party/WebKit/Source/core/dom/StyleEngine.cpp
diff --git a/third_party/WebKit/Source/core/dom/StyleEngine.cpp b/third_party/WebKit/Source/core/dom/StyleEngine.cpp
index 1fe53c51a231d94baccfd4d72b12ef5e9393353d..4fe3ecaf4e254bc27a2245873749f9ac2e53d077 100644
--- a/third_party/WebKit/Source/core/dom/StyleEngine.cpp
+++ b/third_party/WebKit/Source/core/dom/StyleEngine.cpp
@@ -151,10 +151,7 @@
StyleSheetContents::create(CSSParserContext(*m_document, nullptr));
m_inspectorStyleSheet = CSSStyleSheet::create(contents, *m_document);
markDocumentDirty();
- // TODO(rune@opera.com): Making the active stylesheets up-to-date here is
- // required by some inspector tests, at least. I theory this should not be
- // necessary. Need to investigate to figure out if/why.
- updateActiveStyle();
+ resolverChanged(AnalyzedStyleUpdate);
return *m_inspectorStyleSheet;
}
@@ -270,14 +267,13 @@
ShadowTreeStyleSheetCollection* collection =
toShadowTreeStyleSheetCollection(styleSheetCollectionFor(*treeScope));
DCHECK(collection);
- if (collection->mediaQueryAffectingValueChanged())
- setNeedsActiveStyleUpdate(*treeScope);
+ collection->clearMediaQueryRuleSetStyleSheets();
}
}
void StyleEngine::mediaQueryAffectingValueChanged() {
- if (documentStyleSheetCollection().mediaQueryAffectingValueChanged())
- setNeedsActiveStyleUpdate(document());
+ resolverChanged(FullStyleUpdate);
+ documentStyleSheetCollection().clearMediaQueryRuleSetStyleSheets();
mediaQueryAffectingValueChanged(m_activeTreeScopes);
if (m_resolver)
m_resolver->updateMediaType();
@@ -289,18 +285,19 @@
HeapVector<Member<StyleSheet>> sheetsForList;
ImportedDocumentStyleSheetCollector subcollector(parentCollector,
sheetsForList);
- documentStyleSheetCollection().collectStyleSheets(subcollector);
+ documentStyleSheetCollection().collectStyleSheets(*this, subcollector);
documentStyleSheetCollection().swapSheetsForSheetList(sheetsForList);
}
void StyleEngine::updateActiveStyleSheetsInShadow(
+ StyleResolverUpdateMode updateMode,
TreeScope* treeScope,
UnorderedTreeScopeSet& treeScopesRemoved) {
DCHECK_NE(treeScope, m_document);
ShadowTreeStyleSheetCollection* collection =
toShadowTreeStyleSheetCollection(styleSheetCollectionFor(*treeScope));
DCHECK(collection);
- collection->updateActiveStyleSheets();
+ collection->updateActiveStyleSheets(*this, updateMode);
if (!collection->hasStyleSheetCandidateNodes()) {
treeScopesRemoved.add(treeScope);
// When removing TreeScope from ActiveTreeScopes,
@@ -309,28 +306,29 @@
}
}
-void StyleEngine::updateActiveStyleSheets() {
- if (!needsActiveStyleSheetUpdate())
- return;
-
+void StyleEngine::updateActiveStyleSheets(StyleResolverUpdateMode updateMode) {
DCHECK(isMaster());
DCHECK(!document().inStyleRecalc());
- DCHECK(document().isActive());
+
+ if (!document().isActive())
+ return;
TRACE_EVENT0("blink,blink_style", "StyleEngine::updateActiveStyleSheets");
if (shouldUpdateDocumentStyleSheetCollection())
- documentStyleSheetCollection().updateActiveStyleSheets();
+ documentStyleSheetCollection().updateActiveStyleSheets(*this, updateMode);
if (shouldUpdateShadowTreeStyleSheetCollection()) {
UnorderedTreeScopeSet treeScopesRemoved;
if (m_allTreeScopesDirty) {
for (TreeScope* treeScope : m_activeTreeScopes)
- updateActiveStyleSheetsInShadow(treeScope, treeScopesRemoved);
+ updateActiveStyleSheetsInShadow(updateMode, treeScope,
+ treeScopesRemoved);
} else {
for (TreeScope* treeScope : m_dirtyTreeScopes)
- updateActiveStyleSheetsInShadow(treeScope, treeScopesRemoved);
+ updateActiveStyleSheetsInShadow(updateMode, treeScope,
+ treeScopesRemoved);
}
for (TreeScope* treeScope : treeScopesRemoved)
m_activeTreeScopes.remove(treeScope);
@@ -343,31 +341,31 @@
m_allTreeScopesDirty = false;
}
+void StyleEngine::updateActiveStyleSheets() {
+ // TODO(rune@opera.com): collect ActiveStyleSheets here.
+}
+
void StyleEngine::updateViewport() {
if (m_viewportResolver)
m_viewportResolver->updateViewport(documentStyleSheetCollection());
}
bool StyleEngine::needsActiveStyleUpdate() const {
- return (m_viewportResolver && m_viewportResolver->needsUpdate()) ||
- needsActiveStyleSheetUpdate() || m_globalRuleSet.isDirty();
+ return m_viewportResolver && m_viewportResolver->needsUpdate();
}
void StyleEngine::updateActiveStyle() {
- DCHECK(document().isActive());
updateViewport();
updateActiveStyleSheets();
m_globalRuleSet.update(document());
}
-const ActiveStyleSheetVector StyleEngine::activeStyleSheetsForInspector() {
- if (document().isActive())
- updateActiveStyle();
-
+const HeapVector<Member<CSSStyleSheet>>
+StyleEngine::activeStyleSheetsForInspector() const {
if (m_activeTreeScopes.isEmpty())
return documentStyleSheetCollection().activeAuthorStyleSheets();
- ActiveStyleSheetVector activeStyleSheets;
+ HeapVector<Member<CSSStyleSheet>> activeStyleSheets;
activeStyleSheets.appendVector(
documentStyleSheetCollection().activeAuthorStyleSheets());
@@ -384,6 +382,12 @@
}
void StyleEngine::shadowRootRemovedFromDocument(ShadowRoot* shadowRoot) {
+ if (StyleResolver* styleResolver = resolver()) {
+ if (TreeScopeStyleSheetCollection* collection =
+ styleSheetCollectionFor(*shadowRoot))
+ styleResolver->removePendingAuthorStyleSheets(
+ collection->activeAuthorStyleSheets());
+ }
m_styleSheetCollectionMap.remove(shadowRoot);
m_activeTreeScopes.remove(shadowRoot);
m_dirtyTreeScopes.remove(shadowRoot);
@@ -410,6 +414,28 @@
treeScope.clearScopedStyleResolver();
}
+void StyleEngine::finishAppendAuthorStyleSheets() {
+ m_globalRuleSet.markDirty();
+ m_globalRuleSet.update(document());
+
+ if (!document().layoutViewItem().isNull() &&
+ document().layoutViewItem().style())
+ document().layoutViewItem().style()->font().update(fontSelector());
+}
+
+void StyleEngine::appendActiveAuthorStyleSheets() {
+ DCHECK(isMaster());
+
+ m_resolver->appendAuthorStyleSheets(
+ documentStyleSheetCollection().activeAuthorStyleSheets());
+ for (TreeScope* treeScope : m_activeTreeScopes) {
+ if (TreeScopeStyleSheetCollection* collection =
+ m_styleSheetCollectionMap.get(treeScope))
+ m_resolver->appendAuthorStyleSheets(
+ collection->activeAuthorStyleSheets());
+ }
+}
+
void StyleEngine::setRuleUsageTracker(StyleRuleUsageTracker* tracker) {
m_tracker = tracker;
@@ -429,7 +455,13 @@
void StyleEngine::createResolver() {
m_resolver = StyleResolver::create(*m_document);
+
m_resolver->setRuleUsageTracker(m_tracker);
+
+ // A scoped style resolver for document will be created during
+ // appendActiveAuthorStyleSheets if needed.
+ appendActiveAuthorStyleSheets();
+ finishAppendAuthorStyleSheets();
}
void StyleEngine::clearResolver() {
@@ -462,10 +494,39 @@
}
}
+void StyleEngine::clearMasterResolver() {
+ if (Document* master = this->master())
+ master->styleEngine().clearResolver();
+}
+
void StyleEngine::didDetach() {
clearResolver();
m_viewportResolver = nullptr;
m_mediaQueryEvaluator = nullptr;
+}
+
+bool StyleEngine::shouldClearResolver() const {
+ return !m_didCalculateResolver && !haveScriptBlockingStylesheetsLoaded();
+}
+
+void StyleEngine::resolverChanged(StyleResolverUpdateMode mode) {
+ if (!isMaster()) {
+ if (Document* master = this->master())
+ master->styleEngine().resolverChanged(mode);
+ return;
+ }
+
+ // Don't bother updating, since we haven't loaded all our style info yet
+ // and haven't calculated the style selector for the first time.
+ if (!document().isActive() || shouldClearResolver()) {
+ clearResolver();
+ return;
+ }
+
+ if (mode == FullStyleUpdate)
+ markAllTreeScopesDirty();
+ m_didCalculateResolver = true;
+ updateActiveStyleSheets(mode);
}
void StyleEngine::clearFontCache() {
« no previous file with comments | « third_party/WebKit/Source/core/dom/StyleEngine.h ('k') | third_party/WebKit/Source/core/dom/StyleEngineTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698