aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout_2020/fragments.rs
diff options
context:
space:
mode:
authorFernando Jiménez Moreno <ferjmoreno@gmail.com>2020-02-12 12:24:20 +0100
committerFernando Jiménez Moreno <ferjmoreno@gmail.com>2020-02-21 11:11:00 +0100
commit67706f9c0b7fdb07c6ba12bf7ce6de557a4e81de (patch)
tree1dc6c4d6bc27168547a8da20d6607f286dcacd54 /components/layout_2020/fragments.rs
parent84dd334160ad51b623c42cf637892709ce348de0 (diff)
downloadservo-67706f9c0b7fdb07c6ba12bf7ce6de557a4e81de.tar.gz
servo-67706f9c0b7fdb07c6ba12bf7ce6de557a4e81de.zip
Add fragment debug id
Diffstat (limited to 'components/layout_2020/fragments.rs')
-rw-r--r--components/layout_2020/fragments.rs53
1 files changed, 50 insertions, 3 deletions
diff --git a/components/layout_2020/fragments.rs b/components/layout_2020/fragments.rs
index 87b362c14f0..5dddb18ca49 100644
--- a/components/layout_2020/fragments.rs
+++ b/components/layout_2020/fragments.rs
@@ -4,6 +4,7 @@
use crate::geom::flow_relative::{Rect, Sides, Vec2};
use crate::geom::{PhysicalPoint, PhysicalRect};
+use crate::layout_debug;
use gfx::text::glyph::GlyphStore;
use gfx_traits::print_tree::PrintTree;
use serde::ser::{Serialize, SerializeStruct, Serializer};
@@ -27,6 +28,7 @@ pub(crate) enum Fragment {
pub(crate) struct BoxFragment {
pub tag: OpaqueNode,
+ pub debug_id: DebugId,
pub style: ServoArc<ComputedValues>,
pub children: Vec<Fragment>,
@@ -61,6 +63,7 @@ pub(crate) struct CollapsedMargin {
/// Can contain child fragments with relative coordinates, but does not contribute to painting itself.
#[derive(Serialize)]
pub(crate) struct AnonymousFragment {
+ pub debug_id: DebugId,
pub rect: Rect<Length>,
pub children: Vec<Fragment>,
pub mode: WritingMode,
@@ -70,6 +73,7 @@ pub(crate) struct AnonymousFragment {
}
pub(crate) struct TextFragment {
+ pub debug_id: DebugId,
pub tag: OpaqueNode,
pub parent_style: ServoArc<ComputedValues>,
pub rect: Rect<Length>,
@@ -79,6 +83,7 @@ pub(crate) struct TextFragment {
}
pub(crate) struct ImageFragment {
+ pub debug_id: DebugId,
pub style: ServoArc<ComputedValues>,
pub rect: Rect<Length>,
pub image_key: ImageKey,
@@ -123,6 +128,7 @@ impl Fragment {
impl AnonymousFragment {
pub fn no_op(mode: WritingMode) -> Self {
Self {
+ debug_id: DebugId::new(),
children: vec![],
rect: Rect::zero(),
mode,
@@ -140,6 +146,7 @@ impl AnonymousFragment {
)
});
AnonymousFragment {
+ debug_id: DebugId::new(),
rect,
children,
mode,
@@ -179,6 +186,7 @@ impl BoxFragment {
});
BoxFragment {
tag,
+ debug_id: DebugId::new(),
style,
children,
content_rect,
@@ -349,7 +357,8 @@ impl CollapsedMargin {
impl Serialize for BoxFragment {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
- let mut serializer = serializer.serialize_struct("BoxFragment", 6)?;
+ let mut serializer = serializer.serialize_struct("BoxFragment", 7)?;
+ serializer.serialize_field("debug_id", &self.debug_id)?;
serializer.serialize_field("content_rect", &self.content_rect)?;
serializer.serialize_field("padding", &self.padding)?;
serializer.serialize_field("border", &self.border)?;
@@ -365,7 +374,8 @@ impl Serialize for BoxFragment {
impl Serialize for TextFragment {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
- let mut serializer = serializer.serialize_struct("TextFragment", 3)?;
+ let mut serializer = serializer.serialize_struct("TextFragment", 4)?;
+ serializer.serialize_field("debug_id", &self.debug_id)?;
serializer.serialize_field("rect", &self.rect)?;
serializer.serialize_field("ascent", &self.ascent)?;
serializer.serialize_field("glyphs", &self.glyphs)?;
@@ -375,8 +385,45 @@ impl Serialize for TextFragment {
impl Serialize for ImageFragment {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
- let mut serializer = serializer.serialize_struct("ImageFragment", 1)?;
+ let mut serializer = serializer.serialize_struct("ImageFragment", 2)?;
+ serializer.serialize_field("debug_id", &self.debug_id)?;
serializer.serialize_field("rect", &self.rect)?;
serializer.end()
}
}
+
+#[cfg(not(debug_assertions))]
+#[derive(Clone)]
+pub struct DebugId;
+
+#[cfg(debug_assertions)]
+#[derive(Clone)]
+pub struct DebugId(u16);
+
+#[cfg(not(debug_assertions))]
+impl DebugId {
+ pub fn new() -> DebugId {
+ DebugId
+ }
+}
+
+#[cfg(debug_assertions)]
+impl DebugId {
+ pub fn new() -> DebugId {
+ DebugId(layout_debug::generate_unique_debug_id())
+ }
+}
+
+#[cfg(not(debug_assertions))]
+impl Serialize for DebugId {
+ fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
+ serializer.serialize_str(&format!("{:p}", &self))
+ }
+}
+
+#[cfg(debug_assertions)]
+impl Serialize for DebugId {
+ fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
+ serializer.serialize_u16(self.0)
+ }
+}