canvas: Do not update ImageKey during canvas layout (#35719)

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
This commit is contained in:
Samson 2025-03-12 16:36:52 +01:00 committed by GitHub
parent f31043602a
commit 6f6840d63c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
17 changed files with 90 additions and 126 deletions

View file

@ -12,7 +12,6 @@ use serde::{Deserialize, Serialize};
use serde_bytes::ByteBuf;
use style::color::AbsoluteColor;
use style::properties::style_structs::Font as FontStyleStruct;
use webrender_api::ImageKey;
#[derive(Clone, Debug, Deserialize, Serialize)]
pub enum FillRule {
@ -32,11 +31,6 @@ pub enum CanvasMsg {
Close(CanvasId),
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct CanvasImageData {
pub image_key: ImageKey,
}
#[derive(Debug, Deserialize, Serialize)]
pub enum Canvas2dMsg {
Arc(Point2D<f32>, f32, f32, f32, bool),
@ -84,7 +78,7 @@ pub enum Canvas2dMsg {
#[derive(Clone, Debug, Deserialize, Serialize)]
pub enum FromLayoutMsg {
SendData(IpcSender<CanvasImageData>),
UpdateImage(IpcSender<()>),
}
#[derive(Clone, Debug, Deserialize, Serialize)]

View file

@ -8,6 +8,7 @@
use crossbeam_channel::Sender;
use euclid::default::Size2D;
use webrender_api::ImageKey;
use crate::canvas::CanvasId;
@ -17,7 +18,7 @@ pub mod webgl;
pub enum ConstellationCanvasMsg {
Create {
id_sender: Sender<CanvasId>,
sender: Sender<(CanvasId, ImageKey)>,
size: Size2D<u64>,
},
Exit,

View file

@ -25,6 +25,7 @@ use servo_url::{ImmutableOrigin, ServoUrl};
use style_traits::CSSPixel;
#[cfg(feature = "webgpu")]
use webgpu::{WebGPU, WebGPUResponse, wgc};
use webrender_api::ImageKey;
use crate::mem::MemoryReportResult;
use crate::{
@ -144,7 +145,7 @@ pub enum ScriptMsg {
/// 2D canvases may use the GPU and we don't want to give untrusted content access to the GPU.)
CreateCanvasPaintThread(
UntypedSize2D<u64>,
IpcSender<(IpcSender<CanvasMsg>, CanvasId)>,
IpcSender<(IpcSender<CanvasMsg>, CanvasId, ImageKey)>,
),
/// Notifies the constellation that this frame has received focus.
Focus,

View file

@ -120,7 +120,7 @@ pub enum LayoutElementType {
pub enum HTMLCanvasDataSource {
WebGL(ImageKey),
Image(IpcSender<CanvasMsg>),
Image((ImageKey, CanvasId, IpcSender<CanvasMsg>)),
WebGPU(ImageKey),
/// transparent black
Empty,
@ -130,7 +130,6 @@ pub struct HTMLCanvasData {
pub source: HTMLCanvasDataSource,
pub width: u32,
pub height: u32,
pub canvas_id: CanvasId,
}
pub struct SVGSVGData {