mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
This reverts commitf2f5614ad6
. This is causing intermittent crashes:3104425501
Signed-off-by: Martin Robinson <mrobinson@igalia.com>
This commit is contained in:
parent
826e31eaa5
commit
48f8ff6236
28 changed files with 799 additions and 545 deletions
|
@ -16,7 +16,8 @@ use ipc_channel::ipc::{self, IpcSender};
|
|||
use ipc_channel::router::ROUTER;
|
||||
use log::warn;
|
||||
use net_traits::ResourceThreads;
|
||||
use webrender_traits::CrossProcessCompositorApi;
|
||||
use webrender_api::ImageKey;
|
||||
use webrender_traits::{ImageUpdate, WebRenderScriptApi};
|
||||
|
||||
use crate::canvas_data::*;
|
||||
|
||||
|
@ -25,26 +26,36 @@ pub enum AntialiasMode {
|
|||
None,
|
||||
}
|
||||
|
||||
pub trait WebrenderApi {
|
||||
/// Attempt to generate an [`ImageKey`], returning `None` in case of failure.
|
||||
fn generate_key(&self) -> Option<ImageKey>;
|
||||
fn update_images(&self, updates: Vec<ImageUpdate>);
|
||||
fn clone(&self) -> Box<dyn WebrenderApi>;
|
||||
}
|
||||
|
||||
pub struct CanvasPaintThread<'a> {
|
||||
canvases: HashMap<CanvasId, CanvasData<'a>>,
|
||||
next_canvas_id: CanvasId,
|
||||
compositor_api: CrossProcessCompositorApi,
|
||||
webrender_api: Box<dyn WebrenderApi>,
|
||||
font_context: Arc<FontContext>,
|
||||
}
|
||||
|
||||
impl<'a> CanvasPaintThread<'a> {
|
||||
fn new(
|
||||
compositor_api: CrossProcessCompositorApi,
|
||||
webrender_api: Box<dyn WebrenderApi>,
|
||||
system_font_service: Arc<SystemFontServiceProxy>,
|
||||
resource_threads: ResourceThreads,
|
||||
) -> CanvasPaintThread<'a> {
|
||||
// This is only used for web fonts and currently canvas never uses web fonts.
|
||||
let webrender_script_api = WebRenderScriptApi::dummy();
|
||||
|
||||
CanvasPaintThread {
|
||||
canvases: HashMap::new(),
|
||||
next_canvas_id: CanvasId(0),
|
||||
compositor_api: compositor_api.clone(),
|
||||
webrender_api,
|
||||
font_context: Arc::new(FontContext::new(
|
||||
system_font_service,
|
||||
compositor_api,
|
||||
webrender_script_api,
|
||||
resource_threads,
|
||||
)),
|
||||
}
|
||||
|
@ -53,7 +64,7 @@ impl<'a> CanvasPaintThread<'a> {
|
|||
/// Creates a new `CanvasPaintThread` and returns an `IpcSender` to
|
||||
/// communicate with it.
|
||||
pub fn start(
|
||||
compositor_api: CrossProcessCompositorApi,
|
||||
webrender_api: Box<dyn WebrenderApi + Send>,
|
||||
system_font_service: Arc<SystemFontServiceProxy>,
|
||||
resource_threads: ResourceThreads,
|
||||
) -> (Sender<ConstellationCanvasMsg>, IpcSender<CanvasMsg>) {
|
||||
|
@ -64,7 +75,7 @@ impl<'a> CanvasPaintThread<'a> {
|
|||
.name("Canvas".to_owned())
|
||||
.spawn(move || {
|
||||
let mut canvas_paint_thread = CanvasPaintThread::new(
|
||||
compositor_api, system_font_service, resource_threads);
|
||||
webrender_api, system_font_service, resource_threads);
|
||||
loop {
|
||||
select! {
|
||||
recv(msg_receiver) -> msg => {
|
||||
|
@ -130,7 +141,7 @@ impl<'a> CanvasPaintThread<'a> {
|
|||
|
||||
let canvas_data = CanvasData::new(
|
||||
size,
|
||||
self.compositor_api.clone(),
|
||||
self.webrender_api.clone(),
|
||||
antialias,
|
||||
self.font_context.clone(),
|
||||
);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue