Summary: | <style scoped>: Improve shortcut code for cases where <style scoped> isn't used | ||||||
---|---|---|---|---|---|---|---|
Product: | WebKit | Reporter: | Roland Steiner <rolandsteiner> | ||||
Component: | CSS | Assignee: | Roland Steiner <rolandsteiner> | ||||
Status: | RESOLVED FIXED | ||||||
Severity: | Normal | CC: | dglazkov, dominicc, koivisto, morrita, webkit.review.bot | ||||
Priority: | P2 | ||||||
Version: | 528+ (Nightly build) | ||||||
Hardware: | Unspecified | ||||||
OS: | Unspecified | ||||||
Bug Depends on: | |||||||
Bug Blocks: | 73192 | ||||||
Attachments: |
|
Description
Roland Steiner
2012-01-31 00:58:46 PST
Created attachment 124680 [details]
Patch
Move shortcut out from setupScopingElementStack() to calling sites, where a larger chunk of work can be skipped.
Attachment 124680 [details] did not pass style-queue:
Failed to run "['Tools/Scripts/update-webkit']" exit_code: 9
Updating OpenSource
First, rewinding head to replay your work on top of it...
Applying: Fix compilation errors on build-webkit --debug --no-workers on mac.
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging LayoutTests/ChangeLog
CONFLICT (content): Merge conflict in LayoutTests/ChangeLog
Auto-merging LayoutTests/platform/qt/Skipped
CONFLICT (content): Merge conflict in LayoutTests/platform/qt/Skipped
Failed to merge in the changes.
Patch failed at 0001 Fix compilation errors on build-webkit --debug --no-workers on mac.
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
rebase refs/remotes/origin/master: command returned error: 1
Died at Tools/Scripts/update-webkit line 164.
If any of these errors are false positives, please file a bug against check-webkit-style.
Comment on attachment 124680 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=124680&action=review > Source/WebCore/css/CSSStyleSelector.cpp:858 > + if (!m_scopedAuthorStyles.isEmpty()) { > + // Match scoped author rules by traversing the scoped element stack (rebuild it if it got inconsistent). > + const Element* parent = m_element->parentOrHostElement(); > + if (!scopingElementStackIsConsistent(parent)) > + setupScopingElementStack(parent); > + for (size_t i = m_scopingElementStack.size(); i; --i) { > + collectMatchingRules(m_scopingElementStack[i - 1].m_ruleSet, firstRuleIndex, lastRuleIndex, includeEmptyRules); > + collectMatchingRulesForRegion(m_scopingElementStack[i - 1].m_ruleSet, firstRuleIndex, lastRuleIndex, includeEmptyRules); > + } > + // Also include the current element. > + RuleSet* ruleSet = scopedRuleSetForElement(m_element); > + if (ruleSet) { > + collectMatchingRules(ruleSet, firstRuleIndex, lastRuleIndex, includeEmptyRules); > + collectMatchingRulesForRegion(ruleSet, firstRuleIndex, lastRuleIndex, includeEmptyRules); > + } > } The code inside if (!m_scopedAuthorStyles.isEmpty()) could be factored into a function, matchScopedAuthorRules() or something. Committed r106351: <http://trac.webkit.org/changeset/106351> |