Forráskód Böngészése

LibWeb: Add fast_is<T> 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.
Andreas Kling 3 éve
szülő
commit
ad9f3f7ae6

+ 1 - 0
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; }
 

+ 7 - 0
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<HTML::HTMLAnchorElement>() const { return is_html_anchor_element(); }
+}