aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout_thread_2020
diff options
context:
space:
mode:
authorAnthony Ramine <nox@nox.paris>2020-04-03 18:54:11 +0200
committerAnthony Ramine <nox@nox.paris>2020-04-04 13:10:19 +0200
commit185a402d9cc41d3e680b99564f5fc8b519ecf129 (patch)
tree14869f8e2feae209fcf75026fb079021986c13f9 /components/layout_thread_2020
parent516e8e0aa600cdef34e506e0ed7180d12dd9ac7d (diff)
downloadservo-185a402d9cc41d3e680b99564f5fc8b519ecf129.tar.gz
servo-185a402d9cc41d3e680b99564f5fc8b519ecf129.zip
Make DOM own the style and layout data, in an UnsafeCell
The previous Cell was a lie.
Diffstat (limited to 'components/layout_thread_2020')
-rw-r--r--components/layout_thread_2020/dom_wrapper.rs26
-rw-r--r--components/layout_thread_2020/lib.rs8
2 files changed, 11 insertions, 23 deletions
diff --git a/components/layout_thread_2020/dom_wrapper.rs b/components/layout_thread_2020/dom_wrapper.rs
index bbca53acc62..b396eeee5cc 100644
--- a/components/layout_thread_2020/dom_wrapper.rs
+++ b/components/layout_thread_2020/dom_wrapper.rs
@@ -91,10 +91,6 @@ use style::str::is_whitespace;
use style::stylist::CascadeData;
use style::CaseSensitivityExt;
-pub unsafe fn drop_style_and_layout_data(data: OpaqueStyleAndLayoutData) {
- drop(Box::from_raw(data.as_ptr()));
-}
-
#[derive(Clone, Copy)]
pub struct ServoLayoutNode<'dom> {
/// The wrapped node.
@@ -298,26 +294,26 @@ impl<'ln> LayoutNode<'ln> for ServoLayoutNode<'ln> {
}
}
-impl<'ln> GetLayoutData<'ln> for ServoLayoutNode<'ln> {
- fn get_style_and_layout_data(&self) -> Option<OpaqueStyleAndLayoutData> {
+impl<'dom> GetLayoutData<'dom> for ServoLayoutNode<'dom> {
+ fn get_style_and_layout_data(self) -> Option<&'dom OpaqueStyleAndLayoutData> {
unsafe { self.get_jsmanaged().get_style_and_layout_data() }
}
}
-impl<'le> GetLayoutData<'le> for ServoLayoutElement<'le> {
- fn get_style_and_layout_data(&self) -> Option<OpaqueStyleAndLayoutData> {
+impl<'dom> GetLayoutData<'dom> for ServoLayoutElement<'dom> {
+ fn get_style_and_layout_data(self) -> Option<&'dom OpaqueStyleAndLayoutData> {
self.as_node().get_style_and_layout_data()
}
}
-impl<'ln> GetLayoutData<'ln> for ServoThreadSafeLayoutNode<'ln> {
- fn get_style_and_layout_data(&self) -> Option<OpaqueStyleAndLayoutData> {
+impl<'dom> GetLayoutData<'dom> for ServoThreadSafeLayoutNode<'dom> {
+ fn get_style_and_layout_data(self) -> Option<&'dom OpaqueStyleAndLayoutData> {
self.node.get_style_and_layout_data()
}
}
-impl<'le> GetLayoutData<'le> for ServoThreadSafeLayoutElement<'le> {
- fn get_style_and_layout_data(&self) -> Option<OpaqueStyleAndLayoutData> {
+impl<'dom> GetLayoutData<'dom> for ServoThreadSafeLayoutElement<'dom> {
+ fn get_style_and_layout_data(self) -> Option<&'dom OpaqueStyleAndLayoutData> {
self.element.as_node().get_style_and_layout_data()
}
}
@@ -549,7 +545,7 @@ impl<'le> TElement for ServoLayoutElement<'le> {
unsafe fn clear_data(&self) {
if self.get_raw_data().is_some() {
- drop_style_and_layout_data(self.as_node().take_style_and_layout_data());
+ drop(self.as_node().take_style_and_layout_data());
}
}
@@ -707,7 +703,7 @@ impl<'le> ServoLayoutElement<'le> {
}
fn get_style_data(&self) -> Option<&StyleData> {
- self.get_style_and_layout_data().map(|opaque| unsafe {
+ self.get_style_and_layout_data().map(|opaque| {
&opaque
.downcast_ref::<StyleAndLayoutData>()
.unwrap()
@@ -1072,7 +1068,7 @@ impl<'ln> ThreadSafeLayoutNode<'ln> for ServoThreadSafeLayoutNode<'ln> {
})
}
- fn get_style_and_layout_data(&self) -> Option<OpaqueStyleAndLayoutData> {
+ fn get_style_and_layout_data(self) -> Option<&'ln OpaqueStyleAndLayoutData> {
self.node.get_style_and_layout_data()
}
diff --git a/components/layout_thread_2020/lib.rs b/components/layout_thread_2020/lib.rs
index 3e2b73875fe..812a8823f38 100644
--- a/components/layout_thread_2020/lib.rs
+++ b/components/layout_thread_2020/lib.rs
@@ -21,7 +21,6 @@ extern crate profile_traits;
mod dom_wrapper;
-use crate::dom_wrapper::drop_style_and_layout_data;
use crate::dom_wrapper::{ServoLayoutDocument, ServoLayoutElement, ServoLayoutNode};
use app_units::Au;
use crossbeam_channel::{unbounded, Receiver, Sender};
@@ -640,7 +639,6 @@ impl LayoutThread {
Msg::GetRPC(..) => LayoutHangAnnotation::GetRPC,
Msg::TickAnimations(..) => LayoutHangAnnotation::TickAnimations,
Msg::AdvanceClockMs(..) => LayoutHangAnnotation::AdvanceClockMs,
- Msg::ReapStyleAndLayoutData(..) => LayoutHangAnnotation::ReapStyleAndLayoutData,
Msg::CollectReports(..) => LayoutHangAnnotation::CollectReports,
Msg::PrepareToExit(..) => LayoutHangAnnotation::PrepareToExit,
Msg::ExitNow => LayoutHangAnnotation::ExitNow,
@@ -779,9 +777,6 @@ impl LayoutThread {
webrender_api::ScrollClamping::ToContentBounds,
);
},
- Msg::ReapStyleAndLayoutData(dead_data) => unsafe {
- drop_style_and_layout_data(dead_data)
- },
Msg::CollectReports(reports_chan) => {
self.collect_reports(reports_chan, possibly_locked_rw_data);
},
@@ -890,9 +885,6 @@ impl LayoutThread {
response_chan.send(()).unwrap();
loop {
match self.port.recv().unwrap() {
- Msg::ReapStyleAndLayoutData(dead_data) => unsafe {
- drop_style_and_layout_data(dead_data)
- },
Msg::ExitNow => {
debug!("layout thread is exiting...");
self.exit_now();