LGTM2
/Daniel
On 2024-08-16 04:44, Domenic Denicola wrote:
LGTM1!
Please consider updating the explainer a bit to capture where things
ended up, or at least adding a warning of some sort that it's a bit
out of date.
On Fri, Aug 16, 2024 at 12:33 AM Scott Haseley <shase...@chromium.org>
wrote:
On Wed, Aug 14, 2024 at 9:35 PM Domenic Denicola
<dome...@chromium.org> wrote:
Very exciting to see this ready to ship after what sounds like
a successful experiment. A few small questions...
On Sat, Aug 10, 2024 at 6:19 AM Scott Haseley
<shase...@chromium.org> wrote:
Contact emails
shase...@chromium.org
Explainer
https://github.com/WICG/scheduling-apis/blob/main/explainers/yield-and-continuation.md
https://github.com/WICG/scheduling-apis/blob/main/explainers/prioritized-task-scheduling.md#scheduleryield
*Note*: The explainer includes parameters to yield(), but
we're initially shipping this with only the default
behavior described in the specification. It wasn't clear
if the parameters were necessary, there was some concern
internally over the exact behavior
<https://github.com/WICG/scheduling-apis/issues/96>, and
it complicates the API. They may yet prove necessary, but
it's safer to roll this out --- handling the main use case
--- and revisit later, if needed.
Specification
https://wicg.github.io/scheduling-apis/#dom-scheduler-yield
Summary
Provides a method for yielding control to the browser,
which can be used to break up long tasks. Awaiting the
promise returned by scheduler.yield() causes the current
task to yield, continuing in a new browser task. This can
be used to improve responsiveness issues caused by long
tasks. Continuations are prioritized to mitigate
performance problems of existing alternatives.
Blink component
Blink>Scheduling>APIs
<https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink%3EScheduling%3EAPIs>
TAG review
https://github.com/w3ctag/design-reviews/issues/966
TAG review status
Pending
Chromium Trial Name
SchedulerYield
Link to origin trial feedback summary
https://docs.google.com/document/d/1HSlhqWsamWyR9bwgtCzB2TpVW7CUm9QkyKbK0TdM0RA/edit?usp=sharing
Origin Trial documentation link
https://github.com/WICG/scheduling-apis/blob/main/implementation-status.md
Risks
Interoperability and Compatibility
This is a new feature and will not change existing event
loop task scheduling, so the main risk is that other
browsers might not implement the feature. There is an
interop challenge, however, that comes with
prioritization: we want to be specific enough to provide
developers guarantees and interoperable implementations,
but provide enough scheduling flexibility for UAs (like
the HTML specification does with task sources/task
queues), which we'll keep in mind while drafting the spec
(see also https://github.com/WICG/scheduling-apis/issues/67).
/Gecko/: Positive
(https://github.com/mozilla/standards-positions/issues/1039)
Note that the issue opened for yield() was folded in with
the original Scheduling APIs proposal, as this is an
enhancement to that.
/WebKit/: No signal
(https://github.com/WebKit/standards-positions/issues/361)
/Web developers/: Positive
Several partners were able to improve site performance
using the API during Origin Trial (see the Origin Trial
feedback link for quotes).
Also some tweets I found with positive sentiment:
- https://x.com/cramforce/status/1588912606777335808
- https://x.com/mohamedmansour/status/1752909705842933943
- https://x.com/sebastienlorber/status/1589939130225475584
/Other signals/:
Ergonomics
The default use (inserting yield points in long tasks)
should enable Chrome to maintain better performance
(responsiveness). There is a risk of continuations
starving other work, but there are reasonable mitigations,
e.g. bounding total of prioritized continuations (see also
https://github.com/WICG/scheduling-apis/blob/main/explainers/yield-and-continuation.md#preventing-task-starvation-by-continuations).
Activation
The feature would benefit from a polyfill so that tasks
still yield in the case the feature is unavailable. The
behavior can be approximated by awaiting
`scheduler.postTask()` or wrapping `setTimeout(0)` in a
promise. The signal inheritance bit [1], however, would
need transpilation support to propagate the current signal
across async (Promise) boundaries.
[1]
https://docs.google.com/document/d/1rIOBBbkLh3w79hBrJ2IrZWmo5tzkVFc0spJHPE8iP-E/edit#heading=h.c484rp62uh2i
Security
https://github.com/WICG/scheduling-apis/blob/main/explainers/yield-and-continuation.md#self-review-questionnaire-security-and-privacy
https://wicg.github.io/scheduling-apis/#sec-security
WebView application risks
Does this intent deprecate or change behavior of existing
APIs, such that it has potentially high risk for Android
WebView-based applications?
No, this is a new API.
Debuggability
This has basic new-API devtools support. We plan to work
with the devtools team to see if we can integrate
continuations into the performance panel in some way.
Will this feature be supported on all six Blink
platforms (Windows, Mac, Linux, ChromeOS, Android,
and Android WebView)?
Yes
Is this feature fully tested by web-platform-tests
<https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md>?
Yes
https://wpt.fyi/results/scheduler/tentative/yield?label=experimental&label=master&aligned
<https://wpt.fyi/results/scheduler/tentative/yield?label=experimental&label=master&aligned>
DevTrial instructions
https://github.com/WICG/scheduling-apis/blob/main/implementation-status.md
Flag name on chrome://flags
--enable-blink-features=SchedulerYield
Finch feature name
None
Non-finch justification
None
I think this should be no chrome://flags, and a Finch feature
name of SchedulerYield. (Assuming you got the default of
having a base::Feature generated from the Blink feature.
Ah, right. I did the default thing in runtime_enabled_features, so
the Finch feature name would be SchedulerYield. I think the
chrome://flags thing was left over from needing to provide the
flag for dev trial. Updated in chromestatus.
Requires code in //chrome?
False
Tracking bug
https://bugs.chromium.org/p/chromium/issues/detail?id=979020
Measurement
Usage is measured by the SchedulerYield UseCounter:
https://chromestatus.com/metrics/feature/popularity#SchedulerYield
Availability expectation
Initially available only in Chromium browsers.
Adoption expectation
Feature is a key part of optimizing long tasks, which
contribute to poor responsiveness:
https://web.dev/articles/optimize-long-tasks. Several
partners are waiting for this API as part of INP
optimization efforts.
Adoption plan
There has already communication with developers in
anticipation of this API, e.g.
https://web.dev/articles/optimize-long-tasks. I'll work
with the devrel team on what additional communication may
be required.
Non-OSS dependencies
Does the feature depend on any code or APIs outside the
Chromium open source repository and its open-source
dependencies to function?
No.
Estimated milestones
Shipping on desktop 129
Origin trial desktop first 115
Origin trial desktop last 120
DevTrial on desktop 113
Shipping on Android 129
Origin trial Android first 115
Origin trial Android last 120
DevTrial on Android 113
Shipping on WebView 129
Origin trial WebView first 115
Origin trial WebView last 120
Anticipated spec changes
Open questions about a feature may be a source of future
web compat or interop issues. Please list open issues
(e.g. links to known github issues in the project for the
feature specification) whose resolution may introduce web
compat/interop risk (e.g., changing to naming or structure
of the API in a non-backward-compatible way).
No breaking changes are expected, but enhancements may be
added as we learn more from usage. We also may need to
adjust our internal scheduling policies (i.e. relative
ordering of task sources) depending on what we learn from
early adopters.
The open issue that could potentially affect this API is
the naming of related "yieldy" APIs:
https://github.com/WICG/scheduling-apis/issues/95. This
was raised in the WebKit position, specifically that
scheduler.render() (future API enhancement) doesn't quite
fit. We plan to name around scheduler.yield(), and are
leaning towards rolling scheduler.render() in as a yield()
parameter -- but this is still TBD.
https://github.com/WICG/scheduling-apis/blob/main/explainers/yield-and-continuation.md#open-questions
lists a few open questions, which could have compat impacts. I
suspect that section of the explainer just hasn't been
updated. Can you confirm?
Confirmed. The outcome of those:
>> 1. What should the default option be, inheritance or
'user-visible' priority?
The API inherits the originating task's priority/signal if it was
scheduled with scheduler.postTask() or requestIdleCallback
("background" priority continuation).
>> 2. Does yield({priority}) set the priority to be inherited in
future calls, or is the original signal used?
This is what I mentioned in the explainer section. We removed the
parameters (for now), so this no longer applies, but we'll have to
revisit this if reinstating the parameters.
>> 3. Should the API be allowed to return a resolved promise, if
it knows it won't run other work? This could be more trouble than
it's worth, but maybe there's potential to cut down (scheduling)
overhead.
We didn't end up pursuing this.
Link to entry on the Chrome Platform Status
https://chromestatus.com/feature/6266249336586240?gate=6275382550986752
Links to previous Intent discussions
Intent to Prototype:
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAKXGoJ1SBQP-ABM3%2BsDtKzUZiPoSCWqW2mLOjMrUfFBx4TomSw%40mail.gmail.com
Intent to Experiment:
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAKXGoJ1Uj8nX5HrUT86iZ83YBj%3D6GJ4jnKZKYF3tOq%3D_twN_Yg%40mail.gmail.com
This intent message was generated by Chrome Platform
Status <https://chromestatus.com/>.
--
You received this message because you are subscribed to
the Google Groups "blink-dev" group.
To unsubscribe from this group and stop receiving emails
from it, send an email to blink-dev+unsubscr...@chromium.org.
To view this discussion on the web visit
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAKXGoJ3q%2BzPuSwBQ6Xp48aCP6m1kdE30Znh4wuzB_bL16UQwBg%40mail.gmail.com
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAKXGoJ3q%2BzPuSwBQ6Xp48aCP6m1kdE30Znh4wuzB_bL16UQwBg%40mail.gmail.com?utm_medium=email&utm_source=footer>.
--
You received this message because you are subscribed to the Google
Groups "blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send
an email to blink-dev+unsubscr...@chromium.org.
To view this discussion on the web visit
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAM0wra8bbQg5X__L1%2BJbWS_yr%3Dgf7WnNHEQgBtKG%2Bf99w7ZRjA%40mail.gmail.com
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAM0wra8bbQg5X__L1%2BJbWS_yr%3Dgf7WnNHEQgBtKG%2Bf99w7ZRjA%40mail.gmail.com?utm_medium=email&utm_source=footer>.
--
You received this message because you are subscribed to the Google Groups
"blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to blink-dev+unsubscr...@chromium.org.
To view this discussion on the web visit
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/946c0563-cdd6-483b-93e1-deca23b6bd27%40sarasas.se.