From ad9f3f7ae6b472eb119cb9c9715d5c36aa1587b7 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Wed, 2 Mar 2022 15:14:38 +0100 Subject: [PATCH] LibWeb: Add fast_is for HTML::HTMLAnchorElement We were spending 20% of style computation time on the HTML spec on deciding whether DOM nodes were HTML anchor (a) tags or not. --- Userland/Libraries/LibWeb/DOM/Node.h | 1 + Userland/Libraries/LibWeb/HTML/HTMLAnchorElement.h | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/Userland/Libraries/LibWeb/DOM/Node.h b/Userland/Libraries/LibWeb/DOM/Node.h index ca1da26ab4..59992fa52f 100644 --- a/Userland/Libraries/LibWeb/DOM/Node.h +++ b/Userland/Libraries/LibWeb/DOM/Node.h @@ -84,6 +84,7 @@ public: virtual bool is_editable() const; virtual bool is_html_html_element() const { return false; } + virtual bool is_html_anchor_element() const { return false; } virtual bool is_html_template_element() const { return false; } virtual bool is_browsing_context_container() const { return false; } diff --git a/Userland/Libraries/LibWeb/HTML/HTMLAnchorElement.h b/Userland/Libraries/LibWeb/HTML/HTMLAnchorElement.h index 0d35bae7e7..8fc77c2ada 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLAnchorElement.h +++ b/Userland/Libraries/LibWeb/HTML/HTMLAnchorElement.h @@ -24,6 +24,8 @@ public: virtual bool is_focusable() const override { return has_attribute(HTML::AttributeNames::href); } + virtual bool is_html_anchor_element() const override { return true; } + private: // ^DOM::Element virtual void parse_attribute(FlyString const& name, String const& value) override; @@ -35,3 +37,8 @@ private: }; } + +namespace Web::DOM { +template<> +inline bool Node::fast_is() const { return is_html_anchor_element(); } +}