diff --git a/Cargo.lock b/Cargo.lock index 07ea3bf6d4a..903b1152e7d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1082,9 +1082,11 @@ dependencies = [ "pollster", "range", "raqote", + "servo-tracing", "servo_arc", "servo_config", "stylo", + "tracing", "unicode-script", "vello", "vello_cpu", diff --git a/components/canvas/Cargo.toml b/components/canvas/Cargo.toml index 305cbb4a80a..ef0c84977f2 100644 --- a/components/canvas/Cargo.toml +++ b/components/canvas/Cargo.toml @@ -15,6 +15,7 @@ path = "lib.rs" vello = ["dep:vello", "dep:pollster", "dep:futures-intrusive", "dep:peniko"] vello_cpu = ["dep:vello_cpu", "dep:peniko"] raqote = ["dep:raqote", "dep:font-kit"] +tracing = ["dep:tracing"] [dependencies] app_units = { workspace = true } @@ -43,3 +44,6 @@ vello = { workspace = true, optional = true } vello_cpu = { workspace = true, optional = true } pollster = { version = "0.4", optional = true } futures-intrusive = { version = "0.5", optional = true } + +tracing = { workspace = true, optional = true } +servo-tracing = { workspace = true } diff --git a/components/canvas/canvas_data.rs b/components/canvas/canvas_data.rs index 33bf7fc0d5d..e4e9685cea8 100644 --- a/components/canvas/canvas_data.rs +++ b/components/canvas/canvas_data.rs @@ -641,7 +641,15 @@ impl CanvasData { /// Update image in WebRender pub(crate) fn update_image_rendering(&mut self) { - let (descriptor, data) = self.drawtarget.image_descriptor_and_serializable_data(); + let (descriptor, data) = { + #[cfg(feature = "tracing")] + let _span = tracing::trace_span!( + "image_descriptor_and_serializable_data", + servo_profiling = true, + ) + .entered(); + self.drawtarget.image_descriptor_and_serializable_data() + }; self.compositor_api .update_image(self.image_key, descriptor, data); @@ -732,7 +740,7 @@ impl CanvasData { /// It reads image data from the canvas /// canvas_size: The size of the canvas we're reading from /// read_rect: The area of the canvas we want to read from - #[allow(unsafe_code)] + #[servo_tracing::instrument(skip_all)] pub(crate) fn read_pixels(&mut self, read_rect: Option>) -> Snapshot { let canvas_size = self.drawtarget.get_size().cast(); diff --git a/components/canvas/canvas_paint_thread.rs b/components/canvas/canvas_paint_thread.rs index c98d91a53a3..fa467f02001 100644 --- a/components/canvas/canvas_paint_thread.rs +++ b/components/canvas/canvas_paint_thread.rs @@ -106,6 +106,7 @@ impl CanvasPaintThread { (create_sender, ipc_sender) } + #[servo_tracing::instrument(skip_all)] pub fn create_canvas(&mut self, size: Size2D) -> Option<(CanvasId, ImageKey)> { let canvas_id = self.next_canvas_id; self.next_canvas_id.0 += 1; @@ -117,6 +118,10 @@ impl CanvasPaintThread { Some((canvas_id, image_key)) } + #[servo_tracing::instrument( + skip_all, + fields(message = message.to_string()) + )] fn process_canvas_2d_message(&mut self, message: Canvas2dMsg, canvas_id: CanvasId) { match message { Canvas2dMsg::FillText( diff --git a/components/constellation/Cargo.toml b/components/constellation/Cargo.toml index 32d76b452db..a982bcbfe73 100644 --- a/components/constellation/Cargo.toml +++ b/components/constellation/Cargo.toml @@ -14,7 +14,7 @@ path = "lib.rs" [features] bluetooth = ["bluetooth_traits"] default = [] -tracing = ["dep:tracing"] +tracing = ["dep:tracing", "canvas/tracing"] webgpu = ["script_traits/webgpu"] vello = ["canvas/vello"] vello_cpu = ["canvas/vello_cpu"] diff --git a/components/shared/canvas/canvas.rs b/components/shared/canvas/canvas.rs index dee96f14e41..8bbc96f05ac 100644 --- a/components/shared/canvas/canvas.rs +++ b/components/shared/canvas/canvas.rs @@ -453,7 +453,7 @@ pub enum CanvasMsg { Close(CanvasId), } -#[derive(Debug, Deserialize, Serialize)] +#[derive(Debug, Deserialize, Serialize, strum::Display)] pub enum Canvas2dMsg { DrawImage( IpcSnapshot,