From 727ff6cf59e039882b7e79a6b74c451b0b492755 Mon Sep 17 00:00:00 2001 From: MacDue Date: Wed, 7 Jun 2023 23:04:01 +0100 Subject: [PATCH] LibWeb: Don't use paint styles for solid color CRC2D fills It is faster to avoid the extra overhead/indirection of paint styles if possible. --- .../Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp b/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp index 2ce81f4ff6..8e7ff2b9c0 100644 --- a/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp +++ b/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp @@ -265,11 +265,17 @@ static Gfx::Painter::WindingRule parse_fill_rule(StringView fill_rule) return Gfx::Painter::WindingRule::Nonzero; } -void CanvasRenderingContext2D::fill_internal(Gfx::Path& path, StringView fill_rule) +void CanvasRenderingContext2D::fill_internal(Gfx::Path& path, StringView fill_rule_value) { draw_clipped([&](auto& painter) { path.close_all_subpaths(); - painter.fill_path(path, *drawing_state().fill_style.to_gfx_paint_style(), parse_fill_rule(fill_rule)); + auto& drawing_state = this->drawing_state(); + auto fill_rule = parse_fill_rule(fill_rule_value); + if (auto color = drawing_state.fill_style.as_color(); color.has_value()) { + painter.fill_path(path, *color, fill_rule); + } else { + painter.fill_path(path, drawing_state.fill_style.to_gfx_paint_style(), fill_rule); + } return path.bounding_box(); }); }