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

Unified Diff: Source/core/css/CSSStyleSheet.cpp

Issue 187313005: Move StyleSheet to the oilpan heap using transition types. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Revert StyleEngine change. Created 6 years, 10 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/css/CSSStyleSheet.cpp
diff --git a/Source/core/css/CSSStyleSheet.cpp b/Source/core/css/CSSStyleSheet.cpp
index b62694297e157398ab833088ad4dd5cf94633b8b..9e636689260befb131878841f749a37fd93dcfdb 100644
--- a/Source/core/css/CSSStyleSheet.cpp
+++ b/Source/core/css/CSSStyleSheet.cpp
@@ -71,27 +71,27 @@ static bool isAcceptableCSSStyleSheetParent(Node* parentNode)
}
#endif
-PassRefPtr<CSSStyleSheet> CSSStyleSheet::create(PassRefPtrWillBeRawPtr<StyleSheetContents> sheet, CSSImportRule* ownerRule)
+PassRefPtrWillBeRawPtr<CSSStyleSheet> CSSStyleSheet::create(PassRefPtrWillBeRawPtr<StyleSheetContents> sheet, CSSImportRule* ownerRule)
{
- return adoptRef(new CSSStyleSheet(sheet, ownerRule));
+ return adoptRefWillBeRefCountedGarbageCollected(new CSSStyleSheet(sheet, ownerRule));
}
-PassRefPtr<CSSStyleSheet> CSSStyleSheet::create(PassRefPtrWillBeRawPtr<StyleSheetContents> sheet, Node* ownerNode)
+PassRefPtrWillBeRawPtr<CSSStyleSheet> CSSStyleSheet::create(PassRefPtrWillBeRawPtr<StyleSheetContents> sheet, Node* ownerNode)
{
- return adoptRef(new CSSStyleSheet(sheet, ownerNode, false, TextPosition::minimumPosition()));
+ return adoptRefWillBeRefCountedGarbageCollected(new CSSStyleSheet(sheet, ownerNode, false, TextPosition::minimumPosition()));
}
-PassRefPtr<CSSStyleSheet> CSSStyleSheet::createInline(PassRefPtrWillBeRawPtr<StyleSheetContents> sheet, Node* ownerNode, const TextPosition& startPosition)
+PassRefPtrWillBeRawPtr<CSSStyleSheet> CSSStyleSheet::createInline(PassRefPtrWillBeRawPtr<StyleSheetContents> sheet, Node* ownerNode, const TextPosition& startPosition)
{
ASSERT(sheet);
- return adoptRef(new CSSStyleSheet(sheet, ownerNode, true, startPosition));
+ return adoptRefWillBeRefCountedGarbageCollected(new CSSStyleSheet(sheet, ownerNode, true, startPosition));
}
-PassRefPtr<CSSStyleSheet> CSSStyleSheet::createInline(Node* ownerNode, const KURL& baseURL, const TextPosition& startPosition, const String& encoding)
+PassRefPtrWillBeRawPtr<CSSStyleSheet> CSSStyleSheet::createInline(Node* ownerNode, const KURL& baseURL, const TextPosition& startPosition, const String& encoding)
{
CSSParserContext parserContext(ownerNode->document(), 0, baseURL, encoding);
RefPtrWillBeRawPtr<StyleSheetContents> sheet = StyleSheetContents::create(baseURL.string(), parserContext);
- return adoptRef(new CSSStyleSheet(sheet.release(), ownerNode, true, startPosition));
+ return adoptRefWillBeRefCountedGarbageCollected(new CSSStyleSheet(sheet.release(), ownerNode, true, startPosition));
}
CSSStyleSheet::CSSStyleSheet(PassRefPtrWillBeRawPtr<StyleSheetContents> contents, CSSImportRule* ownerRule)
@@ -111,7 +111,7 @@ CSSStyleSheet::CSSStyleSheet(PassRefPtrWillBeRawPtr<StyleSheetContents> contents
, m_isInlineStylesheet(isInlineStylesheet)
, m_isDisabled(false)
, m_ownerNode(ownerNode)
- , m_ownerRule(0)
+ , m_ownerRule(nullptr)
, m_startPosition(startPosition)
, m_loadCompleted(false)
{
@@ -121,6 +121,11 @@ CSSStyleSheet::CSSStyleSheet(PassRefPtrWillBeRawPtr<StyleSheetContents> contents
CSSStyleSheet::~CSSStyleSheet()
{
+ // With oilpan the parent style sheet pointer is strong and the sheet and
+ // its RuleCSSOMWrappers die together and we don't need to clear them here.
+ // Also with oilpan the StyleSheetContents client pointers are weak and
+ // therefore do not need to be cleared here.
+#if !ENABLE(OILPAN)
// For style rules outside the document, .parentStyleSheet can become null even if the style rule
// is still observable from JavaScript. This matches the behavior of .parentNode for nodes, but
// it's not ideal because it makes the CSSOM's behavior depend on the timing of garbage collection.
@@ -133,6 +138,7 @@ CSSStyleSheet::~CSSStyleSheet()
m_mediaCSSOMWrapper->clearParentStyleSheet();
m_contents->unregisterClient(this);
+#endif
}
void CSSStyleSheet::willMutateRules()
@@ -406,4 +412,13 @@ void CSSStyleSheet::startLoadingDynamicSheet()
m_ownerNode->startLoadingDynamicSheet();
}
+void CSSStyleSheet::trace(Visitor* visitor)
+{
+ visitor->trace(m_contents);
+ visitor->trace(m_mediaQueries);
+ visitor->trace(m_ownerRule);
+ visitor->trace(m_mediaCSSOMWrapper);
+ visitor->trace(m_childRuleCSSOMWrappers);
+}
+
}

Powered by Google App Engine
This is Rietveld 408576698