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

Unified Diff: third_party/WebKit/Source/core/dom/shadow/ShadowRoot.cpp

Issue 1904923002: Reduce a shadow root object's size by not inheriting DoublyLinkedList (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@raredatav0
Patch Set: fix typo Created 4 years, 8 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: third_party/WebKit/Source/core/dom/shadow/ShadowRoot.cpp
diff --git a/third_party/WebKit/Source/core/dom/shadow/ShadowRoot.cpp b/third_party/WebKit/Source/core/dom/shadow/ShadowRoot.cpp
index 76797f1bd010a02dce6a3792e3d6d5a84de32faa..cb6536bcb8140e6482620e47143750abebf88e48 100644
--- a/third_party/WebKit/Source/core/dom/shadow/ShadowRoot.cpp
+++ b/third_party/WebKit/Source/core/dom/shadow/ShadowRoot.cpp
@@ -43,9 +43,9 @@
namespace blink {
-struct SameSizeAsShadowRoot : public DocumentFragment, public TreeScope, public DoublyLinkedListNode<ShadowRoot> {
+struct SameSizeAsShadowRoot : public DocumentFragment, public TreeScope {
char emptyClassFieldsDueToGCMixinMarker[1];
- Member<void*> willbeMember[5];
+ Member<void*> willbeMember[3];
unsigned countersAndFlags[1];
};
@@ -54,9 +54,6 @@ static_assert(sizeof(ShadowRoot) == sizeof(SameSizeAsShadowRoot), "ShadowRoot sh
ShadowRoot::ShadowRoot(Document& document, ShadowRootType type)
: DocumentFragment(0, CreateShadowRoot)
, TreeScope(*this, document)
- , m_prev(nullptr)
- , m_next(nullptr)
- , m_slotAssignment(nullptr)
, m_numberOfStyles(0)
, m_type(static_cast<unsigned>(type))
, m_registeredWithParentShadowRoot(false)
@@ -70,6 +67,20 @@ ShadowRoot::~ShadowRoot()
{
}
+ShadowRoot* ShadowRoot::youngerShadowRoot() const
+{
+ if (type() == ShadowRootType::V0 && m_shadowRootRareDataV0)
+ return m_shadowRootRareDataV0->youngerShadowRoot();
+ return nullptr;
+}
+
+ShadowRoot* ShadowRoot::olderShadowRoot() const
+{
+ if (type() == ShadowRootType::V0 && m_shadowRootRareDataV0)
+ return m_shadowRootRareDataV0->olderShadowRoot();
+ return nullptr;
+}
+
ShadowRoot* ShadowRoot::olderShadowRootForBindings() const
{
ShadowRoot* older = olderShadowRoot();
@@ -79,6 +90,18 @@ ShadowRoot* ShadowRoot::olderShadowRootForBindings() const
return older;
}
+void ShadowRoot::setYoungerShadowRoot(ShadowRoot& root)
+{
+ DCHECK_EQ(type(), ShadowRootType::V0);
+ ensureShadowRootRareDataV0().setYoungerShadowRoot(root);
+}
+
+void ShadowRoot::setOlderShadowRoot(ShadowRoot& root)
+{
+ DCHECK_EQ(type(), ShadowRootType::V0);
+ ensureShadowRootRareDataV0().setOlderShadowRoot(root);
+}
+
Node* ShadowRoot::cloneNode(bool, ExceptionState& exceptionState)
{
exceptionState.throwDOMException(NotSupportedError, "ShadowRoot nodes are not clonable.");
@@ -186,22 +209,22 @@ void ShadowRoot::unregisterScopedHTMLStyleChild()
--m_numberOfStyles;
}
-ShadowRootRareData* ShadowRoot::ensureShadowRootRareData()
+ShadowRootRareData& ShadowRoot::ensureShadowRootRareData()
{
if (m_shadowRootRareData)
- return m_shadowRootRareData.get();
+ return *m_shadowRootRareData;
m_shadowRootRareData = new ShadowRootRareData;
- return m_shadowRootRareData.get();
+ return *m_shadowRootRareData;
}
-ShadowRootRareDataV0* ShadowRoot::ensureShadowRootRareDataV0()
+ShadowRootRareDataV0& ShadowRoot::ensureShadowRootRareDataV0()
{
if (m_shadowRootRareDataV0)
- return m_shadowRootRareDataV0.get();
+ return *m_shadowRootRareDataV0;
m_shadowRootRareDataV0 = new ShadowRootRareDataV0;
- return m_shadowRootRareDataV0.get();
+ return *m_shadowRootRareDataV0;
}
bool ShadowRoot::containsShadowElements() const
@@ -233,12 +256,12 @@ void ShadowRoot::setShadowInsertionPointOfYoungerShadowRoot(HTMLShadowElement* s
{
if (!m_shadowRootRareDataV0 && !shadowInsertionPoint)
return;
- ensureShadowRootRareDataV0()->setShadowInsertionPointOfYoungerShadowRoot(shadowInsertionPoint);
+ ensureShadowRootRareDataV0().setShadowInsertionPointOfYoungerShadowRoot(shadowInsertionPoint);
}
void ShadowRoot::didAddInsertionPoint(InsertionPoint* insertionPoint)
{
- ensureShadowRootRareDataV0()->didAddInsertionPoint(insertionPoint);
+ ensureShadowRootRareDataV0().didAddInsertionPoint(insertionPoint);
invalidateDescendantInsertionPoints();
}
@@ -250,7 +273,7 @@ void ShadowRoot::didRemoveInsertionPoint(InsertionPoint* insertionPoint)
void ShadowRoot::addChildShadowRoot()
{
- ensureShadowRootRareData()->didAddChildShadowRoot();
+ ensureShadowRootRareData().didAddChildShadowRoot();
}
void ShadowRoot::removeChildShadowRoot()
@@ -287,14 +310,14 @@ const HeapVector<Member<InsertionPoint>>& ShadowRoot::descendantInsertionPoints(
for (InsertionPoint& insertionPoint : Traversal<InsertionPoint>::descendantsOf(*this))
insertionPoints.append(&insertionPoint);
- ensureShadowRootRareDataV0()->setDescendantInsertionPoints(insertionPoints);
+ ensureShadowRootRareDataV0().setDescendantInsertionPoints(insertionPoints);
return m_shadowRootRareDataV0->descendantInsertionPoints();
}
StyleSheetList* ShadowRoot::styleSheets()
{
- if (!ensureShadowRootRareData()->styleSheets())
+ if (!ensureShadowRootRareData().styleSheets())
m_shadowRootRareData->setStyleSheets(StyleSheetList::create(this));
return m_shadowRootRareData->styleSheets();
@@ -302,7 +325,7 @@ StyleSheetList* ShadowRoot::styleSheets()
void ShadowRoot::didAddSlot()
{
- ensureShadowRootRareData()->didAddSlot();
+ ensureShadowRootRareData().didAddSlot();
invalidateDescendantSlots();
}
@@ -353,8 +376,6 @@ void ShadowRoot::distributeV1()
DEFINE_TRACE(ShadowRoot)
{
- visitor->trace(m_prev);
- visitor->trace(m_next);
visitor->trace(m_shadowRootRareData);
visitor->trace(m_shadowRootRareDataV0);
visitor->trace(m_slotAssignment);

Powered by Google App Engine
This is Rietveld 408576698