diff options
author | Glenn Watson <gw@intuitionlibrary.com> | 2015-04-20 13:34:26 +1000 |
---|---|---|
committer | Glenn Watson <gw@intuitionlibrary.com> | 2015-04-23 09:40:24 +1000 |
commit | d8aef7208e5ed9705f551f0bf0e0cd6607ff224f (patch) | |
tree | 4a2954d38055abea3189f8afd8cf580f8d90c600 /components/script/dom/bindings/trace.rs | |
parent | e278e5b9a27738bdca7a151b4295628e1f179e29 (diff) | |
download | servo-d8aef7208e5ed9705f551f0bf0e0cd6607ff224f.tar.gz servo-d8aef7208e5ed9705f551f0bf0e0cd6607ff224f.zip |
Refactored image cache task - details below.
* Simpler image cache API for clients to use.
* Significantly fewer threads.
* One thread for image cache task (multiplexes commands, decoder threads and async resource requests).
* 4 threads for decoder worker tasks.
* Removed ReflowEvent hacks in script and layout tasks.
* Image elements pass a Trusted<T> to image cache, which is used to dirty nodes via script task. Previous use of Untrusted addresses was unsafe.
* Image requests such as background-image on layout / paint threads trigger repaint only rather than full reflow.
* Add reflow batching for when multiple images load quickly.
* Reduces the number of paints loading wikipedia from ~95 to ~35.
* Reasonably simple to add proper prefetch support in a follow up PR.
* Async loaded images always construct Image fragments now, instead of generic.
* Image fragments support the image not being present.
* Simpler implementation of synchronous image loading for reftests.
* Removed image holder.
* image.onload support.
* image NaturalWidth and NaturalHeight support.
* Updated WPT expectations.
Diffstat (limited to 'components/script/dom/bindings/trace.rs')
-rw-r--r-- | components/script/dom/bindings/trace.rs | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs index 0d261092bb4..d3de04ca57b 100644 --- a/components/script/dom/bindings/trace.rs +++ b/components/script/dom/bindings/trace.rs @@ -49,12 +49,13 @@ use js::rust::{Cx, Runtime}; use layout_interface::{LayoutRPC, LayoutChan}; use libc; use msg::constellation_msg::{PipelineId, SubpageId, WindowSizeData, WorkerId}; -use net_traits::image_cache_task::ImageCacheTask; +use net_traits::image_cache_task::{ImageCacheChan, ImageCacheTask}; use net_traits::storage_task::StorageType; use script_traits::ScriptControlChan; use script_traits::UntrustedNodeAddress; use msg::compositor_msg::ScriptListener; use msg::constellation_msg::ConstellationChan; +use net_traits::image::base::Image; use util::smallvec::{SmallVec1, SmallVec}; use util::str::{LengthOrPercentageOrAuto}; use std::cell::{Cell, RefCell}; @@ -66,6 +67,7 @@ use std::intrinsics::return_address; use std::old_io::timer::Timer; use std::ops::{Deref, DerefMut}; use std::rc::Rc; +use std::sync::Arc; use std::sync::mpsc::{Receiver, Sender}; use string_cache::{Atom, Namespace}; use style::properties::PropertyDeclarationBlock; @@ -248,7 +250,8 @@ no_jsmanaged_fields!(isize, i8, i16, i32, i64); no_jsmanaged_fields!(Sender<T>); no_jsmanaged_fields!(Receiver<T>); no_jsmanaged_fields!(Rect<T>); -no_jsmanaged_fields!(ImageCacheTask, ScriptControlChan); +no_jsmanaged_fields!(Arc<T>); +no_jsmanaged_fields!(Image, ImageCacheChan, ImageCacheTask, ScriptControlChan); no_jsmanaged_fields!(Atom, Namespace, Timer); no_jsmanaged_fields!(Trusted<T>); no_jsmanaged_fields!(PropertyDeclarationBlock); |