From 02893770910bb1db27a5a3df80b0c98eeaa7d215 Mon Sep 17 00:00:00 2001 From: Martin Robinson Date: Tue, 28 May 2024 14:48:55 +0200 Subject: [PATCH] Move `RenderingContext` to `webrender_traits` (#32386) The `gfx_traits` crate is gradually become just about text and fonts and this is one of the few things there that is standing in the way of this. Eventually `webrender_traits` will be the general cross-process compositor API, so this sort of makes sense as well. --- Cargo.lock | 1 + components/canvas/webgl_mode/inprocess.rs | 4 ++-- components/compositing/compositor.rs | 4 ++-- components/compositing/lib.rs | 2 +- components/compositing/windowing.rs | 2 +- components/gfx/lib.rs | 1 - components/servo/lib.rs | 4 +--- components/shared/webrender/Cargo.toml | 2 ++ components/shared/webrender/lib.rs | 3 +++ components/{gfx => shared/webrender}/rendering_context.rs | 0 ports/jniapi/src/simpleservo.rs | 2 +- ports/servoshell/headed_window.rs | 2 +- ports/servoshell/headless_window.rs | 2 +- ports/servoshell/minibrowser.rs | 2 +- 14 files changed, 17 insertions(+), 14 deletions(-) rename components/{gfx => shared/webrender}/rendering_context.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index dd5e1dde95a..92eefdee30f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7180,6 +7180,7 @@ dependencies = [ "libc", "log", "serde", + "surfman", "webrender_api", ] diff --git a/components/canvas/webgl_mode/inprocess.rs b/components/canvas/webgl_mode/inprocess.rs index fba01b39411..d393fed476b 100644 --- a/components/canvas/webgl_mode/inprocess.rs +++ b/components/canvas/webgl_mode/inprocess.rs @@ -8,7 +8,6 @@ use std::sync::{Arc, Mutex}; use canvas_traits::webgl::{webgl_channel, WebGLContextId, WebGLMsg, WebGLThreads}; use euclid::default::Size2D; use fnv::FnvHashMap; -use gfx::rendering_context::RenderingContext; use log::debug; use sparkle::gl::GlType; use surfman::chains::{SwapChainAPI, SwapChains, SwapChainsAPI}; @@ -16,7 +15,8 @@ use surfman::{Device, SurfaceInfo, SurfaceTexture}; use webrender::RenderApiSender; use webrender_api::DocumentId; use webrender_traits::{ - WebrenderExternalImageApi, WebrenderExternalImageRegistry, WebrenderImageSource, + RenderingContext, WebrenderExternalImageApi, WebrenderExternalImageRegistry, + WebrenderImageSource, }; use webxr::SurfmanGL as WebXRSurfman; use webxr_api::LayerGrandManager as WebXRLayerGrandManager; diff --git a/components/compositing/compositor.rs b/components/compositing/compositor.rs index aa118066d49..0dde3e1ae28 100644 --- a/components/compositing/compositor.rs +++ b/components/compositing/compositor.rs @@ -21,7 +21,6 @@ use crossbeam_channel::Sender; use embedder_traits::Cursor; use euclid::{Point2D, Rect, Scale, Transform3D, Vector2D}; use fnv::{FnvHashMap, FnvHashSet}; -use gfx::rendering_context::RenderingContext; use image::{DynamicImage, ImageFormat}; use ipc_channel::ipc; use libc::c_void; @@ -49,7 +48,8 @@ use webrender_api::{ use webrender_traits::display_list::{HitTestInfo, ScrollTree}; use webrender_traits::{ CanvasToCompositorMsg, CompositorHitTestResult, FontToCompositorMsg, ImageUpdate, - NetToCompositorMsg, ScriptToCompositorMsg, SerializedImageUpdate, UntrustedNodeAddress, + NetToCompositorMsg, RenderingContext, ScriptToCompositorMsg, SerializedImageUpdate, + UntrustedNodeAddress, }; use crate::gl::RenderTargetInfo; diff --git a/components/compositing/lib.rs b/components/compositing/lib.rs index 1be60c17691..d28e5e853b4 100644 --- a/components/compositing/lib.rs +++ b/components/compositing/lib.rs @@ -8,10 +8,10 @@ use std::rc::Rc; use compositing_traits::{CompositorProxy, CompositorReceiver, ConstellationMsg}; use crossbeam_channel::Sender; -use gfx::rendering_context::RenderingContext; use profile_traits::{mem, time}; use webrender::RenderApi; use webrender_api::DocumentId; +use webrender_traits::RenderingContext; pub use crate::compositor::{CompositeTarget, IOCompositor, ShutdownState}; diff --git a/components/compositing/windowing.rs b/components/compositing/windowing.rs index 62d3ee7459c..8e9b89ccadd 100644 --- a/components/compositing/windowing.rs +++ b/components/compositing/windowing.rs @@ -10,7 +10,6 @@ use std::time::Duration; use base::id::{PipelineId, TopLevelBrowsingContextId}; use embedder_traits::{EmbedderProxy, EventLoopWaker}; use euclid::Scale; -use gfx::rendering_context::RenderingContext; use keyboard_types::KeyboardEvent; use libc::c_void; use script_traits::{ @@ -22,6 +21,7 @@ use servo_url::ServoUrl; use style_traits::DevicePixel; use webrender_api::units::{DeviceIntPoint, DeviceIntRect, DeviceIntSize, DevicePoint, DeviceRect}; use webrender_api::ScrollLocation; +use webrender_traits::RenderingContext; #[derive(Clone)] pub enum MouseWindowEvent { diff --git a/components/gfx/lib.rs b/components/gfx/lib.rs index 694cbfc006a..fc4533d4d4b 100644 --- a/components/gfx/lib.rs +++ b/components/gfx/lib.rs @@ -11,5 +11,4 @@ pub mod font_store; pub mod font_template; #[allow(unsafe_code)] pub mod platform; -pub mod rendering_context; pub mod text; diff --git a/components/servo/lib.rs b/components/servo/lib.rs index 533abeeba73..d6b3d38590b 100644 --- a/components/servo/lib.rs +++ b/components/servo/lib.rs @@ -65,8 +65,6 @@ use euclid::Scale; ))] use gaol::sandbox::{ChildSandbox, ChildSandboxMethods}; use gfx::font_cache_thread::FontCacheThread; -pub use gfx::rendering_context; -use gfx::rendering_context::RenderingContext; pub use gleam::gl; use ipc_channel::ipc::{self, IpcSender}; use log::{error, trace, warn, Log, Metadata, Record}; @@ -94,7 +92,7 @@ use webrender_api::{ NativeFontHandle, }; use webrender_traits::{ - CanvasToCompositorMsg, FontToCompositorMsg, ImageUpdate, WebRenderFontApi, + CanvasToCompositorMsg, FontToCompositorMsg, ImageUpdate, RenderingContext, WebRenderFontApi, WebrenderExternalImageHandlers, WebrenderExternalImageRegistry, WebrenderImageHandlerType, }; pub use { diff --git a/components/shared/webrender/Cargo.toml b/components/shared/webrender/Cargo.toml index 158872b0494..4031e3815cc 100644 --- a/components/shared/webrender/Cargo.toml +++ b/components/shared/webrender/Cargo.toml @@ -20,3 +20,5 @@ log = { workspace = true } libc = { workspace = true } webrender_api = { workspace = true } serde = { workspace = true } +surfman = { workspace = true } + diff --git a/components/shared/webrender/lib.rs b/components/shared/webrender/lib.rs index 2eb252e37a4..e5a794fccf0 100644 --- a/components/shared/webrender/lib.rs +++ b/components/shared/webrender/lib.rs @@ -5,6 +5,7 @@ #![deny(unsafe_code)] pub mod display_list; +pub mod rendering_context; use std::collections::HashMap; use std::sync::{Arc, Mutex}; @@ -26,6 +27,8 @@ use webrender_api::{ ImageKey, NativeFontHandle, PipelineId as WebRenderPipelineId, }; +pub use crate::rendering_context::RenderingContext; + /// This trait is used as a bridge between the different GL clients /// in Servo that handles WebRender ExternalImages and the WebRender /// ExternalImageHandler API. diff --git a/components/gfx/rendering_context.rs b/components/shared/webrender/rendering_context.rs similarity index 100% rename from components/gfx/rendering_context.rs rename to components/shared/webrender/rendering_context.rs diff --git a/ports/jniapi/src/simpleservo.rs b/ports/jniapi/src/simpleservo.rs index cf9a65bbe02..9ad9a10e593 100644 --- a/ports/jniapi/src/simpleservo.rs +++ b/ports/jniapi/src/simpleservo.rs @@ -30,7 +30,6 @@ use servo::embedder_traits::{ }; use servo::euclid::{Point2D, Rect, Scale, Size2D, Vector2D}; use servo::keyboard_types::{Key, KeyState, KeyboardEvent}; -use servo::rendering_context::RenderingContext; pub use servo::script_traits::{MediaSessionActionType, MouseButton}; use servo::script_traits::{TouchEventType, TouchId, TraversalDirection}; use servo::servo_config::{opts, pref}; @@ -38,6 +37,7 @@ use servo::servo_url::ServoUrl; pub use servo::webrender_api::units::DeviceIntRect; use servo::webrender_api::units::DevicePixel; use servo::webrender_api::ScrollLocation; +use servo::webrender_traits::RenderingContext; use servo::{self, gl, Servo, TopLevelBrowsingContextId}; use surfman::{Connection, SurfaceType}; diff --git a/ports/servoshell/headed_window.rs b/ports/servoshell/headed_window.rs index 3098fa2381b..8cec4d95891 100644 --- a/ports/servoshell/headed_window.rs +++ b/ports/servoshell/headed_window.rs @@ -16,13 +16,13 @@ use servo::compositing::windowing::{ }; use servo::embedder_traits::Cursor; use servo::keyboard_types::{Key, KeyState, KeyboardEvent}; -use servo::rendering_context::RenderingContext; use servo::script_traits::{TouchEventType, WheelDelta, WheelMode}; use servo::servo_config::{opts, pref}; use servo::servo_geometry::DeviceIndependentPixel; use servo::style_traits::DevicePixel; use servo::webrender_api::units::{DeviceIntPoint, DeviceIntRect, DeviceIntSize}; use servo::webrender_api::ScrollLocation; +use servo::webrender_traits::RenderingContext; use surfman::{Connection, Context, Device, SurfaceType}; #[cfg(target_os = "windows")] use winapi; diff --git a/ports/servoshell/headless_window.rs b/ports/servoshell/headless_window.rs index 67d32c02cf6..1420f45c080 100644 --- a/ports/servoshell/headless_window.rs +++ b/ports/servoshell/headless_window.rs @@ -14,10 +14,10 @@ use log::warn; use servo::compositing::windowing::{ AnimationState, EmbedderCoordinates, EmbedderEvent, WindowMethods, }; -use servo::rendering_context::RenderingContext; use servo::servo_geometry::DeviceIndependentPixel; use servo::style_traits::DevicePixel; use servo::webrender_api::units::{DeviceIntRect, DeviceIntSize}; +use servo::webrender_traits::RenderingContext; use surfman::{Connection, Context, Device, SurfaceType}; use crate::events_loop::WakerEvent; diff --git a/ports/servoshell/minibrowser.rs b/ports/servoshell/minibrowser.rs index a79f65e9d26..cb6f263c299 100644 --- a/ports/servoshell/minibrowser.rs +++ b/ports/servoshell/minibrowser.rs @@ -18,11 +18,11 @@ use gleam::gl; use glow::NativeFramebuffer; use log::{trace, warn}; use servo::compositing::windowing::EmbedderEvent; -use servo::rendering_context::RenderingContext; use servo::script_traits::TraversalDirection; use servo::servo_geometry::DeviceIndependentPixel; use servo::servo_url::ServoUrl; use servo::style_traits::DevicePixel; +use servo::webrender_traits::RenderingContext; use winit::event::{ElementState, MouseButton}; use crate::egui_glue::EguiGlow;