aboutsummaryrefslogtreecommitdiffstats
path: root/components/servo
diff options
context:
space:
mode:
authorMartin Robinson <mrobinson@igalia.com>2023-09-10 14:38:56 +0200
committerGitHub <noreply@github.com>2023-09-10 12:38:56 +0000
commita9d37cb85ac2c55fc630fccffe1ba60ff00f555b (patch)
treee072f86743d0ee71f908135cb63484f84c8370f4 /components/servo
parentc079acb3c31e695e9f16b96b9bd61b2a1c182796 (diff)
downloadservo-a9d37cb85ac2c55fc630fccffe1ba60ff00f555b.tar.gz
servo-a9d37cb85ac2c55fc630fccffe1ba60ff00f555b.zip
Upgrade WebRender to e491e1ae637b2eed1e7195855d88357e5eb3ddf9 (#30323)
* Upgrade vendored version of WebRender * Patch WebRender: upgrade version of gleam * Restore hit testing implementation * Fix WebRender warnings * Adapt Servo to new WebRender * Update results * Add a workaround for #30313 This slightly expands text boundaries in order to take into account the fact that layout isn't measuring glyph boundaries.
Diffstat (limited to 'components/servo')
-rw-r--r--components/servo/lib.rs62
1 files changed, 26 insertions, 36 deletions
diff --git a/components/servo/lib.rs b/components/servo/lib.rs
index 76111be7627..175bc33777a 100644
--- a/components/servo/lib.rs
+++ b/components/servo/lib.rs
@@ -29,11 +29,14 @@ pub use devtools_traits;
pub use embedder_traits;
pub use euclid;
pub use gfx;
+pub use gleam::gl;
pub use ipc_channel;
+pub use keyboard_types;
pub use layout_thread_2013;
pub use layout_thread_2020;
pub use media;
pub use msg;
+pub use msg::constellation_msg::TopLevelBrowsingContextId as BrowserId;
pub use net;
pub use net_traits;
pub use profile;
@@ -41,25 +44,18 @@ pub use profile_traits;
pub use script;
pub use script_layout_interface;
pub use script_traits;
+pub use servo_config as config;
pub use servo_config;
pub use servo_geometry;
+pub use servo_url as url;
pub use servo_url;
pub use style;
pub use style_traits;
pub use webgpu;
pub use webrender_api;
-use webrender_api::{DocumentId, FontInstanceKey, FontKey, ImageKey, RenderApiSender};
pub use webrender_surfman;
pub use webrender_traits;
-#[cfg(feature = "webdriver")]
-fn webdriver(port: u16, constellation: Sender<ConstellationMsg>) {
- webdriver_server::start_server(port, constellation);
-}
-
-#[cfg(not(feature = "webdriver"))]
-fn webdriver(_port: u16, _constellation: Sender<ConstellationMsg>) {}
-
use bluetooth::BluetoothThreadFactory;
use bluetooth_traits::BluetoothRequest;
use canvas::canvas_paint_thread::{self, CanvasPaintThread};
@@ -84,7 +80,7 @@ use constellation::{FromCompositorLogger, FromScriptLogger};
use crossbeam_channel::{unbounded, Sender};
use embedder_traits::{EmbedderMsg, EmbedderProxy, EmbedderReceiver, EventLoopWaker};
use env_logger::Builder as EnvLoggerBuilder;
-use euclid::{Scale, Size2D};
+use euclid::Scale;
#[cfg(all(
not(target_os = "windows"),
not(target_os = "ios"),
@@ -119,16 +115,19 @@ use std::rc::Rc;
use std::sync::Arc;
use std::sync::Mutex;
use surfman::GLApi;
-use webrender::ShaderPrecacheFlags;
+use webrender::{RenderApiSender, ShaderPrecacheFlags};
+use webrender_api::{DocumentId, FontInstanceKey, FontKey, ImageKey};
use webrender_traits::WebrenderExternalImageHandlers;
use webrender_traits::WebrenderExternalImageRegistry;
use webrender_traits::WebrenderImageHandlerType;
-pub use gleam::gl;
-pub use keyboard_types;
-pub use msg::constellation_msg::TopLevelBrowsingContextId as BrowserId;
-pub use servo_config as config;
-pub use servo_url as url;
+#[cfg(feature = "webdriver")]
+fn webdriver(port: u16, constellation: Sender<ConstellationMsg>) {
+ webdriver_server::start_server(port, constellation);
+}
+
+#[cfg(not(feature = "webdriver"))]
+fn webdriver(_port: u16, _constellation: Sender<ConstellationMsg>) {}
#[cfg(feature = "media-gstreamer")]
mod media_platform {
@@ -217,9 +216,11 @@ impl webrender_api::RenderNotifier for RenderNotifier {
Box::new(RenderNotifier::new(self.compositor_proxy.clone()))
}
- fn wake_up(&self) {
- self.compositor_proxy
- .recomposite(CompositingReason::NewWebRenderFrame);
+ fn wake_up(&self, composite_needed: bool) {
+ if composite_needed {
+ self.compositor_proxy
+ .recomposite(CompositingReason::NewWebRenderFrame);
+ }
}
fn new_frame_ready(
@@ -233,7 +234,7 @@ impl webrender_api::RenderNotifier for RenderNotifier {
self.compositor_proxy
.send(CompositorMsg::NewScrollFrameReady(composite_needed));
} else {
- self.wake_up();
+ self.wake_up(true);
}
}
}
@@ -333,7 +334,7 @@ where
None
};
- let coordinates = window.get_coordinates();
+ 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;
@@ -345,10 +346,6 @@ where
);
let render_notifier = Box::new(RenderNotifier::new(compositor_proxy.clone()));
-
- // Cast from `DeviceIndependentPixel` to `DevicePixel`
- let window_size = Size2D::from_untyped(viewport_size.to_i32().to_untyped());
-
webrender::Renderer::new(
webrender_gl.clone(),
render_notifier,
@@ -369,20 +366,12 @@ where
..Default::default()
},
None,
- window_size,
)
.expect("Unable to initialize webrender!")
};
let webrender_api = webrender_api_sender.create_api();
- let wr_document_layer = 0; //TODO
- let webrender_document =
- webrender_api.add_document(coordinates.framebuffer, wr_document_layer);
- webrender_api.set_document_view(
- webrender_document,
- coordinates.get_viewport(),
- coordinates.hidpi_factor.get(),
- );
+ 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.
@@ -575,8 +564,9 @@ where
self.compositor.on_wheel_event(delta, location);
},
- EmbedderEvent::Scroll(delta, cursor, phase) => {
- self.compositor.on_scroll_event(delta, cursor, phase);
+ EmbedderEvent::Scroll(scroll_location, cursor, phase) => {
+ self.compositor
+ .on_scroll_event(scroll_location, cursor, phase);
},
EmbedderEvent::Zoom(magnification) => {