diff options
author | Alan Jeffrey <ajeffrey@mozilla.com> | 2017-07-18 14:57:22 -0500 |
---|---|---|
committer | Alan Jeffrey <ajeffrey@mozilla.com> | 2017-07-31 13:02:28 -0500 |
commit | 936dd3ef634cf6e6bfce1925a25f3fe985faa635 (patch) | |
tree | 0387ce3f98d5eed8bbb07e801bf1b894f5627a09 /components/layout/context.rs | |
parent | b35791f86fed329046dc54776f1ba73565e0c31f (diff) | |
download | servo-936dd3ef634cf6e6bfce1925a25f3fe985faa635.tar.gz servo-936dd3ef634cf6e6bfce1925a25f3fe985faa635.zip |
Speculatively evaluate paint functions during style.
Diffstat (limited to 'components/layout/context.rs')
-rw-r--r-- | components/layout/context.rs | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/components/layout/context.rs b/components/layout/context.rs index cda3811421a..76d32eebca9 100644 --- a/components/layout/context.rs +++ b/components/layout/context.rs @@ -4,7 +4,6 @@ //! Data needed by the layout thread. -use fnv::FnvHashMap; use fnv::FnvHasher; use gfx::display_list::{WebRenderImageInfo, OpaqueNode}; use gfx::font_cache_thread::FontCacheThread; @@ -25,8 +24,8 @@ use std::collections::HashMap; use std::hash::BuildHasherDefault; use std::sync::{Arc, Mutex}; use std::thread; +use style::context::RegisteredSpeculativePainter; use style::context::SharedStyleContext; -use style::properties::PropertyId; thread_local!(static FONT_CONTEXT_KEY: RefCell<Option<FontContext>> = RefCell::new(None)); @@ -73,7 +72,7 @@ pub struct LayoutContext<'a> { BuildHasherDefault<FnvHasher>>>>, /// Paint worklets - pub registered_painters: Arc<RwLock<FnvHashMap<Atom, RegisteredPainter>>>, + pub registered_painters: &'a RegisteredPainters, /// A list of in-progress image loads to be shared with the script thread. /// A None value means that this layout was not initiated by the script thread. @@ -179,9 +178,11 @@ impl<'a> LayoutContext<'a> { } } -/// A registered paint worklet. -pub struct RegisteredPainter { - pub name: Atom, - pub properties: FnvHashMap<Atom, PropertyId>, - pub painter: Arc<Painter>, +/// A registered painter +pub trait RegisteredPainter: RegisteredSpeculativePainter + Painter {} + +/// A set of registered painters +pub trait RegisteredPainters: Sync { + /// Look up a painter + fn get(&self, name: &Atom) -> Option<&RegisteredPainter>; } |