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

Side by Side Diff: third_party/WebKit/Source/core/dom/Element.cpp

Issue 2821193003: Store nonAttachedStyle on NodeLayoutData instead of on HashMap in Document. (Closed)
Patch Set: Clear NonAttachedStyle in (Attach/Detach)LayoutTree Created 3 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Peter Kelly (pmk@post.com) 4 * (C) 2001 Peter Kelly (pmk@post.com)
5 * (C) 2001 Dirk Mueller (mueller@kde.org) 5 * (C) 2001 Dirk Mueller (mueller@kde.org)
6 * (C) 2007 David Smith (catfish.man@gmail.com) 6 * (C) 2007 David Smith (catfish.man@gmail.com)
7 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc. 7 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc.
8 * All rights reserved. 8 * All rights reserved.
9 * (C) 2007 Eric Seidel (eric@webkit.org) 9 * (C) 2007 Eric Seidel (eric@webkit.org)
10 * 10 *
(...skipping 1724 matching lines...) Expand 10 before | Expand all | Expand 10 after
1735 } 1735 }
1736 1736
1737 void Element::AttachLayoutTree(const AttachContext& context) { 1737 void Element::AttachLayoutTree(const AttachContext& context) {
1738 DCHECK(GetDocument().InStyleRecalc()); 1738 DCHECK(GetDocument().InStyleRecalc());
1739 1739
1740 // We've already been through detach when doing an attach, but we might 1740 // We've already been through detach when doing an attach, but we might
1741 // need to clear any state that's been added since then. 1741 // need to clear any state that's been added since then.
1742 if (HasRareData() && NeedsAttach()) { 1742 if (HasRareData() && NeedsAttach()) {
1743 ElementRareData* data = GetElementRareData(); 1743 ElementRareData* data = GetElementRareData();
1744 data->ClearComputedStyle(); 1744 data->ClearComputedStyle();
1745 SetNonAttachedStyle(nullptr);
1745 } 1746 }
1746 1747
1747 if (!IsActiveSlotOrActiveInsertionPoint()) { 1748 if (!IsActiveSlotOrActiveInsertionPoint()) {
1748 LayoutTreeBuilderForElement builder(*this, context.resolved_style); 1749 LayoutTreeBuilderForElement builder(*this, context.resolved_style);
1749 builder.CreateLayoutObjectIfNeeded(); 1750 builder.CreateLayoutObjectIfNeeded();
1750 1751
1751 if (ComputedStyle* style = builder.ResolvedStyle()) { 1752 if (ComputedStyle* style = builder.ResolvedStyle()) {
1752 if (!GetLayoutObject() && ShouldStoreNonLayoutObjectComputedStyle(*style)) 1753 if (!GetLayoutObject() && ShouldStoreNonLayoutObjectComputedStyle(*style))
1753 StoreNonLayoutObjectComputedStyle(style); 1754 StoreNonLayoutObjectComputedStyle(style);
1754 } 1755 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1787 void Element::DetachLayoutTree(const AttachContext& context) { 1788 void Element::DetachLayoutTree(const AttachContext& context) {
1788 HTMLFrameOwnerElement::UpdateSuspendScope suspend_widget_hierarchy_updates; 1789 HTMLFrameOwnerElement::UpdateSuspendScope suspend_widget_hierarchy_updates;
1789 CancelFocusAppearanceUpdate(); 1790 CancelFocusAppearanceUpdate();
1790 RemoveCallbackSelectors(); 1791 RemoveCallbackSelectors();
1791 if (HasRareData()) { 1792 if (HasRareData()) {
1792 ElementRareData* data = GetElementRareData(); 1793 ElementRareData* data = GetElementRareData();
1793 data->ClearPseudoElements(); 1794 data->ClearPseudoElements();
1794 1795
1795 // attachLayoutTree() will clear the computed style for us when inside 1796 // attachLayoutTree() will clear the computed style for us when inside
1796 // recalcStyle. 1797 // recalcStyle.
1797 if (!GetDocument().InStyleRecalc()) 1798 if (!GetDocument().InStyleRecalc()) {
1798 data->ClearComputedStyle(); 1799 data->ClearComputedStyle();
1800 SetNonAttachedStyle(nullptr);
1801 }
1799 1802
1800 if (ElementAnimations* element_animations = data->GetElementAnimations()) { 1803 if (ElementAnimations* element_animations = data->GetElementAnimations()) {
1801 if (context.performing_reattach) { 1804 if (context.performing_reattach) {
1802 // FIXME: We call detach from within style recalc, so compositingState 1805 // FIXME: We call detach from within style recalc, so compositingState
1803 // is not up to date. 1806 // is not up to date.
1804 // https://code.google.com/p/chromium/issues/detail?id=339847 1807 // https://code.google.com/p/chromium/issues/detail?id=339847
1805 DisableCompositingQueryAsserts disabler; 1808 DisableCompositingQueryAsserts disabler;
1806 1809
1807 // FIXME: restart compositor animations rather than pull back to the 1810 // FIXME: restart compositor animations rather than pull back to the
1808 // main thread 1811 // main thread
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
2009 ComputedStyle::StylePropagationDiff(old_style.Get(), new_style.Get()); 2012 ComputedStyle::StylePropagationDiff(old_style.Get(), new_style.Get());
2010 if (local_change == kNoChange) { 2013 if (local_change == kNoChange) {
2011 INCREMENT_STYLE_STATS_COUNTER(GetDocument().GetStyleEngine(), 2014 INCREMENT_STYLE_STATS_COUNTER(GetDocument().GetStyleEngine(),
2012 styles_unchanged, 1); 2015 styles_unchanged, 1);
2013 } else { 2016 } else {
2014 INCREMENT_STYLE_STATS_COUNTER(GetDocument().GetStyleEngine(), 2017 INCREMENT_STYLE_STATS_COUNTER(GetDocument().GetStyleEngine(),
2015 styles_changed, 1); 2018 styles_changed, 1);
2016 } 2019 }
2017 2020
2018 if (local_change == kReattach) { 2021 if (local_change == kReattach) {
2019 GetDocument().AddNonAttachedStyle(*this, std::move(new_style)); 2022 SetNonAttachedStyle(std::move(new_style));
2020 SetNeedsReattachLayoutTree(); 2023 SetNeedsReattachLayoutTree();
2021 return kReattach; 2024 return kReattach;
2022 } 2025 }
2023 2026
2024 DCHECK(old_style); 2027 DCHECK(old_style);
2025 2028
2026 if (local_change != kNoChange) 2029 if (local_change != kNoChange)
2027 UpdateCallbackSelectors(old_style.Get(), new_style.Get()); 2030 UpdateCallbackSelectors(old_style.Get(), new_style.Get());
2028 2031
2029 if (LayoutObject* layout_object = this->GetLayoutObject()) { 2032 if (LayoutObject* layout_object = this->GetLayoutObject()) {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2065 2068
2066 return local_change; 2069 return local_change;
2067 } 2070 }
2068 2071
2069 void Element::RebuildLayoutTree(Text* next_text_sibling) { 2072 void Element::RebuildLayoutTree(Text* next_text_sibling) {
2070 DCHECK(InActiveDocument()); 2073 DCHECK(InActiveDocument());
2071 DCHECK(parentNode()); 2074 DCHECK(parentNode());
2072 2075
2073 if (NeedsReattachLayoutTree()) { 2076 if (NeedsReattachLayoutTree()) {
2074 AttachContext reattach_context; 2077 AttachContext reattach_context;
2075 reattach_context.resolved_style = GetDocument().GetNonAttachedStyle(*this); 2078 reattach_context.resolved_style = GetNonAttachedStyle();
2076 bool layout_object_will_change = NeedsAttach() || GetLayoutObject(); 2079 bool layout_object_will_change = NeedsAttach() || GetLayoutObject();
2077 ReattachLayoutTree(reattach_context); 2080 ReattachLayoutTree(reattach_context);
2078 if (layout_object_will_change || GetLayoutObject()) 2081 if (layout_object_will_change || GetLayoutObject())
2079 ReattachWhitespaceSiblingsIfNeeded(next_text_sibling); 2082 ReattachWhitespaceSiblingsIfNeeded(next_text_sibling);
2083 SetNonAttachedStyle(nullptr);
2080 } else if (ChildNeedsReattachLayoutTree()) { 2084 } else if (ChildNeedsReattachLayoutTree()) {
2081 DCHECK(!NeedsReattachLayoutTree()); 2085 DCHECK(!NeedsReattachLayoutTree());
2082 SelectorFilterParentScope filter_scope(*this); 2086 SelectorFilterParentScope filter_scope(*this);
2083 StyleSharingDepthScope sharing_scope(*this); 2087 StyleSharingDepthScope sharing_scope(*this);
2084 Text* next_text_sibling = nullptr; 2088 Text* next_text_sibling = nullptr;
2085 RebuildPseudoElementLayoutTree(kPseudoIdAfter); 2089 RebuildPseudoElementLayoutTree(kPseudoIdAfter);
2086 RebuildShadowRootLayoutTree(next_text_sibling); 2090 RebuildShadowRootLayoutTree(next_text_sibling);
2087 RebuildChildrenLayoutTrees(next_text_sibling); 2091 RebuildChildrenLayoutTrees(next_text_sibling);
2088 RebuildPseudoElementLayoutTree(kPseudoIdBefore, next_text_sibling); 2092 RebuildPseudoElementLayoutTree(kPseudoIdBefore, next_text_sibling);
2089 RebuildPseudoElementLayoutTree(kPseudoIdBackdrop); 2093 RebuildPseudoElementLayoutTree(kPseudoIdBackdrop);
(...skipping 2246 matching lines...) Expand 10 before | Expand all | Expand 10 after
4336 } 4340 }
4337 4341
4338 DEFINE_TRACE_WRAPPERS(Element) { 4342 DEFINE_TRACE_WRAPPERS(Element) {
4339 if (HasRareData()) { 4343 if (HasRareData()) {
4340 visitor->TraceWrappers(GetElementRareData()); 4344 visitor->TraceWrappers(GetElementRareData());
4341 } 4345 }
4342 ContainerNode::TraceWrappers(visitor); 4346 ContainerNode::TraceWrappers(visitor);
4343 } 4347 }
4344 4348
4345 } // namespace blink 4349 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698