| 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 |