- From: Patrick Meenan <pmeenan@webpagetest.org>
- Date: Tue, 13 Aug 2013 14:29:25 -0400
- To: James Robinson <jamesr@google.com>
- CC: "public-web-perf@w3.org" <public-web-perf@w3.org>
- Message-ID: <520A7B05.20507@webpagetest.org>
The main use case that I'm developing for is to be able to report Speed Index <https://sites.google.com/a/webpagetest.org/docs/using-webpagetest/metrics/speed-index> from RUM. We have done some pretty extensive testing and it works well enough using the paint rect information to be valuable. Rather than hard-coding the algorithm and exposing a single number, it's a lot more flexible if we expose the paint rects themselves so the algorithm and calculations can be adapted as needed. Thanks, -Pat On 8/13/2013 2:18 PM, James Robinson wrote: > What are the use cases? > > - James > > > On Tue, Aug 13, 2013 at 10:14 AM, Patrick Meenan > <pmeenan@webpagetest.org <mailto:pmeenan@webpagetest.org>> wrote: > > I'm working on exposing Chrome's paint events to the DOM so that > sites can report visual metrics back as part of their RUM. I know > there is a lot of controversy around paint events but it would be > great if we could at least define how they could be exposed should > a browser vendor decide to expose them. > > I can write up a full proposal in the formal template but I wanted > to throw out a straw-man that basically mimics the behavior of the > resource timing interface. > > - The paint events will consist of a rectangle (left, top, width, > height) and a DOMHighResTimeStamp relative to the start of navigation > > - The array of events would be fetched through > window.performance.getPaintEvents() > > - The number of events to be tracked can be set by > window.performance.setPaintEventsBufferSize(#of events) and > defaults to something reasonable given the events are quite small > (actual numbers TBD but 1500 as an initial default would not be > unreasonable) > > - The accumulated paint events can be cleared by calling > window.performance.clearPaintEvents() > > - An event (onpainteventsbufferfull) will fire when the buffer is > full (TBD, should this be a rolling window and always drop from > the head instead of failing to insert?) > > - The paint events will be bound to the document that they belong > to (paint events for frames are tied to that specific frame). > Otherwise there will be all sorts of opportunity for privacy > leakage (embedding an iFrame to a bank page and watching where it > paints for example). > > *A couple of other nice-to-have's:* > - Standardize a firstPaint attribute on the Navigation Timing > interface > - Standardize a bodyStarted attribute on the Navigation Timing > interface (technically easy to capture in js anyway but I'm > planning on filtering out all of the bogus paint events before the > browser hits the body and thought it might be useful for RUM to > get for free) > - Provide an interface for helper calculations (I'm planning for a > simple way to get SpeedIndex without everyone having to implement > the algorithm against the raw paint rects for example) > > I know that browsers can't necessarily expose the exact time when > pixels hit the screen because they pay offload a lot of that to > hardware but the plan is to get as close to that as possible. In > the case of Chrome there could be a difference of 10's to 100's of > ms between when blink passes a rect off to be rendered and when it > hits the screen but the information available from blink is still > worth exposing (and matches what you get in the dev tools when you > show paint rects and in the timeline). > > Thanks, > > -Pat > >
Received on Tuesday, 13 August 2013 18:29:54 UTC