diff options
author | Víctor Manuel Jáquez Leal <vjaquez@igalia.com> | 2019-06-14 14:42:44 +0200 |
---|---|---|
committer | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2019-07-04 10:25:48 +0200 |
commit | 95c3d52e7bbc400e1109887a39a561840ec6119a (patch) | |
tree | 6915084e7e613331a90342dde6246666db1eedb7 /components/script/dom/htmlmediaelement.rs | |
parent | a9ad088e707a637f9f7e223cc2a0419af41f726d (diff) | |
download | servo-95c3d52e7bbc400e1109887a39a561840ec6119a.tar.gz servo-95c3d52e7bbc400e1109887a39a561840ec6119a.zip |
Add a task source for messages from GLPlayer thread
Diffstat (limited to 'components/script/dom/htmlmediaelement.rs')
-rw-r--r-- | components/script/dom/htmlmediaelement.rs | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs index e0dd3d57c8f..cee7259af06 100644 --- a/components/script/dom/htmlmediaelement.rs +++ b/components/script/dom/htmlmediaelement.rs @@ -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(()) } |