mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-28 21:26:22 +00:00
LibWeb: Implement faster equals()
for UnresolvedStyleValue
Compare `Vector<Parser::ComponentValue>` directly instead of serializing them into strings first. This is required for the upcoming changes where we would compare previous and new sets of custom properties to figure out whether we need to invalidate descendant elements. Without this change `equals()` would show up being hot in profiles.
This commit is contained in:
parent
b1efd62ce6
commit
cbe4ba60c3
Notes:
github-actions[bot]
2025-07-30 09:07:30 +00:00
Author: https://github.com/kalenikaliaksandr
Commit: cbe4ba60c3
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/5618
Reviewed-by: https://github.com/awesomekling
Reviewed-by: https://github.com/tcl3
4 changed files with 14 additions and 2 deletions
|
@ -48,6 +48,8 @@ public:
|
|||
String to_debug_string() const;
|
||||
String original_source_text() const;
|
||||
|
||||
bool operator==(ComponentValue const&) const = default;
|
||||
|
||||
private:
|
||||
Variant<Token, Function, SimpleBlock, GuaranteedInvalidValue> m_value;
|
||||
};
|
||||
|
|
|
@ -169,6 +169,11 @@ public:
|
|||
Position const& end_position() const { return m_end_position; }
|
||||
void set_position_range(Badge<Tokenizer>, Position start, Position end);
|
||||
|
||||
bool operator==(Token const& other) const
|
||||
{
|
||||
return m_type == other.m_type && m_value == other.m_value && m_number_value == other.m_number_value && m_hash_type == other.m_hash_type;
|
||||
}
|
||||
|
||||
private:
|
||||
Type m_type { Type::Invalid };
|
||||
|
||||
|
|
|
@ -81,6 +81,8 @@ struct SimpleBlock {
|
|||
String to_string() const;
|
||||
String original_source_text() const;
|
||||
void contains_arbitrary_substitution_function(SubstitutionFunctionsPresence&) const;
|
||||
|
||||
bool operator==(SimpleBlock const& other) const { return token == other.token && value == other.value; }
|
||||
};
|
||||
|
||||
// https://drafts.csswg.org/css-syntax/#function
|
||||
|
@ -93,6 +95,8 @@ struct Function {
|
|||
String to_string() const;
|
||||
String original_source_text() const;
|
||||
void contains_arbitrary_substitution_function(SubstitutionFunctionsPresence&) const;
|
||||
|
||||
bool operator==(Function const& other) const { return name == other.name && value == other.value; }
|
||||
};
|
||||
|
||||
// https://drafts.csswg.org/css-variables/#guaranteed-invalid-value
|
||||
|
@ -100,6 +104,8 @@ struct GuaranteedInvalidValue {
|
|||
GuaranteedInvalidValue() = default;
|
||||
String to_string() const { return {}; }
|
||||
String original_source_text() const { return {}; }
|
||||
|
||||
bool operator==(GuaranteedInvalidValue const&) const = default;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -48,8 +48,7 @@ bool UnresolvedStyleValue::equals(CSSStyleValue const& other) const
|
|||
{
|
||||
if (type() != other.type())
|
||||
return false;
|
||||
// This is a case where comparing the strings actually makes sense.
|
||||
return to_string(SerializationMode::Normal) == other.to_string(SerializationMode::Normal);
|
||||
return values() == other.as_unresolved().values();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue