Index: third_party/WebKit/Source/core/paint/PaintTiming.h |
diff --git a/third_party/WebKit/Source/core/paint/PaintTiming.h b/third_party/WebKit/Source/core/paint/PaintTiming.h |
index c62174e9a9221c94dd0b3a3af4d3443bfc9b8927..b2a28a1b3041df71f736cdfb4305fa1a544d33b2 100644 |
--- a/third_party/WebKit/Source/core/paint/PaintTiming.h |
+++ b/third_party/WebKit/Source/core/paint/PaintTiming.h |
@@ -8,28 +8,55 @@ |
#include "core/dom/Document.h" |
#include "platform/Supplementable.h" |
#include "platform/heap/Handle.h" |
+#include "wtf/Noncopyable.h" |
namespace blink { |
class LocalFrame; |
+// PaintTiming is responsible for tracking paint-related timings for a given |
+// document. |
class PaintTiming final : public NoBaseWillBeGarbageCollectedFinalized<PaintTiming>, public WillBeHeapSupplement<Document> { |
+ WTF_MAKE_NONCOPYABLE(PaintTiming); |
WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(PaintTiming); |
public: |
virtual ~PaintTiming() { } |
static PaintTiming& from(Document&); |
+ // mark*() methods record the time for the given paint event, record a trace |
+ // event, and notify that paint timing has changed. These methods do nothing |
+ // (early return) if a time has already been recorded for the given paint |
+ // event. |
void markFirstPaint(); |
+ |
+ // markFirstTextPaint, markFirstImagePaint, and markFirstContentfulPaint |
+ // will also record first paint if first paint hasn't been recorded yet. |
+ void markFirstContentfulPaint(); |
+ |
+ // markFirstTextPaint and markFirstImagePaint will also record first |
+ // contentful paint if first contentful paint hasn't been recorded yet. |
void markFirstTextPaint(); |
void markFirstImagePaint(); |
- void markFirstContentfulPaint(); |
- // These return monotonically-increasing seconds. |
+ // The getters below return monotonically-increasing seconds, or zero if the |
+ // given paint event has not yet occurred. See the comments for |
+ // monotonicallyIncreasingTime in wtf/CurrentTime.h for additional details. |
+ |
+ // firstPaint returns the first time that anything was painted for the |
+ // current document. |
double firstPaint() const { return m_firstPaint; } |
+ |
+ // firstContentfulPaint returns the first time that 'contentful' content was |
+ // painted. For instance, the first time that text or image content was |
+ // painted. |
+ double firstContentfulPaint() const { return m_firstContentfulPaint; } |
+ |
+ // firstTextPaint returns the first time that text content was painted. |
double firstTextPaint() const { return m_firstTextPaint; } |
+ |
+ // firstImagePaint returns the first time that image content was painted. |
double firstImagePaint() const { return m_firstImagePaint; } |
- double firstContentfulPaint() const { return m_firstContentfulPaint; } |
DECLARE_VIRTUAL_TRACE(); |
@@ -38,6 +65,18 @@ private: |
LocalFrame* frame() const; |
void notifyPaintTimingChanged(); |
+ // set*() set the timing for the given paint event to the given timestamp |
+ // and record a trace event if the value is currently zero, but do not |
+ // notify that paint timing changed. These methods can be invoked from other |
+ // mark*() or set*() methods to make sure that first paint is marked as part |
+ // of marking first contentful paint, or that first contentful paint is |
+ // marked as part of marking first text/image paint, for example. |
+ void setFirstPaint(double stamp); |
+ |
+ // setFirstContentfulPaint will also set first paint time if first paint |
+ // time has not yet been recorded. |
+ void setFirstContentfulPaint(double stamp); |
+ |
double m_firstPaint = 0.0; |
double m_firstTextPaint = 0.0; |
double m_firstImagePaint = 0.0; |