summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/paint/fragment_data.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/core/paint/fragment_data.h')
-rw-r--r--chromium/third_party/blink/renderer/core/paint/fragment_data.h37
1 files changed, 33 insertions, 4 deletions
diff --git a/chromium/third_party/blink/renderer/core/paint/fragment_data.h b/chromium/third_party/blink/renderer/core/paint/fragment_data.h
index e54f4b38b7b..641bc33c1f7 100644
--- a/chromium/third_party/blink/renderer/core/paint/fragment_data.h
+++ b/chromium/third_party/blink/renderer/core/paint/fragment_data.h
@@ -52,12 +52,32 @@ class CORE_EXPORT FragmentData {
}
void SetLayer(std::unique_ptr<PaintLayer>);
+ // A fragment ID unique within the LayoutObject. In NG block fragmentation,
+ // this is the fragmentainer index. In legacy block fragmentation, it's the
+ // flow thread block-offset.
+ wtf_size_t FragmentID() const {
+ return rare_data_ ? rare_data_->fragment_id : 0;
+ }
+ void SetFragmentID(wtf_size_t id) {
+ if (!rare_data_ && id == 0)
+ return;
+ EnsureRareData().fragment_id = id;
+ }
+
LayoutUnit LogicalTopInFlowThread() const {
- return rare_data_ ? rare_data_->logical_top_in_flow_thread : LayoutUnit();
+#if DCHECK_IS_ON()
+ DCHECK(!rare_data_ || rare_data_->has_set_flow_thread_offset_ ||
+ !rare_data_->fragment_id);
+#endif
+ return LayoutUnit::FromRawValue(static_cast<int>(FragmentID()));
}
+
void SetLogicalTopInFlowThread(LayoutUnit top) {
- if (rare_data_ || top)
- EnsureRareData().logical_top_in_flow_thread = top;
+ SetFragmentID(top.RawValue());
+#if DCHECK_IS_ON()
+ if (rare_data_)
+ rare_data_->has_set_flow_thread_offset_ = true;
+#endif
}
// The pagination offset is the additional factor to add in to map from flow
@@ -225,7 +245,7 @@ class CORE_EXPORT FragmentData {
// Fragment specific data.
PhysicalOffset legacy_pagination_offset;
- LayoutUnit logical_top_in_flow_thread;
+ wtf_size_t fragment_id = 0;
std::unique_ptr<ObjectPaintProperties> paint_properties;
std::unique_ptr<RefCountedPropertyTreeState> local_border_box_properties;
bool is_clip_path_cache_valid = false;
@@ -234,6 +254,15 @@ class CORE_EXPORT FragmentData {
CullRect cull_rect_;
CullRect contents_cull_rect_;
std::unique_ptr<FragmentData> next_fragment_;
+
+#if DCHECK_IS_ON()
+ // Legacy block fragmentation sets the flow thread offset for each
+ // FragmentData object, and this is used as its fragment_id, whereas NG
+ // block fragmentation uses the fragmentainer index instead. Here's a flag
+ // which can be used to assert that legacy code which expects flow thread
+ // offsets actually gets that.
+ bool has_set_flow_thread_offset_ = false;
+#endif
};
RareData& EnsureRareData();