WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED CONFIGURATION CHANGED
Bug 78011
Implement Paint Timing Level 1
https://bugs.webkit.org/show_bug.cgi?id=78011
Summary
Implement Paint Timing Level 1
James Simonsen
Reported
2012-02-07 11:43:38 PST
In order for Navigation Timing to fully supplant the client side instrumentation (CSI) that's custom added to browsers, we need to expose a first paint time to window.performance.timing. Microsoft already has this in IE10 as msFirstPaint. We should add webkitFirstPaint and work on standardizing the exact definition of first paint.
Attachments
Patch for discussion (not for review yet)
(96.89 KB, patch)
2020-03-01 13:47 PST
,
Noam Rosenthal
no flags
Details
Formatted Diff
Diff
View All
Add attachment
proposed patch, testcase, etc.
krinklemail
Comment 1
2019-09-17 08:21:24 PDT
A spec has since emerged from WICG, and was published two years ago as W3C Working Draft (September 2017). * Working Draft:
https://www.w3.org/TR/paint-timing/
* Editor's Draft:
https://w3c.github.io/paint-timing/
*
https://github.com/w3c/paint-timing
*
https://github.com/WICG/paint-timing
firstPaint, Paint Timing, PerformancePaintTiming.
Noam Rosenthal
Comment 2
2020-03-01 13:47:57 PST
Created
attachment 392102
[details]
Patch for discussion (not for review yet)
Noam Rosenthal
Comment 3
2020-03-01 14:00:16 PST
The patch is not ready - the added skipped tests in TestExpectations tell where this doesn't fit the spec yet. To detail of the approach: There are 3 relevant milestones in WebKit painting: - (A) The actual milestone used to decide when to unblock painting, called in webkit "DidFirstMeaningfulPaint". patch). - (B) First paint, as defined in the spec. In this first patch, it's the same as the first milestone. - (C) First contentful paint, called in webkit "DidFirstContentfulPaint" (new in this "DidFirstMeaningfulPaint" is not the same as first-paint - it's less strict in the sense that it would fire in case of no content at all or insufficient content, if the page is fully loaded and no content is expected at that phase. So DidFirstMeaningfulPaint can be fired even before first-paint and first-contentful-paint should fire according to spec. In 3 of the failing w3c tests, this is the case. Also, first-contentful-paint, unlike DidFirstMeaningfulPaint, should fire when background images are rendered, and respond to rendered canvas only if it has any content. We should decide whether to have first-contentful-paint adhere tightly to the spec (I believe so), or be closer to WebKit's concept of DidFirstMeaningfulPaint (less work, maybe). btw - it's true that in most websites A, B and C would happen at the same time - however, having a gap between them would be a good indication, in some cases, for
Noam Rosenthal
Comment 4
2020-03-01 14:00:59 PST
> btw - it's true that in most websites A, B and C would happen at the same > time - however, having a gap between them would be a good indication, in > some cases, for...
a website regression, which is part of what this API is for
Radar WebKit Bug Importer
Comment 5
2020-03-02 13:20:00 PST
<
rdar://problem/59964760
>
Ryosuke Niwa
Comment 6
2020-03-03 00:18:40 PST
Based on the discussion we had (between Maciej, Simon, Alan, and I), we should take the following items into account for WebKit's first meaningful paint heuristics: Background image SVG images "Contentful" canvas once we rigorously defined what it means:
https://github.com/w3c/paint-timing/issues/50
First frame / poster image of a video:
https://github.com/w3c/paint-timing/issues/51
Then as Maciej pointed out there are a few spec works to do: WebKit takes any text regardless of whether they appear within UA shadow root or not into account for the first meaningful paint. The spec needs to clarify this behavior -
https://github.com/w3c/paint-timing/issues/52
The exact timing of navigation should be defined -
https://github.com/w3c/paint-timing/issues/19
Clarify whether "first paint" or "first content paint" ever happens to a blank page -
https://github.com/w3c/paint-timing/issues/53
Clarify what happens to a page which consists of just an iframe -
https://github.com/w3c/paint-timing/issues/54
Combination of paint timing and long tasks can expose precise paint timing -
https://github.com/w3c/paint-timing/issues/55
To supplement earlier Maciej's points, per our discussion, we don't think "first paint" is a good metric to expose to the Web since Safari / WebKit users would never see that. If any website optimize for the first paint metrics instead of or at the cost of first contentful paint, then such an optimization would only result in perceived regressions for our users.
Ryosuke Niwa
Comment 7
2020-03-03 00:20:38 PST
Oops, re-posting my comment because that was jumbled up. Based on the discussion we had (between Maciej, Simon, Alan, and I), we should take the following items into account for WebKit's first meaningful paint heuristics: * Background image * SVG images * "Contentful" canvas once we rigorously defined what it means:
https://github.com/w3c/paint-timing/issues/50
* First frame / poster image of a video:
https://github.com/w3c/paint-timing/issues/51
There are a few spec works to do: * WebKit takes any text regardless of whether they appear within UA shadow root or not into account for the first meaningful paint. The spec needs to clarify this behavior -
https://github.com/w3c/paint-timing/issues/52
* The exact timing of navigation should be defined -
https://github.com/w3c/paint-timing/issues/19
* Clarify whether "first paint" or "first content paint" ever happens to a blank page -
https://github.com/w3c/paint-timing/issues/53
* Clarify what happens to a page which consists of just an iframe -
https://github.com/w3c/paint-timing/issues/54
* Combination of paint timing and long tasks can expose precise paint timing -
https://github.com/w3c/paint-timing/issues/55
We don't want to implement "first paint" metric because Safari / WebKit users would not see anything at when this timing occurs. If any website optimize for the first paint metrics instead of or at the cost of first contentful paint, such an optimization would only negatively impact our users.
Noam Rosenthal
Comment 8
2020-04-01 12:39:08 PDT
(In reply to Ryosuke Niwa from
comment #7
) To touch base on the discussion regarding paint API:
> we > should take the following items into account for WebKit's first meaningful > paint heuristics: > * SVG images
Landed,
https://trac.webkit.org/changeset/257952/webkit
> * Background image
Patch ready for review,
https://bugs.webkit.org/show_bug.cgi?id=208501
.
> * "Contentful" canvas once we rigorously defined what it means: >
https://github.com/w3c/paint-timing/issues/50
Spec issue resolved, patch for canvas bassed on it:
https://bugs.webkit.org/show_bug.cgi?id=208482
> * First frame / poster image of a video: >
https://github.com/w3c/paint-timing/issues/51
Spec issue resolved, still need patch for VNE - want to resolve above 2 patches first as they contain similar functionality and would probably share code.
> > There are a few spec works to do: > * WebKit takes any text regardless of whether they appear within UA shadow > root or not into account for the first meaningful paint. The spec needs to > clarify this behavior -
https://github.com/w3c/paint-timing/issues/52
> * The exact timing of navigation should be defined - >
https://github.com/w3c/paint-timing/issues/19
> * Clarify whether "first paint" or "first content paint" ever happens to a > blank page -
https://github.com/w3c/paint-timing/issues/53
> * Clarify what happens to a page which consists of just an iframe - >
https://github.com/w3c/paint-timing/issues/54
> * Combination of paint timing and long tasks can expose precise paint > timing -
https://github.com/w3c/paint-timing/issues/55
Above spec issues resolved.
> > We don't want to implement "first paint" metric because Safari / WebKit > users would not see anything at when this timing occurs. If any website > optimize for the first paint metrics instead of or at the cost of first > contentful paint, such an optimization would only negatively impact our > users.
The spec now specifies that first-paint is optional.
https://bugs.webkit.org/show_bug.cgi?id=208499
implements only first-contentful-paint. Simon has raised the point about tests for VNE in
https://bugs.webkit.org/show_bug.cgi?id=208482#c8
- do we want to land FCP and use it to test VNE, add a new way to test VNE, or leave it as is (contributing to VNE without tests)?
Simon Fraser (smfr)
Comment 9
2020-05-10 20:16:04 PDT
Noam, the two blocking bugs are fixed. What remains here?
Noam Rosenthal
Comment 10
2020-05-10 22:22:47 PDT
(In reply to Simon Fraser (smfr) from
comment #9
)
> Noam, the two blocking bugs are fixed. What remains here?
I think, just maturing paint-timing out of "experimental flag" land. What would be required for this?
Simon Fraser (smfr)
Comment 11
2020-05-11 10:31:56 PDT
How confident are we in the implementation? How well does it match other browsers, and how well-tested is it by WPT?
Noam Rosenthal
Comment 12
2020-05-11 10:34:14 PDT
(In reply to Simon Fraser (smfr) from
comment #11
)
> How confident are we in the implementation? How well does it match other > browsers, and how well-tested is it by WPT?
It totally matches chrome after the few spec iteration we've done and has over 25 WPT tests that cover it, which were imported as part of the patch.
Noam Rosenthal
Comment 13
2020-05-11 10:45:20 PDT
(In reply to Simon Fraser (smfr) from
comment #11
)
> How confident are we in the implementation? How well does it match other > browsers, and how well-tested is it by WPT?
Re. the implementation - it's pretty straightforward, does a fake paint and reports the timing if contentfulness is detected. I think the open issue is that it still doesn't support layout formatting context. I think we should do that once LFC implementation itself is a bit less in flux, but I don't know if this should be a blocker, not sure what the plan is regarding LFC.
Simon Fraser (smfr)
Comment 14
2020-05-11 11:31:21 PDT
LFC is not a blocker. I think it would be fine to change the PaintTimingEnabled experimental feature to on by default. Perhaps mail webkit-dev to tell people that you're doing so.
Simon Fraser (smfr)
Comment 15
2022-02-07 11:58:01 PST
***
Bug 236155
has been marked as a duplicate of this bug. ***
Ahmad Saleem
Comment 16
2022-06-15 14:57:52 PDT
Hi Team - is this something can be turned on by default in Safari now? Considering the comments in
Comment 13
and
Comment 14
and also in WPT (for Stable), I can see Safari 15.5 do pass some tests (not all).
https://wpt.fyi/results/paint-timing?label=master&label=stable&aligned
Although - there is "experimental" flag still present in Safari 15.5 on macOS 12.4 for "Paint Timing"? Is it because of "WPT" failures - it is still experimental? Thanks!
Noam Rosenthal
Comment 17
2022-06-16 00:03:09 PDT
(In reply to Ahmad Saleem from
comment #16
)
> Hi Team - is this something can be turned on by default in Safari now? > Considering the comments in
Comment 13
and
Comment 14
and also in WPT (for > Stable), I can see Safari 15.5 do pass some tests (not all). > >
https://wpt.fyi/results/paint-timing?label=master&label=stable&aligned
> > Although - there is "experimental" flag still present in Safari 15.5 on > macOS 12.4 for "Paint Timing"? Is it because of "WPT" failures - it is still > experimental? Thanks!
Itβs been enabled by default for a while now (first contentful paint only). Some WPTs fail because WebKit chose to implement a subset.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug