Remove get_ipc_renderer from CanvasRenderingContext2D (#35285)

* Remove `get_ipc_renderer` from `CanvasRenderingContext2D`

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>

* fix warnings

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>

---------

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
This commit is contained in:
Samson 2025-02-04 19:49:51 +01:00 committed by GitHub
parent 62f1dbebff
commit 3a75e1205b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 21 additions and 24 deletions

View file

@ -2,10 +2,13 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use canvas_traits::canvas::{Canvas2dMsg, CanvasId, CanvasMsg}; use canvas_traits::canvas::{
Canvas2dMsg, CanvasId, CanvasImageData, CanvasMsg, FromLayoutMsg, FromScriptMsg,
};
use dom_struct::dom_struct; use dom_struct::dom_struct;
use euclid::default::{Point2D, Rect, Size2D}; use euclid::default::{Point2D, Rect, Size2D};
use ipc_channel::ipc::IpcSender; use ipc_channel::ipc::{IpcSender, IpcSharedMemory};
use profile_traits::ipc;
use servo_url::ServoUrl; use servo_url::ServoUrl;
use crate::canvas_state::CanvasState; use crate::canvas_state::CanvasState;
@ -104,11 +107,6 @@ impl CanvasRenderingContext2D {
self.canvas_state.send_canvas_2d_msg(msg) self.canvas_state.send_canvas_2d_msg(msg)
} }
// TODO: Remove this
pub(crate) fn get_ipc_renderer(&self) -> IpcSender<CanvasMsg> {
self.canvas_state.get_ipc_renderer().clone()
}
pub(crate) fn origin_is_clean(&self) -> bool { pub(crate) fn origin_is_clean(&self) -> bool {
self.canvas_state.origin_is_clean() self.canvas_state.origin_is_clean()
} }
@ -125,6 +123,19 @@ impl CanvasRenderingContext2D {
rect, rect,
) )
} }
pub(crate) fn fetch_data(&self) -> IpcSharedMemory {
let (sender, receiver) = ipc::channel(self.global().time_profiler_chan().clone()).unwrap();
let msg = CanvasMsg::FromScript(FromScriptMsg::SendPixels(sender), self.get_canvas_id());
self.canvas_state.get_ipc_renderer().send(msg).unwrap();
receiver.recv().unwrap()
}
pub(crate) fn send_data(&self, sender: IpcSender<CanvasImageData>) {
let msg = CanvasMsg::FromLayout(FromLayoutMsg::SendData(sender), self.get_canvas_id());
let _ = self.canvas_state.get_ipc_renderer().send(msg);
}
} }
pub(crate) trait LayoutCanvasRenderingContext2DHelpers { pub(crate) trait LayoutCanvasRenderingContext2DHelpers {

View file

@ -400,17 +400,7 @@ impl HTMLCanvasElement {
} }
let data = match self.context.borrow().as_ref() { let data = match self.context.borrow().as_ref() {
Some(CanvasContext::Context2d(context)) => { Some(CanvasContext::Context2d(context)) => Some(context.fetch_data()),
let (sender, receiver) =
ipc::channel(self.global().time_profiler_chan().clone()).unwrap();
let msg = CanvasMsg::FromScript(
FromScriptMsg::SendPixels(sender),
context.get_canvas_id(),
);
context.get_ipc_renderer().send(msg).unwrap();
Some(receiver.recv().unwrap())
},
Some(&CanvasContext::WebGL(_)) => { Some(&CanvasContext::WebGL(_)) => {
// TODO: add a method in WebGLRenderingContext to get the pixels. // TODO: add a method in WebGLRenderingContext to get the pixels.
return None; return None;

View file

@ -4,7 +4,7 @@
use std::cell::Cell; use std::cell::Cell;
use canvas_traits::canvas::{CanvasImageData, CanvasMsg, FromLayoutMsg}; use canvas_traits::canvas::CanvasImageData;
use dom_struct::dom_struct; use dom_struct::dom_struct;
use euclid::{Scale, Size2D}; use euclid::{Scale, Size2D};
use ipc_channel::ipc::IpcSender; use ipc_channel::ipc::IpcSender;
@ -56,11 +56,7 @@ impl PaintRenderingContext2D {
} }
pub(crate) fn send_data(&self, sender: IpcSender<CanvasImageData>) { pub(crate) fn send_data(&self, sender: IpcSender<CanvasImageData>) {
let msg = CanvasMsg::FromLayout( self.context.send_data(sender);
FromLayoutMsg::SendData(sender),
self.context.get_canvas_id(),
);
let _ = self.context.get_ipc_renderer().send(msg);
} }
pub(crate) fn take_missing_image_urls(&self) -> Vec<ServoUrl> { pub(crate) fn take_missing_image_urls(&self) -> Vec<ServoUrl> {