mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 09:17:35 +00:00
LibWeb: Cache the result of Selector::specificity()
This function was showing up as taking 30% of all runtime during a profile of Browser. This change effectively eliminates it completely.
This commit is contained in:
parent
de7b5279cb
commit
89bd4cd80d
2 changed files with 7 additions and 1 deletions
|
@ -20,6 +20,9 @@ Selector::~Selector()
|
||||||
|
|
||||||
u32 Selector::specificity() const
|
u32 Selector::specificity() const
|
||||||
{
|
{
|
||||||
|
if (m_specificity.has_value())
|
||||||
|
return *m_specificity;
|
||||||
|
|
||||||
unsigned ids = 0;
|
unsigned ids = 0;
|
||||||
unsigned tag_names = 0;
|
unsigned tag_names = 0;
|
||||||
unsigned classes = 0;
|
unsigned classes = 0;
|
||||||
|
@ -42,7 +45,9 @@ u32 Selector::specificity() const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ids * 0x10000 + classes * 0x100 + tag_names;
|
m_specificity = ids * 0x10000 + classes * 0x100 + tag_names;
|
||||||
|
|
||||||
|
return *m_specificity;
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://www.w3.org/TR/cssom/#serialize-a-simple-selector
|
// https://www.w3.org/TR/cssom/#serialize-a-simple-selector
|
||||||
|
|
|
@ -138,6 +138,7 @@ private:
|
||||||
explicit Selector(Vector<CompoundSelector>&&);
|
explicit Selector(Vector<CompoundSelector>&&);
|
||||||
|
|
||||||
Vector<CompoundSelector> m_compound_selectors;
|
Vector<CompoundSelector> m_compound_selectors;
|
||||||
|
mutable Optional<u32> m_specificity;
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr StringView pseudo_element_name(Selector::SimpleSelector::PseudoElement);
|
constexpr StringView pseudo_element_name(Selector::SimpleSelector::PseudoElement);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue