mirror of
https://github.com/servo/servo.git
synced 2025-08-03 20:50:07 +01:00
Wrap SharedLayoutContext::stylist in a wrapper to make it Sync.
This commit is contained in:
parent
e9b77628ce
commit
647232a495
3 changed files with 10 additions and 5 deletions
|
@ -74,6 +74,12 @@ fn create_or_get_local_context(shared_layout_context: &SharedLayoutContext)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct StylistWrapper(pub *const Stylist);
|
||||||
|
|
||||||
|
// FIXME(#6569) This implementation is unsound.
|
||||||
|
#[allow(unsafe_code)]
|
||||||
|
unsafe impl Sync for StylistWrapper {}
|
||||||
|
|
||||||
/// Layout information shared among all workers. This must be thread-safe.
|
/// Layout information shared among all workers. This must be thread-safe.
|
||||||
pub struct SharedLayoutContext {
|
pub struct SharedLayoutContext {
|
||||||
/// The shared image cache task.
|
/// The shared image cache task.
|
||||||
|
@ -94,7 +100,7 @@ pub struct SharedLayoutContext {
|
||||||
/// The CSS selector stylist.
|
/// The CSS selector stylist.
|
||||||
///
|
///
|
||||||
/// FIXME(#2604): Make this no longer an unsafe pointer once we have fast `RWArc`s.
|
/// FIXME(#2604): Make this no longer an unsafe pointer once we have fast `RWArc`s.
|
||||||
pub stylist: *const Stylist,
|
pub stylist: StylistWrapper,
|
||||||
|
|
||||||
/// The URL.
|
/// The URL.
|
||||||
pub url: Url,
|
pub url: Url,
|
||||||
|
@ -122,7 +128,6 @@ pub struct SharedLayoutContext {
|
||||||
|
|
||||||
// FIXME(#6569) This implementations is unsound:
|
// FIXME(#6569) This implementations is unsound:
|
||||||
// XXX UNSOUND!!! for image_cache_task
|
// XXX UNSOUND!!! for image_cache_task
|
||||||
// XXX UNSOUND!!! for stylist
|
|
||||||
#[allow(unsafe_code)]
|
#[allow(unsafe_code)]
|
||||||
unsafe impl Sync for SharedLayoutContext {}
|
unsafe impl Sync for SharedLayoutContext {}
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ use app_units::Au;
|
||||||
use azure::azure::AzColor;
|
use azure::azure::AzColor;
|
||||||
use canvas_traits::CanvasMsg;
|
use canvas_traits::CanvasMsg;
|
||||||
use construct::ConstructionResult;
|
use construct::ConstructionResult;
|
||||||
use context::{SharedLayoutContext, heap_size_of_local_context};
|
use context::{SharedLayoutContext, StylistWrapper, heap_size_of_local_context};
|
||||||
use cssparser::ToCss;
|
use cssparser::ToCss;
|
||||||
use data::LayoutDataWrapper;
|
use data::LayoutDataWrapper;
|
||||||
use display_list_builder::ToGfxColor;
|
use display_list_builder::ToGfxColor;
|
||||||
|
@ -457,7 +457,7 @@ impl LayoutTask {
|
||||||
screen_size_changed: screen_size_changed,
|
screen_size_changed: screen_size_changed,
|
||||||
font_cache_task: Mutex::new(self.font_cache_task.clone()),
|
font_cache_task: Mutex::new(self.font_cache_task.clone()),
|
||||||
canvas_layers_sender: Mutex::new(self.canvas_layers_sender.clone()),
|
canvas_layers_sender: Mutex::new(self.canvas_layers_sender.clone()),
|
||||||
stylist: &*rw_data.stylist,
|
stylist: StylistWrapper(&*rw_data.stylist),
|
||||||
url: (*url).clone(),
|
url: (*url).clone(),
|
||||||
visible_rects: rw_data.visible_rects.clone(),
|
visible_rects: rw_data.visible_rects.clone(),
|
||||||
generation: rw_data.generation,
|
generation: rw_data.generation,
|
||||||
|
|
|
@ -188,7 +188,7 @@ impl<'a> PreorderDomTraversal for RecalcStyleForNode<'a> {
|
||||||
let shareable_element = match node.as_element() {
|
let shareable_element = match node.as_element() {
|
||||||
Some(element) => {
|
Some(element) => {
|
||||||
// Perform the CSS selector matching.
|
// Perform the CSS selector matching.
|
||||||
let stylist = unsafe { &*self.layout_context.shared.stylist };
|
let stylist = unsafe { &*self.layout_context.shared.stylist.0 };
|
||||||
if element.match_element(stylist,
|
if element.match_element(stylist,
|
||||||
Some(&*bf),
|
Some(&*bf),
|
||||||
&mut applicable_declarations) {
|
&mut applicable_declarations) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue