gecko-dev/dom/performance/PerformancePaintTiming.h
Nazım Can Altınova efc96734bd Bug 1963464 - Initial implementation of PaintTimingMixin for the PaintTiming and LCP entries r=sefeng,webidl
This patch implements PaintTimingMixin with only the `paintTime`, without the
`presentationTime`. The presentationTime property is nullable in the spec and
the browsers might choose to not implement it. We would like to implement it
in the future, but we will do that as a follow-up.

Differential Revision: https://phabricator.services.mozilla.com/D247305
2025-05-05 04:15:18 +00:00

52 lines
1.8 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef mozilla_dom_PerformancePaintTiming_h___
#define mozilla_dom_PerformancePaintTiming_h___
#include "mozilla/dom/PerformanceEntry.h"
#include "mozilla/dom/PerformancePaintTimingBinding.h"
namespace mozilla::dom {
class Performance;
// https://w3c.github.io/paint-timing/#sec-PerformancePaintTiming
// Unlike timeToContentfulPaint, this timing is generated during
// displaylist building, when a frame is contentful, we collect
// the timestamp. Whereas, timeToContentfulPaint uses a compositor-side
// timestamp.
class PerformancePaintTiming final : public PerformanceEntry {
public:
PerformancePaintTiming(Performance* aPerformance, const nsAString& aName,
const TimeStamp& aStartTime);
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(PerformancePaintTiming,
PerformanceEntry)
JSObject* WrapObject(JSContext* aCx,
JS::Handle<JSObject*> aGivenProto) override;
DOMHighResTimeStamp StartTime() const override;
DOMHighResTimeStamp PaintTime() const { return StartTime(); }
Nullable<DOMHighResTimeStamp> GetPresentationTime() const { return nullptr; }
size_t SizeOfIncludingThis(
mozilla::MallocSizeOf aMallocSizeOf) const override;
private:
~PerformancePaintTiming();
RefPtr<Performance> mPerformance;
const TimeStamp mRawStartTime;
mutable Maybe<DOMHighResTimeStamp> mCachedStartTime;
};
} // namespace mozilla::dom
#endif /* mozilla_dom_PerformanacePaintTiming_h___ */