mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Add a task source for messages from GLPlayer thread
This commit is contained in:
parent
a9ad088e70
commit
95c3d52e7b
2 changed files with 35 additions and 4 deletions
|
@ -1297,7 +1297,7 @@ impl HTMLMediaElement {
|
|||
);
|
||||
|
||||
// GLPlayer thread setup
|
||||
let player_id = window
|
||||
let (player_id, image_receiver) = window
|
||||
.get_player_context()
|
||||
.glplayer_chan
|
||||
.map(|pipeline| {
|
||||
|
@ -1308,14 +1308,37 @@ impl HTMLMediaElement {
|
|||
.send(GLPlayerMsg::RegisterPlayer(image_sender))
|
||||
.unwrap();
|
||||
match image_receiver.recv().unwrap() {
|
||||
GLPlayerMsgForward::PlayerId(id) => id,
|
||||
GLPlayerMsgForward::PlayerId(id) => (id, Some(image_receiver)),
|
||||
_ => unreachable!(),
|
||||
}
|
||||
})
|
||||
.unwrap_or(0);
|
||||
.unwrap_or((0, None));
|
||||
|
||||
self.id.set(player_id);
|
||||
self.frame_renderer.lock().unwrap().id = player_id;
|
||||
|
||||
if let Some(image_receiver) = image_receiver {
|
||||
let trusted_node = Trusted::new(self);
|
||||
let (task_source, canceller) = window
|
||||
.task_manager()
|
||||
.media_element_task_source_with_canceller();
|
||||
ROUTER.add_route(
|
||||
image_receiver.to_opaque(),
|
||||
Box::new(move |message| {
|
||||
let msg: GLPlayerMsgForward = message.to().unwrap();
|
||||
let _this = trusted_node.clone();
|
||||
if let Err(err) = task_source.queue_with_canceller(
|
||||
task!(handle_glplayer_message: move || {
|
||||
trace!("GLPlayer message {:?}", msg);
|
||||
}),
|
||||
&canceller,
|
||||
) {
|
||||
warn!("Could not queue GL player message handler task {:?}", err);
|
||||
}
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue