summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWeb/CSS/Selector.cpp
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2022-03-13 16:28:20 +0100
committerAndreas Kling <kling@serenityos.org>2022-03-13 18:09:43 +0100
commitf88d65d9cb225b563c637aa2fc21edb666f5d056 (patch)
tree5adfad60f0a7d40dc0ea2084963f32274615ca85 /Userland/Libraries/LibWeb/CSS/Selector.cpp
parentf5c2e87965d8e3eab783228f6045efe8838a035c (diff)
downloadserenity-f88d65d9cb225b563c637aa2fc21edb666f5d056.zip
LibWeb: Cache CSS::Selector's pseudo element at construction time
Computing the pseudo element of a CSS::Selector was very hot when mousing around on GitHub in Browser. A profile had it at ~10%. After these changes, it's totally gone from the profile. :^)
Diffstat (limited to 'Userland/Libraries/LibWeb/CSS/Selector.cpp')
-rw-r--r--Userland/Libraries/LibWeb/CSS/Selector.cpp23
1 files changed, 10 insertions, 13 deletions
diff --git a/Userland/Libraries/LibWeb/CSS/Selector.cpp b/Userland/Libraries/LibWeb/CSS/Selector.cpp
index a81edfe313..14bac1c4e3 100644
--- a/Userland/Libraries/LibWeb/CSS/Selector.cpp
+++ b/Userland/Libraries/LibWeb/CSS/Selector.cpp
@@ -13,25 +13,22 @@ namespace Web::CSS {
Selector::Selector(Vector<CompoundSelector>&& compound_selectors)
: m_compound_selectors(move(compound_selectors))
{
+ // Note: This assumes that only one pseudo-element is allowed in a selector, and that it appears at the end.
+ // This is true currently, and there are no current proposals to change this, but you never know!
+ if (!m_compound_selectors.is_empty()) {
+ for (auto const& simple_selector : m_compound_selectors.last().simple_selectors) {
+ if (simple_selector.type == SimpleSelector::Type::PseudoElement) {
+ m_pseudo_element = simple_selector.pseudo_element;
+ break;
+ }
+ }
+ }
}
Selector::~Selector()
{
}
-Optional<Selector::PseudoElement> Selector::pseudo_element() const
-{
- // Note: This assumes that only one pseudo-element is allowed in a selector, and that it appears at the end.
- // This is true currently, and there are no current proposals to change this, but you never know!
- if (compound_selectors().is_empty())
- return {};
- for (auto const& simple_selector : compound_selectors().last().simple_selectors) {
- if (simple_selector.type == SimpleSelector::Type::PseudoElement)
- return simple_selector.pseudo_element;
- }
- return {};
-}
-
// https://www.w3.org/TR/selectors-4/#specificity-rules
u32 Selector::specificity() const
{