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 emailsshase...@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.
>>>
>>> Specificationhttps://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 componentBlink>Scheduling>APIs
>>> <https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink%3EScheduling%3EAPIs>
>>>
>>> TAG reviewhttps://github.com/w3ctag/design-reviews/issues/966
>>>
>>> TAG review statusPending
>>>
>>> Chromium Trial NameSchedulerYield
>>>
>>> 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 nameNone
>>>
>>> Non-finch justificationNone
>>>
>>
>> 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 bughttps://bugs.chromium.org/p/chromium/issues/detail?id=979020
>>>
>>> MeasurementUsage is measured by the SchedulerYield UseCounter:
>>> https://chromestatus.com/metrics/feature/popularity#SchedulerYield
>>>
>>> Availability expectationInitially available only in Chromium browsers.
>>>
>>> Adoption expectationFeature 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 planThere 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 discussionsIntent 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.

Reply via email to