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

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

Issue 2213223004: Revert of Add a fast-path for independent inherited properties (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@computedstyle_cleanup_rename_final_member_fields
Patch Set: Created 4 years, 4 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
« no previous file with comments | « third_party/WebKit/Source/core/dom/Element.h ('k') | third_party/WebKit/Source/core/dom/Node.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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. All rights reserved. 7 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc. All rights reserved.
8 * (C) 2007 Eric Seidel (eric@webkit.org) 8 * (C) 2007 Eric Seidel (eric@webkit.org)
9 * 9 *
10 * This library is free software; you can redistribute it and/or 10 * This library is free software; you can redistribute it and/or
(...skipping 1692 matching lines...) Expand 10 before | Expand all | Expand 10 after
1703 void Element::recalcStyle(StyleRecalcChange change, Text* nextTextSibling) 1703 void Element::recalcStyle(StyleRecalcChange change, Text* nextTextSibling)
1704 { 1704 {
1705 DCHECK(document().inStyleRecalc()); 1705 DCHECK(document().inStyleRecalc());
1706 DCHECK(!document().lifecycle().inDetach()); 1706 DCHECK(!document().lifecycle().inDetach());
1707 DCHECK(!parentOrShadowHostNode()->needsStyleRecalc()); 1707 DCHECK(!parentOrShadowHostNode()->needsStyleRecalc());
1708 DCHECK(inActiveDocument()); 1708 DCHECK(inActiveDocument());
1709 1709
1710 if (hasCustomStyleCallbacks()) 1710 if (hasCustomStyleCallbacks())
1711 willRecalcStyle(change); 1711 willRecalcStyle(change);
1712 1712
1713 if (change >= IndependentInherit || needsStyleRecalc()) { 1713 if (change >= Inherit || needsStyleRecalc()) {
1714 if (hasRareData()) { 1714 if (hasRareData()) {
1715 ElementRareData* data = elementRareData(); 1715 ElementRareData* data = elementRareData();
1716 if (change != IndependentInherit) 1716 data->clearComputedStyle();
1717 data->clearComputedStyle();
1718 1717
1719 if (change >= IndependentInherit) { 1718 if (change >= Inherit) {
1720 if (ElementAnimations* elementAnimations = data->elementAnimatio ns()) 1719 if (ElementAnimations* elementAnimations = data->elementAnimatio ns())
1721 elementAnimations->setAnimationStyleChange(false); 1720 elementAnimations->setAnimationStyleChange(false);
1722 } 1721 }
1723 } 1722 }
1724 if (parentComputedStyle()) 1723 if (parentComputedStyle())
1725 change = recalcOwnStyle(change); 1724 change = recalcOwnStyle(change);
1726 clearNeedsStyleRecalc(); 1725 clearNeedsStyleRecalc();
1727 } 1726 }
1728 1727
1729 // If we reattached we don't need to recalc the style of our descendants any more. 1728 // If we reattached we don't need to recalc the style of our descendants any more.
(...skipping 23 matching lines...) Expand all
1753 clearChildNeedsStyleRecalc(); 1752 clearChildNeedsStyleRecalc();
1754 } 1753 }
1755 1754
1756 if (hasCustomStyleCallbacks()) 1755 if (hasCustomStyleCallbacks())
1757 didRecalcStyle(change); 1756 didRecalcStyle(change);
1758 1757
1759 if (change == Reattach) 1758 if (change == Reattach)
1760 reattachWhitespaceSiblingsIfNeeded(nextTextSibling); 1759 reattachWhitespaceSiblingsIfNeeded(nextTextSibling);
1761 } 1760 }
1762 1761
1763 PassRefPtr<ComputedStyle> Element::propagateInheritedProperties(StyleRecalcChang e change)
1764 {
1765 if (change != IndependentInherit)
1766 return nullptr;
1767 if (needsStyleRecalc())
1768 return nullptr;
1769 if (hasAnimations())
1770 return nullptr;
1771 const ComputedStyle* parentStyle = parentComputedStyle();
1772 DCHECK(parentStyle);
1773 const ComputedStyle* style = computedStyle();
1774 if (!style || style->animations() || style->transitions())
1775 return nullptr;
1776 RefPtr<ComputedStyle> newStyle = ComputedStyle::clone(*style);
1777 newStyle->propagateIndependentInheritedProperties(*parentStyle);
1778 INCREMENT_STYLE_STATS_COUNTER(document().styleEngine(), independentInherited StylesPropagated, 1);
1779 return newStyle;
1780 }
1781
1782 StyleRecalcChange Element::recalcOwnStyle(StyleRecalcChange change) 1762 StyleRecalcChange Element::recalcOwnStyle(StyleRecalcChange change)
1783 { 1763 {
1784 DCHECK(document().inStyleRecalc()); 1764 DCHECK(document().inStyleRecalc());
1785 DCHECK(!parentOrShadowHostNode()->needsStyleRecalc()); 1765 DCHECK(!parentOrShadowHostNode()->needsStyleRecalc());
1786 DCHECK(change >= IndependentInherit || needsStyleRecalc()); 1766 DCHECK(change >= Inherit || needsStyleRecalc());
1787 DCHECK(parentComputedStyle()); 1767 DCHECK(parentComputedStyle());
1788 1768
1789 RefPtr<ComputedStyle> oldStyle = mutableComputedStyle(); 1769 RefPtr<ComputedStyle> oldStyle = mutableComputedStyle();
1790 1770 RefPtr<ComputedStyle> newStyle = styleForLayoutObject();
1791 // When propagating inherited changes, we don't need to do a full style reca lc
1792 // if the only changed properties are independent. In this case, we can simp ly
1793 // set these directly on the ComputedStyle object.
1794 RefPtr<ComputedStyle> newStyle = propagateInheritedProperties(change);
1795 if (!newStyle)
1796 newStyle = styleForLayoutObject();
1797 DCHECK(newStyle); 1771 DCHECK(newStyle);
1798 1772
1799 StyleRecalcChange localChange = ComputedStyle::stylePropagationDiff(oldStyle .get(), newStyle.get()); 1773 StyleRecalcChange localChange = ComputedStyle::stylePropagationDiff(oldStyle .get(), newStyle.get());
1800 if (localChange == NoChange) { 1774 if (localChange == NoChange) {
1801 INCREMENT_STYLE_STATS_COUNTER(document().styleEngine(), stylesUnchanged, 1); 1775 INCREMENT_STYLE_STATS_COUNTER(document().styleEngine(), stylesUnchanged, 1);
1802 } else { 1776 } else {
1803 INCREMENT_STYLE_STATS_COUNTER(document().styleEngine(), stylesChanged, 1 ); 1777 INCREMENT_STYLE_STATS_COUNTER(document().styleEngine(), stylesChanged, 1 );
1804 } 1778 }
1805 1779
1806 if (localChange == Reattach) { 1780 if (localChange == Reattach) {
(...skipping 19 matching lines...) Expand all
1826 layoutObject->setStyleInternal(newStyle.get()); 1800 layoutObject->setStyleInternal(newStyle.get());
1827 } 1801 }
1828 } 1802 }
1829 1803
1830 if (getStyleChangeType() >= SubtreeStyleChange) 1804 if (getStyleChangeType() >= SubtreeStyleChange)
1831 return Force; 1805 return Force;
1832 1806
1833 if (change > Inherit || localChange > Inherit) 1807 if (change > Inherit || localChange > Inherit)
1834 return max(localChange, change); 1808 return max(localChange, change);
1835 1809
1836 if (localChange < IndependentInherit) { 1810 if (localChange < Inherit) {
1837 if (oldStyle->hasChildDependentFlags()) { 1811 if (oldStyle->hasChildDependentFlags()) {
1838 if (childNeedsStyleRecalc()) 1812 if (childNeedsStyleRecalc())
1839 return Inherit; 1813 return Inherit;
1840 newStyle->copyChildDependentFlagsFrom(*oldStyle); 1814 newStyle->copyChildDependentFlagsFrom(*oldStyle);
1841 } 1815 }
1842 if (oldStyle->hasPseudoElementStyle() || newStyle->hasPseudoElementStyle ()) 1816 if (oldStyle->hasPseudoElementStyle() || newStyle->hasPseudoElementStyle ())
1843 return UpdatePseudoElements; 1817 return UpdatePseudoElements;
1844 } 1818 }
1845 1819
1846 return localChange; 1820 return localChange;
(...skipping 1948 matching lines...) Expand 10 before | Expand all | Expand 10 after
3795 3769
3796 DEFINE_TRACE_WRAPPERS(Element) 3770 DEFINE_TRACE_WRAPPERS(Element)
3797 { 3771 {
3798 if (hasRareData()) { 3772 if (hasRareData()) {
3799 visitor->traceWrappers(elementRareData()); 3773 visitor->traceWrappers(elementRareData());
3800 } 3774 }
3801 ContainerNode::traceWrappers(visitor); 3775 ContainerNode::traceWrappers(visitor);
3802 } 3776 }
3803 3777
3804 } // namespace blink 3778 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/dom/Element.h ('k') | third_party/WebKit/Source/core/dom/Node.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698