I was out while this thread happened, but just wanted to chime in and say I'm super excited for this shipping!!
On Sat, Aug 24, 2024 at 12:22 AM Scott Haseley <shase...@chromium.org> wrote: > Thanks all! > > This will be enabled in M129. (Note: this just missed the M129 branch, so > it wasn't in the initial Chrome Beta release --- but has since been merged > <https://chromium-review.googlesource.com/c/chromium/src/+/5807457>, so > it should be in Beta soon.) > > On Wed, Aug 21, 2024 at 10:20 AM Alex Russell <slightly...@chromium.org> > wrote: > >> LGTM3 >> >> On Wednesday, August 21, 2024 at 9:06:12 AM UTC-7 Daniel Bratell wrote: >> >>> 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. >>> >>> I will, thanks for suggesting. > >> 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 >>>>>> >>>>>> >>>>>> 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/CAKXGoJ3pjM264fK9exzEKK6p347oLUrp-1-4wC79ZSYO5BeGAA%40mail.gmail.com > <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAKXGoJ3pjM264fK9exzEKK6p347oLUrp-1-4wC79ZSYO5BeGAA%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/CAOmohSLeqgM0VkLArRLppieTcdiaUgiCh36chi5xvKqQ-smVCQ%40mail.gmail.com.