dependencies: Upgrade to WebRender 0.64 (#31486)

This brings the version of WebRender used in Servo up-to-date with Gecko
upstream. The big change here is that HiDPI is no longer handled via
WebRender. Instead this happens via a scale applied to the root layer in
the compositor. In addition to this change, various changes are made to
Servo to adapt to the new WebRender API.

Co-authored-by: Mukilan Thiyagarajan <mukilan@igalia.com>
This commit is contained in:
Martin Robinson 2024-03-14 18:40:54 +01:00 committed by GitHub
parent 4597aeae5f
commit ad37a54f59
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
102 changed files with 704 additions and 600 deletions

View file

@ -21,7 +21,7 @@ media-gstreamer = ["servo-media-gstreamer", "gstreamer"]
multiview = ["compositing/multiview", "constellation/multiview"]
native-bluetooth = ["bluetooth/native-bluetooth"]
no-wgl = ["canvas/no-wgl"]
no_static_freetype = ["webrender/no_static_freetype"]
dynamic_freetype = ["webrender/dynamic_freetype"]
profilemozjs = ["script/profilemozjs"]
refcell_backtrace = ["script/refcell_backtrace"]
webdriver = ["webdriver_server"]

View file

@ -88,7 +88,7 @@ use surfman::{GLApi, GLVersion};
#[cfg(target_os = "linux")]
use surfman::{NativeConnection, NativeContext};
use webrender::{RenderApiSender, ShaderPrecacheFlags};
use webrender_api::{DocumentId, FontInstanceKey, FontKey, ImageKey};
use webrender_api::{ColorF, DocumentId, FontInstanceKey, FontKey, FramePublishId, ImageKey};
use webrender_traits::{
WebrenderExternalImageHandlers, WebrenderExternalImageRegistry, WebrenderImageHandlerType,
};
@ -205,7 +205,7 @@ impl webrender_api::RenderNotifier for RenderNotifier {
_document_id: DocumentId,
_scrolled: bool,
composite_needed: bool,
_render_time_ns: Option<u64>,
_frame_publish_id: FramePublishId,
) {
self.compositor_proxy
.send(CompositorMsg::NewWebRenderFrameReady(composite_needed));
@ -310,7 +310,7 @@ where
let coordinates: compositing::windowing::EmbedderCoordinates = window.get_coordinates();
let device_pixel_ratio = coordinates.hidpi_factor.get();
let viewport_size = coordinates.viewport.size.to_f32() / device_pixel_ratio;
let viewport_size = coordinates.viewport.size().to_f32() / device_pixel_ratio;
let (mut webrender, webrender_api_sender) = {
let mut debug_flags = webrender::DebugFlags::empty();
@ -320,11 +320,17 @@ where
);
let render_notifier = Box::new(RenderNotifier::new(compositor_proxy.clone()));
webrender::Renderer::new(
let clear_color = servo_config::pref!(shell.background_color.rgba);
let clear_color = ColorF::new(
clear_color[0] as f32,
clear_color[1] as f32,
clear_color[2] as f32,
clear_color[3] as f32,
);
webrender::create_webrender_instance(
webrender_gl.clone(),
render_notifier,
webrender::RendererOptions {
device_pixel_ratio,
webrender::WebRenderOptions {
resource_override_path: opts.shaders_dir.clone(),
enable_aa: !opts.debug.disable_text_antialiasing,
debug_flags: debug_flags,
@ -336,7 +342,7 @@ where
enable_subpixel_aa: pref!(gfx.subpixel_text_antialiasing.enabled) &&
!opts.debug.disable_subpixel_text_antialiasing,
allow_texture_swizzling: pref!(gfx.texture_swizzling.enabled),
clear_color: None,
clear_color,
..Default::default()
},
None,
@ -345,7 +351,7 @@ where
};
let webrender_api = webrender_api_sender.create_api();
let webrender_document = webrender_api.add_document(coordinates.get_viewport().size);
let webrender_document = webrender_api.add_document(coordinates.get_viewport().size());
// Important that this call is done in a single-threaded fashion, we
// can't defer it after `create_constellation` has started.
@ -845,7 +851,7 @@ where
}
pub fn pinch_zoom_level(&self) -> f32 {
self.compositor.pinch_zoom_level()
self.compositor.pinch_zoom_level().get()
}
pub fn setup_logging(&self) {