From 25c43554069f21596103b09932cbc51690a05b8a Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Sat, 15 Jun 2024 00:18:04 +0300 Subject: [PATCH] Ladybird+LibWeb+WebContent: Add an option to enable Skia painter --- Ladybird/HelperProcess.cpp | 2 ++ Ladybird/Qt/main.cpp | 3 +++ Ladybird/Types.h | 6 ++++++ Ladybird/WebContent/main.cpp | 6 ++++++ Userland/Libraries/LibWeb/Page/Page.h | 1 + Userland/Services/WebContent/PageClient.cpp | 7 +++++++ Userland/Services/WebContent/PageClient.h | 1 + 7 files changed, 26 insertions(+) diff --git a/Ladybird/HelperProcess.cpp b/Ladybird/HelperProcess.cpp index b8b00170804..606def18b07 100644 --- a/Ladybird/HelperProcess.cpp +++ b/Ladybird/HelperProcess.cpp @@ -89,6 +89,8 @@ ErrorOr> launch_web_content_process( arguments.append("--use-lagom-networking"sv); if (web_content_options.enable_gpu_painting == Ladybird::EnableGPUPainting::Yes) arguments.append("--use-gpu-painting"sv); + if (web_content_options.enable_skia_painting == Ladybird::EnableSkiaPainting::Yes) + arguments.append("--use-skia-painting"sv); if (web_content_options.enable_experimental_cpu_transforms == Ladybird::EnableExperimentalCPUTransforms::Yes) arguments.append("--experimental-cpu-transforms"sv); if (web_content_options.wait_for_debugger == Ladybird::WaitForDebugger::Yes) diff --git a/Ladybird/Qt/main.cpp b/Ladybird/Qt/main.cpp index f0ca9fd8243..01ba52a14e5 100644 --- a/Ladybird/Qt/main.cpp +++ b/Ladybird/Qt/main.cpp @@ -96,6 +96,7 @@ ErrorOr serenity_main(Main::Arguments arguments) bool enable_qt_networking = false; bool expose_internals_object = false; bool use_gpu_painting = false; + bool use_skia_painting = false; bool use_experimental_cpu_transform_support = false; bool debug_web_content = false; bool log_all_js_exceptions = false; @@ -112,6 +113,7 @@ ErrorOr serenity_main(Main::Arguments arguments) args_parser.add_option(disable_sql_database, "Disable SQL database", "disable-sql-database"); args_parser.add_option(enable_qt_networking, "Enable Qt as the backend networking service", "enable-qt-networking"); args_parser.add_option(use_gpu_painting, "Enable GPU painting", "enable-gpu-painting"); + args_parser.add_option(use_skia_painting, "Enable Skia painting", "enable-skia-painting"); args_parser.add_option(use_experimental_cpu_transform_support, "Enable experimental CPU transform support", "experimental-cpu-transforms"); args_parser.add_option(debug_web_content, "Wait for debugger to attach to WebContent", "debug-web-content"); args_parser.add_option(certificates, "Path to a certificate file", "certificate", 'C', "certificate"); @@ -175,6 +177,7 @@ ErrorOr serenity_main(Main::Arguments arguments) .enable_callgrind_profiling = enable_callgrind_profiling ? Ladybird::EnableCallgrindProfiling::Yes : Ladybird::EnableCallgrindProfiling::No, .enable_gpu_painting = use_gpu_painting ? Ladybird::EnableGPUPainting::Yes : Ladybird::EnableGPUPainting::No, .enable_experimental_cpu_transforms = use_experimental_cpu_transform_support ? Ladybird::EnableExperimentalCPUTransforms::Yes : Ladybird::EnableExperimentalCPUTransforms::No, + .enable_skia_painting = use_skia_painting ? Ladybird::EnableSkiaPainting::Yes : Ladybird::EnableSkiaPainting::No, .use_lagom_networking = enable_qt_networking ? Ladybird::UseLagomNetworking::No : Ladybird::UseLagomNetworking::Yes, .wait_for_debugger = debug_web_content ? Ladybird::WaitForDebugger::Yes : Ladybird::WaitForDebugger::No, .log_all_js_exceptions = log_all_js_exceptions ? Ladybird::LogAllJSExceptions::Yes : Ladybird::LogAllJSExceptions::No, diff --git a/Ladybird/Types.h b/Ladybird/Types.h index 3565b15d477..e9f0e8c7faa 100644 --- a/Ladybird/Types.h +++ b/Ladybird/Types.h @@ -25,6 +25,11 @@ enum class EnableExperimentalCPUTransforms { Yes }; +enum class EnableSkiaPainting { + No, + Yes +}; + enum class IsLayoutTestMode { No, Yes @@ -61,6 +66,7 @@ struct WebContentOptions { EnableCallgrindProfiling enable_callgrind_profiling { EnableCallgrindProfiling::No }; EnableGPUPainting enable_gpu_painting { EnableGPUPainting::No }; EnableExperimentalCPUTransforms enable_experimental_cpu_transforms { EnableExperimentalCPUTransforms::No }; + EnableSkiaPainting enable_skia_painting { EnableSkiaPainting::No }; IsLayoutTestMode is_layout_test_mode { IsLayoutTestMode::No }; UseLagomNetworking use_lagom_networking { UseLagomNetworking::Yes }; WaitForDebugger wait_for_debugger { WaitForDebugger::No }; diff --git a/Ladybird/WebContent/main.cpp b/Ladybird/WebContent/main.cpp index 3fb4937a07d..3286606181b 100644 --- a/Ladybird/WebContent/main.cpp +++ b/Ladybird/WebContent/main.cpp @@ -98,6 +98,7 @@ ErrorOr serenity_main(Main::Arguments arguments) bool use_lagom_networking = false; bool use_gpu_painting = false; bool use_experimental_cpu_transform_support = false; + bool use_skia_painter = false; bool wait_for_debugger = false; bool log_all_js_exceptions = false; bool enable_idl_tracing = false; @@ -111,6 +112,7 @@ ErrorOr serenity_main(Main::Arguments arguments) args_parser.add_option(use_lagom_networking, "Enable Lagom servers for networking", "use-lagom-networking"); args_parser.add_option(use_gpu_painting, "Enable GPU painting", "use-gpu-painting"); args_parser.add_option(use_experimental_cpu_transform_support, "Enable experimental CPU transform support", "experimental-cpu-transforms"); + args_parser.add_option(use_skia_painter, "Enable Skia painter", "use-skia-painting"); args_parser.add_option(wait_for_debugger, "Wait for debugger", "wait-for-debugger"); args_parser.add_option(mach_server_name, "Mach server name", "mach-server-name", 0, "mach_server_name"); args_parser.add_option(log_all_js_exceptions, "Log all JavaScript exceptions", "log-all-js-exceptions"); @@ -132,6 +134,10 @@ ErrorOr serenity_main(Main::Arguments arguments) WebContent::PageClient::set_use_gpu_painter(); } + if (use_skia_painter) { + WebContent::PageClient::set_use_skia_painter(); + } + if (use_experimental_cpu_transform_support) { WebContent::PageClient::set_use_experimental_cpu_transform_support(); } diff --git a/Userland/Libraries/LibWeb/Page/Page.h b/Userland/Libraries/LibWeb/Page/Page.h index b02865e3395..b30b6cc2042 100644 --- a/Userland/Libraries/LibWeb/Page/Page.h +++ b/Userland/Libraries/LibWeb/Page/Page.h @@ -270,6 +270,7 @@ struct PaintOptions { bool has_focus { false }; bool use_gpu_painter { false }; + bool use_skia_painter { false }; bool use_experimental_cpu_transform_support { false }; #ifdef HAS_ACCELERATED_GRAPHICS diff --git a/Userland/Services/WebContent/PageClient.cpp b/Userland/Services/WebContent/PageClient.cpp index 65e9f006e20..e5b4996948e 100644 --- a/Userland/Services/WebContent/PageClient.cpp +++ b/Userland/Services/WebContent/PageClient.cpp @@ -33,6 +33,7 @@ namespace WebContent { static bool s_use_gpu_painter = false; static bool s_use_experimental_cpu_transform_support = false; +static bool s_use_skia_painter = false; JS_DEFINE_ALLOCATOR(PageClient); @@ -41,6 +42,11 @@ void PageClient::set_use_gpu_painter() s_use_gpu_painter = true; } +void PageClient::set_use_skia_painter() +{ + s_use_skia_painter = true; +} + void PageClient::set_use_experimental_cpu_transform_support() { s_use_experimental_cpu_transform_support = true; @@ -220,6 +226,7 @@ void PageClient::paint(Web::DevicePixelRect const& content_rect, Gfx::Bitmap& ta paint_options.accelerated_graphics_context = m_accelerated_graphics_context.ptr(); #endif paint_options.use_gpu_painter = s_use_gpu_painter; + paint_options.use_skia_painter = s_use_skia_painter; paint_options.use_experimental_cpu_transform_support = s_use_experimental_cpu_transform_support; page().top_level_traversable()->paint(content_rect, target, paint_options); } diff --git a/Userland/Services/WebContent/PageClient.h b/Userland/Services/WebContent/PageClient.h index c5cfaec131c..6b1eba91cf0 100644 --- a/Userland/Services/WebContent/PageClient.h +++ b/Userland/Services/WebContent/PageClient.h @@ -32,6 +32,7 @@ public: virtual ~PageClient() override; static void set_use_gpu_painter(); + static void set_use_skia_painter(); static void set_use_experimental_cpu_transform_support(); virtual void schedule_repaint() override;