- From: Xiaoqian Wu <xiaoqian@w3.org>
- Date: Tue, 27 Jun 2017 00:25:46 +0800
- To: public-web-perf@w3.org
The minutes from the 2017-Jun-20 f2f meeting are available at:
https://www.w3.org/2017/06/20-webperf-minutes.html
or
https://docs.google.com/document/d/1fcWpKZhJdrmBlpYUB2wIx42svo9zqojoJMZg8aY7E7Y/edit
also as text below.
Thanks to the scribes, the chairs, the host, and anyone who contributed
their ideas to the topics.
-xiaoqian
--------------------
WebPerf WG F2F Meeting
20 Jun 2017
Agenda:
https://docs.google.com/document/d/1fcWpKZhJdrmBlpYUB2wIx42svo9zqojoJMZg8aY7E7Y/edit
See also: Notes on Google Doc
Attendees
Present
igrigorik, shubhie, Todd, Yoav, Phil, Harald, Nic, Benoit, xiaoqian,
Colin, Ryosuke, Charles
Regrets
Chair
igrigorik, Todd
Scribe
igrigorik, Yoav
Contents
Topics
Intros
Progress since TPAC 2016
PerformanceObserver
Linking entries -- e.g. Resource Timing and Server Timing
Element Timing API
Lifecycle API
Memory pressure
Event Timing
Long Task
Compression API?
Prioritization: which items should we tackle as a group?
Summary of Resolutions
Proposal for PerformanceObserver buffer logic
Proposal for PerformanceObserver Iframes bubble
Proposal for linking entries
Change strategy of Element Timing API
Intros
Yoav: working on RUM APIs to enable optimization features
Todd: Understanding ergonomics
Phil: RUM
Shubhie: Building blocks
... Desktop memory
Harald: Quantum: servo/rust → gecko, with target to optimize perceived
performance
... Long Task API
Nic: PerfObserver, Resource Timing
Benoit: Sharing opportunities that we see @ FB
Ryosuke: Finalizing issues in RT and NT issues + tests
... Future: Paint Timing API
Charles: Getting Server-Timing + PerfObserver
Progress since TPAC 2016
igrigorik: [A very brief kick-off deck].
igrigorik: [TPAC 2016 review].
PerformanceObserver
Developer friendliness
Q: How do we motivate developers to use PerformanceObserver?
Nic: New specs are moving towards performanceobserver.
Found a few edge cases that make it hard to use
Developer friendliness - how do we make it easier to use?
More challenging to play around with - e.g. get all the resources on the
page when I open DevTools. You have to start the observer, get the
callback, and do much of stuff.
Benoit: ditto.
Ryosuke: let’s work on a coherent strategy across specs
Buffers, buffers everywhere
Q: Should we increase individual buffers?
Always on / circular buffers can become costly (cpu, memory, etc)
Goal
Minimize overhead for the engine
Some APIs have a cost
Consistence
We don’t want to allocate large buffers for every spec
Proposal
Each feature defines a buffer with custom buffer size
Buffer events until max buffer size or end of onload
When the buffer is full?
Keep the first N entries, drop.
Do not clear at at end of onload
Under memory pressure UA can clear buffers
Indicate missing entries?
An API to query available types + properties
Enumerate observable types
how many entries you can observe
Iframes + PerfObserver
Nic: With RT we crawl all the iframes and harvest all the data
... - with PO we have to crawl all the observers
... - third party scripts can create same-origin iframes
Ryosuke: in MutationObserver we have subtree monitoring
Todd: all same-origin iframes are observed to the observer
... - Subtree?
Complications
Time origins would be different?
We would have to point to document element?
Proposal -- feature request.
Add subtree flag to observe PO events in same-origin frames
Marker to a global where it was capture
Long tasks: takes all the interesting attributes + self, cross-origin.
We could convey ancestor information.
Run time-origin translation logic
AI: Nick will draft issues
Linking entries -- e.g. Resource Timing and Server Timing
Q1: Linking to ResourceTiming
Q2: Should we be linking Fetch and RT L3 entries?
Charles: There is no way to link ST and RT reliably
... RT resources with same name (existing paint point)
... ST events emitted separately, hard to link
We can merge related entries where it makes sense
We can look for a more generic solution?
We probably need both
Best proxy we have today is startTime, which has limitations
Entry ID?
Within realm of perf entries this works, but doesn’t work as well across
specs and other specs
Guidance
If it’s meaningful to observe entries separately..
Keep them separate but provide an ID to link the entries.
Otherwise, hang it off the parent entry...
Child shouldn’t block creation of the parent
Proposal
Add a hook in ResourceTiming
Server Timing spec populates fields on the RT object
Update ST to populate an array of ST entries on RT
Element Timing API
Need to make sure we’re not exposing any new privacy/security vectors
Double-rAF as a baseline
Start with some simple use cases --
Images - most wanted; paint time? decoded time? Cycle?
When is an image painted? What happens with progressive images? Partial
paints?
Webfonts
Videos - autoplay?
Change strategy?
Start by defining behavior and restrictions for particular types
img, video, fonts, etc.
Lifecycle API
[Shubhie's Presentation] (feel free to request access to this).
Answers the question “Is my web app alive or dead?”
Not well defined when apps are in the background, especially on mobile
Too many tabs => limited resources => poor UX
Ideally browsers prevented extreme resource drain while enabling
legitimate BG usage
Apps have no way to signal to the browser their BG importance
There’s also no incentives for web apps to be good BG citizens
We have fragmented lifecycle APIs: beforeunload, unload, visibility,
page{hide,show}
Need a consistent API, enable analytics and wrap-up, handoff to BG work
iOS apps get a lot of signals from the platform when they’re BGed
Android takes “importance to user” into consideration before killing an
app
On the web: just visibility state, we can do better
Maybe should enable apps to declare what BG work they need to do
Lifecycle states: Active, passive, stopped, demoted, terminated
At stopped, apps should start preparing to die
Session wrap up: beacon, save history state, beforeunload replacement
Overlaps with SW: backgroundsync?
Might be able to tie that in with the Budget API to create incentives
Need to define the “legitimate background work” use cases
States need to be persistent
Memory pressure
Ryosuke: MP is of interest, we just recently added 4GB memory limit to
each web content process (~equivalent to Chrome renderer process)
Shubhie: Unclear if it was targeted at foreground or background?
... There is desire for signals for telemetry..
... - Instead of dynamic (e.g. purge memory), perhaps the outcome is a
change in the app for all users
Ryosuke: we are still interested in Memory Pressure, unsure about
revealing memory size
Todd: we were thinking of a simple model: 1GB == medium, 2GB == … 4GB =
kill
Shubhie: what do we expect sites to do with this signal?
Todd / Ryosuke: All browsers have a stick (2GB/4GB) engine
Todd: My model is “hold this tab accountable for own limits - e.g.
you’re using >1GB”
... That would accommodate the “leak detection” use case
... Proposal:
... - Per tab: low, medium, high
... -- Low ~ 50% of the limit on the content process
... -- Medium ~75% of the limit …
... -- High ~90% …
Shubhie: What about OOM reporting?
Todd: use Reporting API to deliver OOM reports?
... - Lack of implementation
... - Design a simple Javascript API
Use Cases
Leak case
Security / privacy implications.. Would have to be very coarse, too
coarse to be useful?
Spike case
You’re using a high amount of memory
Crash case
Allow reports to flow back to the site, instead of to the UA
We can’t guarantee that all OOMs can’t be delivered, that’s OK
Event Timing
[Shubhie's Presentation]
Long Task
Shubhie: v2: want to make it measurement based
... - If the top level task takes >50ms
... -- If script tasks are running, note which doc frame they belong to,
record
... * Name: self, same origin, ancestor, descendent
... * Attribute: [<TaskAttributionTiming>]
... ** Describes what’s happening within the task
... *** > 12ms
v2
Multiple attribution entries in the array, each of which is > 12ms
Show array for attribution
+ style or layout
+ script with URL
Compression API?
[Yoav's Proposal] -- Motivation, use cases.
Prioritization: which items should we tackle as a group?
Q: which items should we tackle as a group?
Edge:
PerfObserver + intertop with other apis
Buffering, etc.
Safari:
Finalizing PerformanceObserver
Memory pressure
Paint Timing API + FMP because many sites care about it
Exploratory:
Lifecycle:
Define processing model
What websites would break if sites transitioned to STOPPED?
What APIs do we need for how to persist state, background capabilities,
etc.
Should this be @ WebPlat WG?
Timing attacks explainer.. would be nice.
Event Timing
--------------------
Received on Monday, 26 June 2017 16:25:55 UTC