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.