aboutsummaryrefslogtreecommitdiffstats
path: root/components/net/image_cache.rs
diff options
context:
space:
mode:
authorAlan Jeffrey <ajeffrey@mozilla.com>2017-04-03 14:35:57 -0500
committerAlan Jeffrey <ajeffrey@mozilla.com>2017-06-07 13:49:30 -0500
commitfd17dcd60442e71f75010a34c6bcfe1c04aca3e5 (patch)
treee367aa4202f2da0e6e0dac33fbdcd9ca48e2f92f /components/net/image_cache.rs
parent7e273d6c9b86d6ffbf216e84ae7326976888e5ef (diff)
downloadservo-fd17dcd60442e71f75010a34c6bcfe1c04aca3e5.tar.gz
servo-fd17dcd60442e71f75010a34c6bcfe1c04aca3e5.zip
Implemented the plumbing for paint worklets.
Diffstat (limited to 'components/net/image_cache.rs')
-rw-r--r--components/net/image_cache.rs36
1 files changed, 15 insertions, 21 deletions
diff --git a/components/net/image_cache.rs b/components/net/image_cache.rs
index b8467e5a461..d0c31eb23b5 100644
--- a/components/net/image_cache.rs
+++ b/components/net/image_cache.rs
@@ -57,9 +57,18 @@ fn get_placeholder_image(webrender_api: &webrender_traits::RenderApi, path: &Pat
let mut image_data = vec![];
try!(file.read_to_end(&mut image_data));
let mut image = load_from_memory(&image_data).unwrap();
+ set_webrender_image_key(webrender_api, &mut image);
+ Ok(Arc::new(image))
+}
+
+fn set_webrender_image_key(webrender_api: &webrender_traits::RenderApi, image: &mut Image) {
+ if image.id.is_some() { return; }
let format = convert_format(image.format);
let mut bytes = Vec::new();
bytes.extend_from_slice(&*image.bytes);
+ if format == webrender_traits::ImageFormat::RGBA8 {
+ premultiply(bytes.as_mut_slice());
+ }
let descriptor = webrender_traits::ImageDescriptor {
width: image.width,
height: image.height,
@@ -72,7 +81,6 @@ fn get_placeholder_image(webrender_api: &webrender_traits::RenderApi, path: &Pat
let image_key = webrender_api.generate_image_key();
webrender_api.add_image(image_key, descriptor, data, None);
image.id = Some(image_key);
- Ok(Arc::new(image))
}
// TODO(gw): This is a port of the old is_image_opaque code from WR.
@@ -338,26 +346,7 @@ impl ImageCacheStore {
};
match load_result {
- LoadResult::Loaded(ref mut image) => {
- let format = convert_format(image.format);
- let mut bytes = Vec::new();
- bytes.extend_from_slice(&*image.bytes);
- if format == webrender_traits::ImageFormat::RGBA8 {
- premultiply(bytes.as_mut_slice());
- }
- let descriptor = webrender_traits::ImageDescriptor {
- width: image.width,
- height: image.height,
- stride: None,
- format: format,
- offset: 0,
- is_opaque: is_image_opaque(format, &bytes),
- };
- let data = webrender_traits::ImageData::new(bytes);
- let image_key = self.webrender_api.generate_image_key();
- self.webrender_api.add_image(image_key, descriptor, data, None);
- image.id = Some(image_key);
- }
+ LoadResult::Loaded(ref mut image) => set_webrender_image_key(&self.webrender_api, image),
LoadResult::PlaceholderLoaded(..) | LoadResult::None => {}
}
@@ -576,4 +565,9 @@ impl ImageCache for ImageCacheImpl {
}
}
}
+
+ /// Ensure an image has a webrender key.
+ fn set_webrender_image_key(&self, image: &mut Image) {
+ set_webrender_image_key(&self.store.lock().unwrap().webrender_api, image);
+ }
}