summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/paint/text_paint_timing_detector.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/core/paint/text_paint_timing_detector.h')
-rw-r--r--chromium/third_party/blink/renderer/core/paint/text_paint_timing_detector.h44
1 files changed, 28 insertions, 16 deletions
diff --git a/chromium/third_party/blink/renderer/core/paint/text_paint_timing_detector.h b/chromium/third_party/blink/renderer/core/paint/text_paint_timing_detector.h
index 306a623f98e..c1c0e63a8cf 100644
--- a/chromium/third_party/blink/renderer/core/paint/text_paint_timing_detector.h
+++ b/chromium/third_party/blink/renderer/core/paint/text_paint_timing_detector.h
@@ -9,7 +9,6 @@
#include <queue>
#include <set>
-#include "third_party/blink/public/web/web_widget_client.h"
#include "third_party/blink/renderer/core/dom/dom_node_ids.h"
#include "third_party/blink/renderer/core/paint/paint_timing_detector.h"
#include "third_party/blink/renderer/core/paint/text_element_timing.h"
@@ -28,12 +27,18 @@ class TextRecord : public base::SupportsWeakPtr<TextRecord> {
public:
TextRecord(DOMNodeId new_node_id,
uint64_t new_first_size,
- const FloatRect& element_timing_rect)
+ const FloatRect& element_timing_rect,
+ const IntRect& frame_visual_rect,
+ const FloatRect& root_visual_rect)
: node_id(new_node_id),
first_size(new_first_size),
element_timing_rect_(element_timing_rect) {
static unsigned next_insertion_index_ = 1;
insertion_index_ = next_insertion_index_++;
+ if (PaintTimingVisualizer::IsTracingEnabled()) {
+ lcp_rect_info_ = std::make_unique<LCPRectInfo>(
+ frame_visual_rect, RoundedIntRect(root_visual_rect));
+ }
}
TextRecord(const TextRecord&) = delete;
TextRecord& operator=(const TextRecord&) = delete;
@@ -44,12 +49,13 @@ class TextRecord : public base::SupportsWeakPtr<TextRecord> {
// for ranking.
unsigned insertion_index_ = 0;
FloatRect element_timing_rect_;
+ std::unique_ptr<LCPRectInfo> lcp_rect_info_;
// The time of the first paint after fully loaded.
base::TimeTicks paint_time = base::TimeTicks();
};
-class CORE_EXPORT LargestTextPaintManager {
- DISALLOW_NEW();
+class CORE_EXPORT LargestTextPaintManager final
+ : public GarbageCollected<LargestTextPaintManager> {
using TextRecordSetComparator = bool (*)(const base::WeakPtr<TextRecord>&,
const base::WeakPtr<TextRecord>&);
using TextRecordSet =
@@ -83,7 +89,10 @@ class CORE_EXPORT LargestTextPaintManager {
SetCachedResultInvalidated(true);
}
- void MaybeUpdateLargestIgnoredText(const LayoutObject&, const uint64_t&);
+ void MaybeUpdateLargestIgnoredText(const LayoutObject&,
+ const uint64_t&,
+ const IntRect& frame_visual_rect,
+ const FloatRect& root_visual_rect);
std::unique_ptr<TextRecord> PopLargestIgnoredText() {
return std::move(largest_ignored_text_);
}
@@ -128,7 +137,9 @@ class CORE_EXPORT TextRecordsManager {
void RemoveInvisibleRecord(const LayoutObject&);
void RecordVisibleObject(const LayoutObject&,
const uint64_t& visual_size,
- const FloatRect& element_timing_rect);
+ const FloatRect& element_timing_rect,
+ const IntRect& frame_visual_rect,
+ const FloatRect& root_visual_rect);
void RecordInvisibleObject(const LayoutObject& object);
bool NeedMeausuringPaintTime() const {
return !texts_queued_for_paint_time_.IsEmpty() ||
@@ -165,18 +176,19 @@ class CORE_EXPORT TextRecordsManager {
// opacity. May update |largest_ignored_text_| if the new candidate has a
// larger size.
void MaybeUpdateLargestIgnoredText(const LayoutObject& object,
- const uint64_t& size) {
+ const uint64_t& size,
+ const IntRect& aggregated_visual_rect,
+ const FloatRect& mapped_visual_rect) {
DCHECK(ltp_manager_);
- ltp_manager_->MaybeUpdateLargestIgnoredText(object, size);
+ ltp_manager_->MaybeUpdateLargestIgnoredText(
+ object, size, aggregated_visual_rect, mapped_visual_rect);
}
// Called when documentElement changes from zero to nonzero opacity. Makes the
// largest text that was hidden due to this a Largest Contentful Paint
// candidate.
void ReportLargestIgnoredText();
- inline bool IsRecordingLargestTextPaint() const {
- return ltp_manager_.has_value();
- }
+ inline bool IsRecordingLargestTextPaint() const { return ltp_manager_; }
void Trace(Visitor*) const;
@@ -199,7 +211,7 @@ class CORE_EXPORT TextRecordsManager {
// LCP computations, even if the size of the text itself is not 0. They are
// considered invisible objects by Largest Contentful Paint.
Deque<std::unique_ptr<TextRecord>> size_zero_texts_queued_for_paint_time_;
- base::Optional<LargestTextPaintManager> ltp_manager_;
+ Member<LargestTextPaintManager> ltp_manager_;
Member<TextElementTiming> text_element_timing_;
};
@@ -247,21 +259,21 @@ class CORE_EXPORT TextPaintTimingDetector final
return records_manager_.UpdateCandidate();
}
void ReportLargestIgnoredText();
- void ReportSwapTime(base::TimeTicks timestamp);
+ void ReportPresentationTime(base::TimeTicks timestamp);
void Trace(Visitor*) const;
private:
friend class LargestContentfulPaintCalculatorTest;
- void RegisterNotifySwapTime(
+ void RegisterNotifyPresentationTime(
PaintTimingCallbackManager::LocalThreadCallback callback);
TextRecordsManager records_manager_;
Member<PaintTimingCallbackManager> callback_manager_;
- // Make sure that at most one swap promise is ongoing.
- bool awaiting_swap_promise_ = false;
+ // Make sure that at most one presentation promise is ongoing.
+ bool awaiting_presentation_promise_ = false;
bool need_update_timing_at_frame_end_ = false;