mirror of
https://github.com/servo/servo.git
synced 2025-07-24 15:50:21 +01:00
script: Make the ImageCacheTask
use IPC.
This necessitated getting rid of the boxed trait object that was being be passed between the script task and the image cache task.
This commit is contained in:
parent
380de1ba82
commit
82b53d83ff
11 changed files with 102 additions and 61 deletions
|
@ -2,6 +2,8 @@
|
|||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
use ipc_channel::ipc::{self, IpcSender};
|
||||
use ipc_channel::router::ROUTER;
|
||||
use net_traits::image::base::{Image, load_from_memory};
|
||||
use net_traits::image_cache_task::{ImageState, ImageCacheTask, ImageCacheChan, ImageCacheCommand};
|
||||
use net_traits::image_cache_task::{ImageCacheResult, ImageResponse, UsePlaceholder};
|
||||
|
@ -69,11 +71,11 @@ impl CompletedLoad {
|
|||
/// of an image changes.
|
||||
struct ImageListener {
|
||||
sender: ImageCacheChan,
|
||||
responder: Option<Box<ImageResponder>>,
|
||||
responder: Option<ImageResponder>,
|
||||
}
|
||||
|
||||
impl ImageListener {
|
||||
fn new(sender: ImageCacheChan, responder: Option<Box<ImageResponder>>) -> ImageListener {
|
||||
fn new(sender: ImageCacheChan, responder: Option<ImageResponder>) -> ImageListener {
|
||||
ImageListener {
|
||||
sender: sender,
|
||||
responder: responder,
|
||||
|
@ -153,7 +155,7 @@ enum SelectResult {
|
|||
|
||||
impl ImageCache {
|
||||
fn run(&mut self) {
|
||||
let mut exit_sender: Option<Sender<()>> = None;
|
||||
let mut exit_sender: Option<IpcSender<()>> = None;
|
||||
|
||||
loop {
|
||||
let result = {
|
||||
|
@ -203,7 +205,7 @@ impl ImageCache {
|
|||
}
|
||||
|
||||
// Handle a request from a client
|
||||
fn handle_cmd(&mut self, cmd: ImageCacheCommand) -> Option<Sender<()>> {
|
||||
fn handle_cmd(&mut self, cmd: ImageCacheCommand) -> Option<IpcSender<()>> {
|
||||
match cmd {
|
||||
ImageCacheCommand::Exit(sender) => {
|
||||
return Some(sender);
|
||||
|
@ -303,7 +305,7 @@ impl ImageCache {
|
|||
fn request_image(&mut self,
|
||||
url: Url,
|
||||
result_chan: ImageCacheChan,
|
||||
responder: Option<Box<ImageResponder>>) {
|
||||
responder: Option<ImageResponder>) {
|
||||
let image_listener = ImageListener::new(result_chan, responder);
|
||||
|
||||
// Check if already completed
|
||||
|
@ -343,7 +345,7 @@ impl ImageCache {
|
|||
|
||||
/// Create a new image cache.
|
||||
pub fn new_image_cache_task(resource_task: ResourceTask) -> ImageCacheTask {
|
||||
let (cmd_sender, cmd_receiver) = channel();
|
||||
let (ipc_command_sender, ipc_command_receiver) = ipc::channel().unwrap();
|
||||
let (progress_sender, progress_receiver) = channel();
|
||||
let (decoder_sender, decoder_receiver) = channel();
|
||||
|
||||
|
@ -370,6 +372,9 @@ pub fn new_image_cache_task(resource_task: ResourceTask) -> ImageCacheTask {
|
|||
}
|
||||
};
|
||||
|
||||
// Ask the router to proxy messages received over IPC to us.
|
||||
let cmd_receiver = ROUTER.route_ipc_receiver_to_new_mpsc_receiver(ipc_command_receiver);
|
||||
|
||||
let mut cache = ImageCache {
|
||||
cmd_receiver: cmd_receiver,
|
||||
progress_sender: progress_sender,
|
||||
|
@ -386,6 +391,6 @@ pub fn new_image_cache_task(resource_task: ResourceTask) -> ImageCacheTask {
|
|||
cache.run();
|
||||
});
|
||||
|
||||
ImageCacheTask::new(cmd_sender)
|
||||
ImageCacheTask::new(ipc_command_sender)
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue