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

Side by Side Diff: third_party/WebKit/Source/core/css/RuleFeature.cpp

Issue 2116503002: Skip scheduling sibling invalidation based on direct adjacent count. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 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) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com)
4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com)
5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All r ights reserved. 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All r ights reserved.
6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> 6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> 7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org>
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. 9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved.
10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2011. All rights reserved.
(...skipping 716 matching lines...) Expand 10 before | Expand all | Expand 10 after
727 TRACE_SCHEDULE_STYLE_INVALIDATION(element, *descendants, classChange, cl assName); 727 TRACE_SCHEDULE_STYLE_INVALIDATION(element, *descendants, classChange, cl assName);
728 invalidationLists.descendants.append(descendants); 728 invalidationLists.descendants.append(descendants);
729 } 729 }
730 730
731 if (siblings) { 731 if (siblings) {
732 TRACE_SCHEDULE_STYLE_INVALIDATION(element, *siblings, classChange, class Name); 732 TRACE_SCHEDULE_STYLE_INVALIDATION(element, *siblings, classChange, class Name);
733 invalidationLists.siblings.append(siblings); 733 invalidationLists.siblings.append(siblings);
734 } 734 }
735 } 735 }
736 736
737 void RuleFeatureSet::collectSiblingInvalidationSetForClass(InvalidationLists& in validationLists, Element& element, const AtomicString& className) const 737 void RuleFeatureSet::collectSiblingInvalidationSetForClass(InvalidationLists& in validationLists, Element& element, const AtomicString& className, unsigned minDi rectAdjacent) const
738 { 738 {
739 InvalidationSetMap::const_iterator it = m_classInvalidationSets.find(classNa me); 739 InvalidationSetMap::const_iterator it = m_classInvalidationSets.find(classNa me);
740 if (it == m_classInvalidationSets.end()) 740 if (it == m_classInvalidationSets.end())
741 return; 741 return;
742 742
743 InvalidationSet* invalidationSet = it->value.get(); 743 InvalidationSet* invalidationSet = it->value.get();
744 if (invalidationSet->type() == InvalidateDescendants) 744 if (invalidationSet->type() == InvalidateDescendants)
745 return; 745 return;
746 746
747 SiblingInvalidationSet* siblingSet = toSiblingInvalidationSet(invalidationSe t); 747 SiblingInvalidationSet* siblingSet = toSiblingInvalidationSet(invalidationSe t);
748 if (siblingSet->maxDirectAdjacentSelectors() < minDirectAdjacent)
749 return;
750
748 TRACE_SCHEDULE_STYLE_INVALIDATION(element, *siblingSet, classChange, classNa me); 751 TRACE_SCHEDULE_STYLE_INVALIDATION(element, *siblingSet, classChange, classNa me);
749 invalidationLists.siblings.append(siblingSet); 752 invalidationLists.siblings.append(siblingSet);
750 } 753 }
751 754
752 void RuleFeatureSet::collectInvalidationSetsForId(InvalidationLists& invalidatio nLists, Element& element, const AtomicString& id) const 755 void RuleFeatureSet::collectInvalidationSetsForId(InvalidationLists& invalidatio nLists, Element& element, const AtomicString& id) const
753 { 756 {
754 InvalidationSetMap::const_iterator it = m_idInvalidationSets.find(id); 757 InvalidationSetMap::const_iterator it = m_idInvalidationSets.find(id);
755 if (it == m_idInvalidationSets.end()) 758 if (it == m_idInvalidationSets.end())
756 return; 759 return;
757 760
758 DescendantInvalidationSet* descendants; 761 DescendantInvalidationSet* descendants;
759 SiblingInvalidationSet* siblings; 762 SiblingInvalidationSet* siblings;
760 extractInvalidationSets(it->value.get(), descendants, siblings); 763 extractInvalidationSets(it->value.get(), descendants, siblings);
761 764
762 if (descendants) { 765 if (descendants) {
763 TRACE_SCHEDULE_STYLE_INVALIDATION(element, *descendants, idChange, id); 766 TRACE_SCHEDULE_STYLE_INVALIDATION(element, *descendants, idChange, id);
764 invalidationLists.descendants.append(descendants); 767 invalidationLists.descendants.append(descendants);
765 } 768 }
766 769
767 if (siblings) { 770 if (siblings) {
768 TRACE_SCHEDULE_STYLE_INVALIDATION(element, *siblings, idChange, id); 771 TRACE_SCHEDULE_STYLE_INVALIDATION(element, *siblings, idChange, id);
769 invalidationLists.siblings.append(siblings); 772 invalidationLists.siblings.append(siblings);
770 } 773 }
771 } 774 }
772 775
773 void RuleFeatureSet::collectSiblingInvalidationSetForId(InvalidationLists& inval idationLists, Element& element, const AtomicString& id) const 776 void RuleFeatureSet::collectSiblingInvalidationSetForId(InvalidationLists& inval idationLists, Element& element, const AtomicString& id, unsigned minDirectAdjace nt) const
774 { 777 {
775 InvalidationSetMap::const_iterator it = m_idInvalidationSets.find(id); 778 InvalidationSetMap::const_iterator it = m_idInvalidationSets.find(id);
776 if (it == m_idInvalidationSets.end()) 779 if (it == m_idInvalidationSets.end())
777 return; 780 return;
778 781
779 InvalidationSet* invalidationSet = it->value.get(); 782 InvalidationSet* invalidationSet = it->value.get();
780 if (invalidationSet->type() == InvalidateDescendants) 783 if (invalidationSet->type() == InvalidateDescendants)
781 return; 784 return;
782 785
783 SiblingInvalidationSet* siblingSet = toSiblingInvalidationSet(invalidationSe t); 786 SiblingInvalidationSet* siblingSet = toSiblingInvalidationSet(invalidationSe t);
787 if (siblingSet->maxDirectAdjacentSelectors() < minDirectAdjacent)
788 return;
789
784 TRACE_SCHEDULE_STYLE_INVALIDATION(element, *siblingSet, idChange, id); 790 TRACE_SCHEDULE_STYLE_INVALIDATION(element, *siblingSet, idChange, id);
785 invalidationLists.siblings.append(siblingSet); 791 invalidationLists.siblings.append(siblingSet);
786 } 792 }
787 793
788 void RuleFeatureSet::collectInvalidationSetsForAttribute(InvalidationLists& inva lidationLists, Element& element, const QualifiedName& attributeName) const 794 void RuleFeatureSet::collectInvalidationSetsForAttribute(InvalidationLists& inva lidationLists, Element& element, const QualifiedName& attributeName) const
789 { 795 {
790 InvalidationSetMap::const_iterator it = m_attributeInvalidationSets.find(att ributeName.localName()); 796 InvalidationSetMap::const_iterator it = m_attributeInvalidationSets.find(att ributeName.localName());
791 if (it == m_attributeInvalidationSets.end()) 797 if (it == m_attributeInvalidationSets.end())
792 return; 798 return;
793 799
794 DescendantInvalidationSet* descendants; 800 DescendantInvalidationSet* descendants;
795 SiblingInvalidationSet* siblings; 801 SiblingInvalidationSet* siblings;
796 extractInvalidationSets(it->value.get(), descendants, siblings); 802 extractInvalidationSets(it->value.get(), descendants, siblings);
797 803
798 if (descendants) { 804 if (descendants) {
799 TRACE_SCHEDULE_STYLE_INVALIDATION(element, *descendants, attributeChange , attributeName); 805 TRACE_SCHEDULE_STYLE_INVALIDATION(element, *descendants, attributeChange , attributeName);
800 invalidationLists.descendants.append(descendants); 806 invalidationLists.descendants.append(descendants);
801 } 807 }
802 808
803 if (siblings) { 809 if (siblings) {
804 TRACE_SCHEDULE_STYLE_INVALIDATION(element, *siblings, attributeChange, a ttributeName); 810 TRACE_SCHEDULE_STYLE_INVALIDATION(element, *siblings, attributeChange, a ttributeName);
805 invalidationLists.siblings.append(siblings); 811 invalidationLists.siblings.append(siblings);
806 } 812 }
807 } 813 }
808 814
809 void RuleFeatureSet::collectSiblingInvalidationSetForAttribute(InvalidationLists & invalidationLists, Element& element, const QualifiedName& attributeName) const 815 void RuleFeatureSet::collectSiblingInvalidationSetForAttribute(InvalidationLists & invalidationLists, Element& element, const QualifiedName& attributeName, unsig ned minDirectAdjacent) const
810 { 816 {
811 InvalidationSetMap::const_iterator it = m_attributeInvalidationSets.find(att ributeName.localName()); 817 InvalidationSetMap::const_iterator it = m_attributeInvalidationSets.find(att ributeName.localName());
812 if (it == m_attributeInvalidationSets.end()) 818 if (it == m_attributeInvalidationSets.end())
813 return; 819 return;
814 820
815 InvalidationSet* invalidationSet = it->value.get(); 821 InvalidationSet* invalidationSet = it->value.get();
816 if (invalidationSet->type() == InvalidateDescendants) 822 if (invalidationSet->type() == InvalidateDescendants)
817 return; 823 return;
818 824
819 SiblingInvalidationSet* siblingSet = toSiblingInvalidationSet(invalidationSe t); 825 SiblingInvalidationSet* siblingSet = toSiblingInvalidationSet(invalidationSe t);
826 if (siblingSet->maxDirectAdjacentSelectors() < minDirectAdjacent)
827 return;
828
820 TRACE_SCHEDULE_STYLE_INVALIDATION(element, *siblingSet, attributeChange, att ributeName); 829 TRACE_SCHEDULE_STYLE_INVALIDATION(element, *siblingSet, attributeChange, att ributeName);
821 invalidationLists.siblings.append(siblingSet); 830 invalidationLists.siblings.append(siblingSet);
822 } 831 }
823 832
824 void RuleFeatureSet::collectInvalidationSetsForPseudoClass(InvalidationLists& in validationLists, Element& element, CSSSelector::PseudoType pseudo) const 833 void RuleFeatureSet::collectInvalidationSetsForPseudoClass(InvalidationLists& in validationLists, Element& element, CSSSelector::PseudoType pseudo) const
825 { 834 {
826 PseudoTypeInvalidationSetMap::const_iterator it = m_pseudoInvalidationSets.f ind(pseudo); 835 PseudoTypeInvalidationSetMap::const_iterator it = m_pseudoInvalidationSets.f ind(pseudo);
827 if (it == m_pseudoInvalidationSets.end()) 836 if (it == m_pseudoInvalidationSets.end())
828 return; 837 return;
829 838
830 DescendantInvalidationSet* descendants; 839 DescendantInvalidationSet* descendants;
831 SiblingInvalidationSet* siblings; 840 SiblingInvalidationSet* siblings;
832 extractInvalidationSets(it->value.get(), descendants, siblings); 841 extractInvalidationSets(it->value.get(), descendants, siblings);
833 842
834 if (descendants) { 843 if (descendants) {
835 TRACE_SCHEDULE_STYLE_INVALIDATION(element, *descendants, pseudoChange, p seudo); 844 TRACE_SCHEDULE_STYLE_INVALIDATION(element, *descendants, pseudoChange, p seudo);
836 invalidationLists.descendants.append(descendants); 845 invalidationLists.descendants.append(descendants);
837 } 846 }
838 847
839 if (siblings) { 848 if (siblings) {
840 TRACE_SCHEDULE_STYLE_INVALIDATION(element, *siblings, pseudoChange, pseu do); 849 TRACE_SCHEDULE_STYLE_INVALIDATION(element, *siblings, pseudoChange, pseu do);
841 invalidationLists.siblings.append(siblings); 850 invalidationLists.siblings.append(siblings);
842 } 851 }
843 } 852 }
844 853
845 void RuleFeatureSet::collectUniversalSiblingInvalidationSet(InvalidationLists& i nvalidationLists) const 854 void RuleFeatureSet::collectUniversalSiblingInvalidationSet(InvalidationLists& i nvalidationLists, unsigned minDirectAdjacent) const
846 { 855 {
847 if (m_universalSiblingInvalidationSet) 856 if (m_universalSiblingInvalidationSet && m_universalSiblingInvalidationSet-> maxDirectAdjacentSelectors() >= minDirectAdjacent)
848 invalidationLists.siblings.append(m_universalSiblingInvalidationSet); 857 invalidationLists.siblings.append(m_universalSiblingInvalidationSet);
849 } 858 }
850 859
851 SiblingInvalidationSet& RuleFeatureSet::ensureUniversalSiblingInvalidationSet() 860 SiblingInvalidationSet& RuleFeatureSet::ensureUniversalSiblingInvalidationSet()
852 { 861 {
853 if (!m_universalSiblingInvalidationSet) 862 if (!m_universalSiblingInvalidationSet)
854 m_universalSiblingInvalidationSet = SiblingInvalidationSet::create(nullp tr); 863 m_universalSiblingInvalidationSet = SiblingInvalidationSet::create(nullp tr);
855 return *m_universalSiblingInvalidationSet; 864 return *m_universalSiblingInvalidationSet;
856 } 865 }
857 866
858 void RuleFeatureSet::addFeaturesToUniversalSiblingInvalidationSet(const Invalida tionSetFeatures& siblingFeatures, const InvalidationSetFeatures& descendantFeatu res) 867 void RuleFeatureSet::addFeaturesToUniversalSiblingInvalidationSet(const Invalida tionSetFeatures& siblingFeatures, const InvalidationSetFeatures& descendantFeatu res)
859 { 868 {
860 SiblingInvalidationSet& universalSet = ensureUniversalSiblingInvalidationSet (); 869 SiblingInvalidationSet& universalSet = ensureUniversalSiblingInvalidationSet ();
861 addFeaturesToInvalidationSet(universalSet, siblingFeatures); 870 addFeaturesToInvalidationSet(universalSet, siblingFeatures);
862 universalSet.updateMaxDirectAdjacentSelectors(siblingFeatures.maxDirectAdjac entSelectors); 871 universalSet.updateMaxDirectAdjacentSelectors(siblingFeatures.maxDirectAdjac entSelectors);
863 872
864 if (&siblingFeatures == &descendantFeatures) 873 if (&siblingFeatures == &descendantFeatures)
865 universalSet.setInvalidatesSelf(); 874 universalSet.setInvalidatesSelf();
866 else 875 else
867 addFeaturesToInvalidationSet(universalSet.ensureSiblingDescendants(), de scendantFeatures); 876 addFeaturesToInvalidationSet(universalSet.ensureSiblingDescendants(), de scendantFeatures);
868 } 877 }
869 878
870 DEFINE_TRACE(RuleFeatureSet) 879 DEFINE_TRACE(RuleFeatureSet)
871 { 880 {
872 visitor->trace(siblingRules); 881 visitor->trace(siblingRules);
873 visitor->trace(uncommonAttributeRules); 882 visitor->trace(uncommonAttributeRules);
874 } 883 }
875 884
876 } // namespace blink 885 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/css/RuleFeature.h ('k') | third_party/WebKit/Source/core/css/RuleFeatureSetTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698