소스 검색

LibWeb: Add fast_is<SVGGraphicsElement>()

This dynamic_cast was ~6% of runtime when mousing around on Discord.
Andreas Kling 2 년 전
부모
커밋
bb39ca9b4a
2개의 변경된 파일11개의 추가작업 그리고 0개의 파일을 삭제
  1. 1 0
      Userland/Libraries/LibWeb/DOM/Node.h
  2. 10 0
      Userland/Libraries/LibWeb/SVG/SVGGraphicsElement.h

+ 1 - 0
Userland/Libraries/LibWeb/DOM/Node.h

@@ -74,6 +74,7 @@ public:
     virtual bool requires_svg_container() const { return false; }
     virtual bool is_svg_container() const { return false; }
     virtual bool is_svg_element() const { return false; }
+    virtual bool is_svg_graphics_element() const { return false; }
     virtual bool is_svg_svg_element() const { return false; }
     virtual bool is_svg_use_element() const { return false; }
 

+ 10 - 0
Userland/Libraries/LibWeb/SVG/SVGGraphicsElement.h

@@ -56,8 +56,18 @@ protected:
     Optional<Gfx::PaintStyle const&> svg_paint_computed_value_to_gfx_paint_style(SVGPaintContext const& paint_context, Optional<CSS::SVGPaint> const& paint_value) const;
 
     Gfx::AffineTransform m_transform = {};
+
+private:
+    virtual bool is_svg_graphics_element() const final { return true; }
 };
 
 Gfx::AffineTransform transform_from_transform_list(ReadonlySpan<Transform> transform_list);
 
 }
+
+namespace Web::DOM {
+
+template<>
+inline bool Node::fast_is<SVG::SVGGraphicsElement>() const { return is_svg_graphics_element(); }
+
+}