aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout/context.rs
diff options
context:
space:
mode:
authorAlan Jeffrey <ajeffrey@mozilla.com>2017-07-18 14:57:22 -0500
committerAlan Jeffrey <ajeffrey@mozilla.com>2017-07-31 13:02:28 -0500
commit936dd3ef634cf6e6bfce1925a25f3fe985faa635 (patch)
tree0387ce3f98d5eed8bbb07e801bf1b894f5627a09 /components/layout/context.rs
parentb35791f86fed329046dc54776f1ba73565e0c31f (diff)
downloadservo-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.rs17
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>;
}