mirror of
https://github.com/servo/servo.git
synced 2025-08-04 13:10:20 +01:00
Auto merge of #10767 - akhan7:command, r=jdm
Added Store Command to ImageCache Task Implemented last bullet of [Image conformance student project: Initial Steps](https://github.com/servo/servo/wiki/Image-load-conformance-student-project) <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/10767) <!-- Reviewable:end -->
This commit is contained in:
commit
47efbea666
2 changed files with 32 additions and 1 deletions
|
@ -394,6 +394,9 @@ impl ImageCache {
|
||||||
let result = self.get_image_or_meta_if_available(url, use_placeholder);
|
let result = self.get_image_or_meta_if_available(url, use_placeholder);
|
||||||
consumer.send(result).unwrap();
|
consumer.send(result).unwrap();
|
||||||
}
|
}
|
||||||
|
ImageCacheCommand::StoreDecodeImage(url, image_vector) => {
|
||||||
|
self.store_decode_image(url, image_vector);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
None
|
None
|
||||||
|
@ -588,6 +591,23 @@ impl ImageCache {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn store_decode_image(&mut self,
|
||||||
|
ref_url: Url,
|
||||||
|
loaded_bytes: Vec<u8>) {
|
||||||
|
let (cache_result, load_key, _) = self.pending_loads.get_cached(Arc::new(ref_url));
|
||||||
|
assert!(cache_result == CacheResult::Miss);
|
||||||
|
let action = ResponseAction::DataAvailable(loaded_bytes);
|
||||||
|
let _ = self.progress_sender.send(ResourceLoadInfo {
|
||||||
|
action: action,
|
||||||
|
key: load_key,
|
||||||
|
});
|
||||||
|
let action = ResponseAction::ResponseComplete(Ok(()));
|
||||||
|
let _ = self.progress_sender.send(ResourceLoadInfo {
|
||||||
|
action: action,
|
||||||
|
key: load_key,
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create a new image cache.
|
/// Create a new image cache.
|
||||||
|
|
|
@ -92,6 +92,10 @@ pub enum ImageCacheCommand {
|
||||||
/// state and but its metadata has been made available, it will be sent as a response.
|
/// state and but its metadata has been made available, it will be sent as a response.
|
||||||
GetImageOrMetadataIfAvailable(Url, UsePlaceholder, IpcSender<Result<ImageOrMetadataAvailable, ImageState>>),
|
GetImageOrMetadataIfAvailable(Url, UsePlaceholder, IpcSender<Result<ImageOrMetadataAvailable, ImageState>>),
|
||||||
|
|
||||||
|
/// Instruct the cache to store this data as a newly-complete network request and continue
|
||||||
|
/// decoding the result into pixel data
|
||||||
|
StoreDecodeImage(Url, Vec<u8>),
|
||||||
|
|
||||||
/// Clients must wait for a response before shutting down the ResourceThread
|
/// Clients must wait for a response before shutting down the ResourceThread
|
||||||
Exit(IpcSender<()>),
|
Exit(IpcSender<()>),
|
||||||
}
|
}
|
||||||
|
@ -157,6 +161,14 @@ impl ImageCacheThread {
|
||||||
receiver.recv().unwrap()
|
receiver.recv().unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Decode the given image bytes and cache the result for the given URL.
|
||||||
|
pub fn store_complete_image_bytes(&self,
|
||||||
|
url: Url,
|
||||||
|
image_data: Vec<u8>) {
|
||||||
|
let msg = ImageCacheCommand::StoreDecodeImage(url, image_data);
|
||||||
|
self.chan.send(msg).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
/// Shutdown the image cache thread.
|
/// Shutdown the image cache thread.
|
||||||
pub fn exit(&self) {
|
pub fn exit(&self) {
|
||||||
let (response_chan, response_port) = ipc::channel().unwrap();
|
let (response_chan, response_port) = ipc::channel().unwrap();
|
||||||
|
@ -164,4 +176,3 @@ impl ImageCacheThread {
|
||||||
response_port.recv().unwrap();
|
response_port.recv().unwrap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue