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

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

Issue 171513006: Support invalidation sets for simple class selectors. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 10 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 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 static bool isSkippableComponentForInvalidation(const CSSSelector& selector) 46 static bool isSkippableComponentForInvalidation(const CSSSelector& selector)
47 { 47 {
48 if (selector.matchesPseudoElement() || selector.pseudoType() == CSSSelector: :PseudoHost) 48 if (selector.matchesPseudoElement() || selector.pseudoType() == CSSSelector: :PseudoHost)
49 return false; 49 return false;
50 return true; 50 return true;
51 } 51 }
52 52
53 // This method is somewhat conservative in what it acceptss. 53 // This method is somewhat conservative in what it acceptss.
54 static bool supportsClassDescendantInvalidation(const CSSSelector& selector) 54 static bool supportsClassDescendantInvalidation(const CSSSelector& selector)
55 { 55 {
56 bool foundDescendantRelation = false; 56 bool foundDescendantRelation = false;
chrishtr 2014/02/19 17:50:44 remove these variables
rune 2014/02/19 18:47:40 See other comment.
57 bool foundAncestorIdent = false;
58 bool foundIdent = false; 57 bool foundIdent = false;
59 for (const CSSSelector* component = &selector; component; component = compon ent->tagHistory()) { 58 for (const CSSSelector* component = &selector; component; component = compon ent->tagHistory()) {
60 59
61 // FIXME: We should allow pseudo elements, but we need to change how the y hook 60 // FIXME: We should allow pseudo elements, but we need to change how the y hook
62 // into recalcStyle by moving them to recalcOwnStyle instead of recalcCh ildStyle. 61 // into recalcStyle by moving them to recalcOwnStyle instead of recalcCh ildStyle.
63 62
64 // FIXME: next up: Tag and Id. 63 // FIXME: next up: Tag and Id.
65 if (component->m_match == CSSSelector::Class) { 64 if (component->m_match == CSSSelector::Class) {
66 if (!foundDescendantRelation) 65 if (!foundDescendantRelation)
67 foundIdent = true; 66 foundIdent = true;
chrishtr 2014/02/19 17:50:44 return true, remove if (!foundDescendantRelation)
rune 2014/02/19 18:47:40 We still need to continue to look for adjacent com
chrishtr 2014/02/19 18:54:01 Oh right, good point.
68 else
69 foundAncestorIdent = true;
70 } else if (!isSkippableComponentForInvalidation(*component)) { 67 } else if (!isSkippableComponentForInvalidation(*component)) {
71 return false; 68 return false;
72 } 69 }
73 // FIXME: We can probably support ChildTree and DescendantTree. 70 // FIXME: We can probably support ChildTree and DescendantTree.
74 switch (component->relation()) { 71 switch (component->relation()) {
75 case CSSSelector::Descendant: 72 case CSSSelector::Descendant:
76 case CSSSelector::Child: 73 case CSSSelector::Child:
77 foundDescendantRelation = true; 74 foundDescendantRelation = true;
chrishtr 2014/02/19 17:50:44 return true;
78 // Fall through! 75 // Fall through!
79 case CSSSelector::SubSelector: 76 case CSSSelector::SubSelector:
80 continue; 77 continue;
81 default: 78 default:
82 return false; 79 return false;
83 } 80 }
84 } 81 }
85 return foundDescendantRelation && foundAncestorIdent && foundIdent; 82 return foundIdent;
chrishtr 2014/02/19 17:50:44 remove this line
rune 2014/02/19 18:47:40 See other comment.
86 } 83 }
87 84
88 void extractClassIdOrTag(const CSSSelector& selector, Vector<AtomicString>& clas ses, AtomicString& id, AtomicString& tagName) 85 void extractClassIdOrTag(const CSSSelector& selector, Vector<AtomicString>& clas ses, AtomicString& id, AtomicString& tagName)
89 { 86 {
90 if (selector.m_match == CSSSelector::Tag) 87 if (selector.m_match == CSSSelector::Tag)
91 tagName = selector.tagQName().localName(); 88 tagName = selector.tagQName().localName();
92 else if (selector.m_match == CSSSelector::Id) 89 else if (selector.m_match == CSSSelector::Id)
93 id = selector.value(); 90 id = selector.value();
94 else if (selector.m_match == CSSSelector::Class) 91 else if (selector.m_match == CSSSelector::Class)
95 classes.append(selector.value()); 92 classes.append(selector.value());
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 element->setNeedsStyleRecalc(LocalStyleChange); 421 element->setNeedsStyleRecalc(LocalStyleChange);
425 422
426 invalidationClasses.remove(oldSize, invalidationClasses.size() - oldSize); 423 invalidationClasses.remove(oldSize, invalidationClasses.size() - oldSize);
427 element->clearChildNeedsStyleInvalidation(); 424 element->clearChildNeedsStyleInvalidation();
428 element->clearNeedsStyleInvalidation(); 425 element->clearNeedsStyleInvalidation();
429 426
430 return thisElementNeedsStyleRecalc; 427 return thisElementNeedsStyleRecalc;
431 } 428 }
432 429
433 } // namespace WebCore 430 } // namespace WebCore
OLDNEW
« no previous file with comments | « LayoutTests/virtual/targetedstylerecalc/fast/css/invalidation/targeted-class-style-invalidation-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698