OLD | NEW |
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 Loading... |
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 |
OLD | NEW |