diff options
Diffstat (limited to 'src/servo/resource/image_cache_task.rs')
-rw-r--r-- | src/servo/resource/image_cache_task.rs | 200 |
1 files changed, 100 insertions, 100 deletions
diff --git a/src/servo/resource/image_cache_task.rs b/src/servo/resource/image_cache_task.rs index 9a83a3dccff..9007709677e 100644 --- a/src/servo/resource/image_cache_task.rs +++ b/src/servo/resource/image_cache_task.rs @@ -105,14 +105,14 @@ pub fn ImageCacheTask_(resource_task: ResourceTask, decoder_factory: DecoderFact }.run(); } - chan + move chan } fn SyncImageCacheTask(resource_task: ResourceTask) -> ImageCacheTask { let (chan, port) = stream(); let port_cell = Cell(move port); - do spawn |move port_cell| { + do spawn |move port_cell, move resource_task| { let port = port_cell.take(); let inner_cache = ImageCacheTask(resource_task); @@ -120,17 +120,19 @@ fn SyncImageCacheTask(resource_task: ResourceTask) -> ImageCacheTask { let msg: Msg = port.recv(); match move msg { - GetImage(move url, move response) => inner_cache.send(WaitForImage(url, response)), - Exit(move response) => { - inner_cache.send(Exit(response)); - break; - } - move msg => inner_cache.send(msg) + GetImage(move url, move response) => { + inner_cache.send(WaitForImage(move url, move response)); + } + Exit(move response) => { + inner_cache.send(Exit(move response)); + break; + } + move msg => inner_cache.send(move msg) } } } - return SharedChan(chan); + return move SharedChan(move chan); } struct ImageCache { @@ -178,17 +180,21 @@ impl ImageCache { #debug("image_cache_task: received: %?", msg); match move msg { - Prefetch(move url) => self.prefetch(url), - StorePrefetchedImageData(move url, move data) => self.store_prefetched_image_data(url, data), - Decode(move url) => self.decode(url), - StoreImage(move url, move image) => self.store_image(url, image), - GetImage(move url, move response) => self.get_image(url, response), - WaitForImage(move url, move response) => self.wait_for_image(url, response), - OnMsg(move handler) => msg_handlers += [copy handler], - Exit(move response) => { - assert self.need_exit.is_none(); - self.need_exit = Some(response); - } + Prefetch(move url) => self.prefetch(move url), + StorePrefetchedImageData(move url, move data) => { + self.store_prefetched_image_data(move url, move data); + } + Decode(move url) => self.decode(move url), + StoreImage(move url, move image) => self.store_image(move url, move image), + GetImage(move url, move response) => self.get_image(move url, move response), + WaitForImage(move url, move response) => { + self.wait_for_image(move url, move response) + } + OnMsg(move handler) => msg_handlers += [move handler], + Exit(move response) => { + assert self.need_exit.is_none(); + self.need_exit = Some(move response); + } } let need_exit = replace(&mut self.need_exit, None); @@ -223,14 +229,14 @@ impl ImageCache { } priv fn get_state(url: Url) -> ImageState { - match self.state_map.find(url) { - Some(state) => state, - None => Init + match move self.state_map.find(move url) { + Some(move state) => move state, + None => Init } } priv fn set_state(url: Url, state: ImageState) { - self.state_map.insert(url, state); + self.state_map.insert(move url, move state); } priv fn prefetch(url: Url) { @@ -240,22 +246,22 @@ impl ImageCache { let resource_task = self.resource_task; let url_cell = Cell(copy url); - do spawn |move url_cell| { + do spawn |move to_cache, move url_cell| { let url = url_cell.take(); #debug("image_cache_task: started fetch for %s", url.to_str()); let image = load_image_data(copy url, resource_task); let result = if image.is_ok() { - Ok(Cell(result::unwrap(image))) + Ok(Cell(result::unwrap(move image))) } else { Err(()) }; - to_cache.send(StorePrefetchedImageData(copy url, result)); + to_cache.send(StorePrefetchedImageData(copy url, move result)); #debug("image_cache_task: ended fetch for %s", (copy url).to_str()); } - self.set_state(url, Prefetching(DoNotDecode)); + self.set_state(move url, Prefetching(DoNotDecode)); } Prefetching(*) @@ -274,15 +280,15 @@ impl ImageCache { match data { Ok(data_cell) => { let data = data_cell.take(); - self.set_state(copy url, Prefetched(@Cell(data))); + self.set_state(copy url, Prefetched(@Cell(move data))); match next_step { - DoDecode => self.decode(url), + DoDecode => self.decode(move url), _ => () } } Err(*) => { self.set_state(copy url, Failed); - self.purge_waiters(url, || ImageFailed); + self.purge_waiters(move url, || ImageFailed); } } } @@ -298,48 +304,45 @@ impl ImageCache { } priv fn decode(url: Url) { - match self.get_state(copy url) { - Init => fail ~"decoding image before prefetch", + Init => fail ~"decoding image before prefetch", - Prefetching(DoNotDecode) => { - // We don't have the data yet, queue up the decode - self.set_state(url, Prefetching(DoDecode)) - } + Prefetching(DoNotDecode) => { + // We don't have the data yet, queue up the decode + self.set_state(move url, Prefetching(DoDecode)) + } - Prefetching(DoDecode) => { - // We don't have the data yet, but the decode request is queued up - } + Prefetching(DoDecode) => { + // We don't have the data yet, but the decode request is queued up + } - Prefetched(data_cell) => { - assert !data_cell.is_empty(); + Prefetched(data_cell) => { + assert !data_cell.is_empty(); - let data = data_cell.take(); - let to_cache = self.chan.clone(); - let url_cell = Cell(copy url); - let decode = self.decoder_factory(); + let data = data_cell.take(); + let to_cache = self.chan.clone(); + let url_cell = Cell(copy url); + let decode = self.decoder_factory(); + + do spawn |move url_cell, move decode, move data, move to_cache| { + let url = url_cell.take(); + #debug("image_cache_task: started image decode for %s", url.to_str()); + let image = decode(data); + let image = if image.is_some() { + Some(ARC(~option::unwrap(move image))) + } else { + None + }; + to_cache.send(StoreImage(copy url, move image)); + #debug("image_cache_task: ended image decode for %s", url.to_str()); + } - do spawn |move url_cell, move decode| { - let url = url_cell.take(); - #debug("image_cache_task: started image decode for %s", url.to_str()); - let image = decode(data); - let image = if image.is_some() { - Some(ARC(~option::unwrap(image))) - } else { - None - }; - to_cache.send(StoreImage(copy url, move image)); - #debug("image_cache_task: ended image decode for %s", url.to_str()); + self.set_state(move url, Decoding); } - self.set_state(url, Decoding); - } - - Decoding - | Decoded(*) - | Failed => { - // We've already begun decoding - } + Decoding | Decoded(*) | Failed => { + // We've already begun decoding + } } } @@ -350,11 +353,11 @@ impl ImageCache { match image { Some(image) => { self.set_state(copy url, Decoded(@clone_arc(&image))); - self.purge_waiters(url, || ImageReady(clone_arc(&image)) ); + self.purge_waiters(move url, || ImageReady(clone_arc(&image)) ); } None => { self.set_state(copy url, Failed); - self.purge_waiters(url, || ImageFailed ); + self.purge_waiters(move url, || ImageFailed ); } } } @@ -376,7 +379,7 @@ impl ImageCache { for waiters.each |response| { response.send(f()); } - self.wait_map.remove(url); + self.wait_map.remove(move url); } None => () } @@ -410,33 +413,30 @@ impl ImageCache { } priv fn wait_for_image(url: Url, response: Chan<ImageResponseMsg>) { - match self.get_state(copy url) { - Init => fail ~"request for image before prefetch", + Init => fail ~"request for image before prefetch", - Prefetching(DoNotDecode) - | Prefetched(*) => fail ~"request for image before decode", + Prefetching(DoNotDecode) | Prefetched(*) => fail ~"request for image before decode", - Prefetching(DoDecode) - | Decoding => { - // We don't have this image yet - match self.wait_map.find(copy url) { - Some(waiters) => { - vec::push(&mut *waiters, response); - } - None => { - self.wait_map.insert(url, @mut ~[response]); - } + Prefetching(DoDecode) | Decoding => { + // We don't have this image yet + match self.wait_map.find(copy url) { + Some(waiters) => { + vec::push(&mut *waiters, move response); + } + None => { + self.wait_map.insert(move url, @mut ~[move response]); + } + } } - } - Decoded(image) => { - response.send(ImageReady(clone_arc(image))); - } + Decoded(image) => { + response.send(ImageReady(clone_arc(image))); + } - Failed => { - response.send(ImageFailed); - } + Failed => { + response.send(ImageFailed); + } } } @@ -451,7 +451,7 @@ impl ImageCacheTask: ImageCacheTaskClient { fn exit() { let (response_chan, response_port) = stream(); - self.send(Exit(response_chan)); + self.send(Exit(move response_chan)); response_port.recv(); } @@ -459,21 +459,21 @@ impl ImageCacheTask: ImageCacheTaskClient { fn load_image_data(url: Url, resource_task: ResourceTask) -> Result<~[u8], ()> { let response_port = Port(); - resource_task.send(resource_task::Load(url, response_port.chan())); + resource_task.send(resource_task::Load(move url, response_port.chan())); let mut image_data = ~[]; loop { match response_port.recv() { - resource_task::Payload(data) => { - image_data += data; - } - resource_task::Done(result::Ok(*)) => { - return Ok(image_data); - } - resource_task::Done(result::Err(*)) => { - return Err(()); - } + resource_task::Payload(data) => { + image_data += data; + } + resource_task::Done(result::Ok(*)) => { + return Ok(move image_data); + } + resource_task::Done(result::Err(*)) => { + return Err(()); + } } } } |