-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Investigate options of reducing the base overhead of async
functions as well as overhead per await
.
#48378
Labels
area-vm
Use area-vm for VM related issues, including code coverage, and the AOT and JIT backends.
vm-aot-code-size
Related to improvements in AOT code size
Comments
To determine the priority of this, I have (hopefully correctly) analyzed a version of a big internal app (GP) with the following results
RX makes up 65% of the final AOT app ( So I think we should prioritize this. |
/cc @alexmarkov @mraleph |
copybara-service bot
pushed a commit
that referenced
this issue
Mar 30, 2022
Issue: #48594 Issue: #48378 Change-Id: Ib5bd65c149342bb5d9bb2b5176a4a3b968a08a81 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/238980 Reviewed-by: Martin Kustermann <kustermann@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Apr 21, 2022
This change includes kernel-related changes: * --compact-async option is added to kernel compilers (front-end server and gen_kernel). This option disables desugaring of async and await on kernel AST. Note that 'await for' is still desugared. * File offset of the 'await' is now written for AwaitExpression nodes in the kernel binaries (will be used for async stack traces). * Async/async*/sync* functions and AwaitExpression nodes are supported in TFA. Design doc: go/compact-async-await. TEST=ci Issue: #48378 Change-Id: I4233086b7434bc48347f4220645b0be5f9133456 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/241842 Reviewed-by: Slava Egorov <vegorov@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Apr 29, 2022
The new implementation moves away from desugaring of async functions on kernel AST, state machine generated in the flow graph and capturing all local variables in the context. Instead, async/await is implemented using a few stubs (InitSuspendableFunction, Suspend, Resume, Return and AsyncExceptionHandler). The stubs are implemented in a platform-independent way using (macro-)assembler helpers. When suspending a function, its frame is copied into a SuspendState object, and when resuming a function it is copied back onto the stack. No extra code is generated for accessing local variables. Callback closures are created lazily on the first await. Design doc: go/compact-async-await. Part 1 (kernel): https://dart-review.googlesource.com/c/sdk/+/241842 TEST=ci Issue: #48378 Change-Id: Ibad757035b7cc438ebdff80b460728b1d3eff1f5 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/242000 Reviewed-by: Ryan Macnak <rmacnak@google.com> Reviewed-by: Slava Egorov <vegorov@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Apr 29, 2022
The new implementation results in a much smaller overhead of async/await on AOT snapshot size. The savings depend on how often async/await is used. On a large Flutter app (customer: money) AOT snapshot size -13.7% (arm64), -12.86% (arm) Another large Flutter app AOT snapshot size -8.69% (arm64). Part 1 (kernel): https://dart-review.googlesource.com/c/sdk/+/241842 Part 2 (vm): https://dart-review.googlesource.com/c/sdk/+/242000 TEST=ci Issue: #48378 Change-Id: Idf99bb98725a1ffb21a15b111f03f5461ed2c9d9 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/242384 Reviewed-by: Siva Annamalai <asiva@google.com> Reviewed-by: Slava Egorov <vegorov@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
May 2, 2022
TEST=ci Issue: #48378 Change-Id: I05e1a55070d77fea4402a9db56fca5b3be7207b5 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/243042 Reviewed-by: Martin Kustermann <kustermann@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
May 2, 2022
…tubs TEST=ci Issue: #48378 Change-Id: I0c2ca9269b2c8f008a79c139a0ce10231996732d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/242923 Reviewed-by: Johnni Winther <johnniwinther@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Jun 2, 2022
The new implementation is based on suspend/resume stubs and doesn't use desugaring of async functions on kernel AST. Previously, new implementation of async/async* was only supported in AOT mode. This change adds all necessary bits for the JIT mode: * Suspending variable-length frames (for unoptimized code). * Handling of Code and pool pointers in Dart stack frames. * OSR. * Deoptimization. * Hot reload. * Debugger. The new implementation is not enabled in JIT mode yet. Design doc: go/compact-async-await. TEST=ci Issue: #48378 Change-Id: I477d6684bdce7cbc1edb179ae2271ff598b7dcc5 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/246081 Reviewed-by: Martin Kustermann <kustermann@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Slava Egorov <vegorov@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Jun 2, 2022
TEST=ci Issue: #48378 Change-Id: I0fc069508cb1ce5648deb6604171dfdcd5bcb5c8 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/246082 Reviewed-by: Johnni Winther <johnniwinther@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> Reviewed-by: Slava Egorov <vegorov@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Jun 2, 2022
…in the VM The new implementation of async/async* doesn't use async kernel transformation. TEST=ci Issue: #48378 Change-Id: I86594d8c0df382512e64e59847c178569f7fc38e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/246083 Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Jun 7, 2022
This reverts commit b3544c4. Reason for revert: avoid incompatibility between Dart->kernel compiler and Dart VM during Dart and Flutter rolls (b/234850964). TEST=ci Original change's description: > [vm] Enable new implementation of async/async* in JIT mode > > TEST=ci > > Issue: #48378 > Change-Id: I0fc069508cb1ce5648deb6604171dfdcd5bcb5c8 > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/246082 > Reviewed-by: Johnni Winther <johnniwinther@google.com> > Reviewed-by: Martin Kustermann <kustermann@google.com> > Reviewed-by: Slava Egorov <vegorov@google.com> > Commit-Queue: Alexander Markov <alexmarkov@google.com> TBR=vegorov@google.com,kustermann@google.com,rmacnak@google.com,alexmarkov@google.com,johnniwinther@google.com Change-Id: I6157623857dbfa9bb07eb1f620d100f5b24314d9 No-Presubmit: true No-Tree-Checks: true No-Try: true Issue: #48378 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/247243 Reviewed-by: Siva Annamalai <asiva@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Jun 9, 2022
Cached entry points of core library functions are only used in AOT mode (JIT mode uses Function/Code objects instead of entry points in order to call those functions). This change removes storing entry points into the Thread. It fixes TSAN error which reports a data race between JIT compilation which installs Code and caching of entry points when scheduling a thread. TEST=ci Fixes #49194 Issue: #48378 Change-Id: Ib109118df414cd722001dad363e9e05a94ab0556 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/247501 Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Slava Egorov <vegorov@google.com> Reviewed-by: Daco Harkes <dacoharkes@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Jun 9, 2022
…the Zone During 'await', when registering 'then' and 'error' callbacks in a custom Zone, the stack trace should be collected synchronously as there are no awaiters yet, but the suspended function and its callers are still on the stack. This change corrects the new implementation of async to collect these stack traces synchronously. Class StackZoneSpecification from package:stack_trace relies on the stack traces during callback registration in order to provide more detailed chain of async stack traces via Chain.capture. Without this change package:stack_trace captured truncated Chains. Issue: #48378 Issue: flutter/flutter#105340 TEST=vm/dart/causal_stacks/zone_callback_stack_traces_test Change-Id: Iee348aa5c9abb4126f6c5d8215a6dc2cee57e124 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/247620 Reviewed-by: Slava Egorov <vegorov@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Jun 9, 2022
TEST=ci Issue: #48378 Change-Id: I5b8720b8ef5b8d28773d26c7e94c2e78d876c9d2 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/247603 Reviewed-by: Johnni Winther <johnniwinther@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Slava Egorov <vegorov@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Jun 10, 2022
…alue from async functions From Dart language specification (17.15 Function Invocation): If execution of the body returns an object, o is completed with that object. If it completes normally or returns without an object, o is completed with the null object (17.4), and if it throws an exception e and stack trace t, o is completed with the error e and stack trace t. If execution of the body throws before the body suspends the first time, completion of o happens at some future time after the invocation has returned. The caller needs time to set up error handling for the returned future, so the future is not completed with an error before it has been returned. So far, implementation of async functions in Dart VM postponed completion of the Future both with the value and with an error if execution has not reached the first await. This change modifies the behavior to compile future with value immediately even if the first await was not reached. Completion with an error is still postponed. This change in behavior will let us improve performance of async/await in certain cases. The new behavior still conforms to the Dart language specification. TEST=ci Issue: #48378 Change-Id: I0e80a1d0dd0c3cd6acbc640681e7b06bbf81c19c Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/243101 Reviewed-by: Lasse Nielsen <lrn@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Jun 10, 2022
When awaiting a value which is not a Future or a completed built-in _Future, 'await' implementation can bypass heavyweight _Future/_FutureListener machinery and schedule micro-tasks directly. Benchmarks: JIT, x64: AsyncLiveVars.* +46-54% (bigger is better) Calls.AwaitAsyncCall -46% (less is better) Calls.AwaitAsyncCallInstanceTargetPolymorphic -46% Calls.AwaitAsyncCallClosureTargetPolymorphic -45% Calls.AwaitFutureOrCallInstanceTargetPolymorphicManyAwaits -45% Calls.AwaitFutureOrCall -60% Calls.AwaitFutureOrCallInstanceTargetPolymorphic -60% Calls.AwaitFutureOrCallClosureTargetPolymorphic -59% JIT, ia32: AsyncLiveVars.* +43-52% (bigger is better) Calls.AwaitAsyncCall -42% (less is better) Calls.AwaitAsyncCallInstanceTargetPolymorphic -42% Calls.AwaitAsyncCallClosureTargetPolymorphic -41% Calls.AwaitFutureOrCallInstanceTargetPolymorphicManyAwaits -39% Calls.AwaitFutureOrCall -55% Calls.AwaitFutureOrCallInstanceTargetPolymorphic -54% Calls.AwaitFutureOrCallClosureTargetPolymorphic -53% JIT, arm: AsyncLiveVars.* +64-71% (bigger is better) Calls.AwaitAsyncCallInstanceTargetPolymorphic -51% (less is better) Calls.AwaitAsyncCallClosureTargetPolymorphic -47% Calls.AwaitFutureOrCallInstanceTargetPolymorphicManyAwaits -48% Calls.AwaitFutureOrCall -64% Calls.AwaitFutureOrCallInstanceTargetPolymorphic -64% Calls.AwaitFutureOrCallClosureTargetPolymorphic -59% JIT, arm64: AsyncLiveVars.* +65-78% (bigger is better) Calls.AwaitAsyncCall -51% (less is better) Calls.AwaitAsyncCallInstanceTargetPolymorphic -51% Calls.AwaitAsyncCallClosureTargetPolymorphic -50% Calls.AwaitFutureOrCallInstanceTargetPolymorphicManyAwaits -49% Calls.AwaitFutureOrCall -69% Calls.AwaitFutureOrCallInstanceTargetPolymorphic -68% Calls.AwaitFutureOrCallClosureTargetPolymorphic -67% AOT, x64: AsyncLiveVars.* +55-61% (bigger is better) Calls.AwaitAsyncCall -47% (less is better) Calls.AwaitAsyncCallInstanceTargetPolymorphic -46% Calls.AwaitAsyncCallClosureTargetPolymorphic -47% Calls.AwaitFutureOrCallInstanceTargetPolymorphicManyAwaits -46% Calls.AwaitFutureOrCall -59% Calls.AwaitFutureOrCallInstanceTargetPolymorphic -59% Calls.AwaitFutureOrCallClosureTargetPolymorphic -58% AOT, arm: AsyncLiveVars.* 54-66% (bigger is better) Calls.AwaitAsyncCall -46-51% (less is better) Calls.AwaitAsyncCallInstanceTargetPolymorphic -46-50% Calls.AwaitAsyncCallClosureTargetPolymorphic -46-52% Calls.AwaitFutureOrCallInstanceTargetPolymorphicManyAwaits -45-50% Calls.AwaitFutureOrCall -63-68% Calls.AwaitFutureOrCallInstanceTargetPolymorphic -63-66% Calls.AwaitFutureOrCallClosureTargetPolymorphic -63-67% AOT, arm64: AsyncLiveVars.* +53-66% (bigger is better) Calls.AwaitAsyncCall -50-51% (less is better) Calls.AwaitAsyncCallInstanceTargetPolymorphic -50% Calls.AwaitAsyncCallClosureTargetPolymorphic -50-51% Calls.AwaitFutureOrCallInstanceTargetPolymorphicManyAwaits -49-50% Calls.AwaitFutureOrCall -66-68% Calls.AwaitFutureOrCallInstanceTargetPolymorphic -66-68% Calls.AwaitFutureOrCallClosureTargetPolymorphic -63-67% TEST=ci Issue: #48378 Change-Id: I65e3702fcd816ee3fee876ff442b9887c035b1ec Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/243102 Reviewed-by: Lasse Nielsen <lrn@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Jun 14, 2022
This reverts commit 6b3d175. Reason for revert: internal test failures b/235734143. Original change's description: > [vm] More efficient 'await' of not Future and completed _Future > > When awaiting a value which is not a Future or a completed > built-in _Future, 'await' implementation can bypass heavyweight > _Future/_FutureListener machinery and schedule micro-tasks directly. > > Benchmarks: > JIT, x64: > AsyncLiveVars.* +46-54% (bigger is better) > Calls.AwaitAsyncCall -46% (less is better) > Calls.AwaitAsyncCallInstanceTargetPolymorphic -46% > Calls.AwaitAsyncCallClosureTargetPolymorphic -45% > Calls.AwaitFutureOrCallInstanceTargetPolymorphicManyAwaits -45% > Calls.AwaitFutureOrCall -60% > Calls.AwaitFutureOrCallInstanceTargetPolymorphic -60% > Calls.AwaitFutureOrCallClosureTargetPolymorphic -59% > > JIT, ia32: > AsyncLiveVars.* +43-52% (bigger is better) > Calls.AwaitAsyncCall -42% (less is better) > Calls.AwaitAsyncCallInstanceTargetPolymorphic -42% > Calls.AwaitAsyncCallClosureTargetPolymorphic -41% > Calls.AwaitFutureOrCallInstanceTargetPolymorphicManyAwaits -39% > Calls.AwaitFutureOrCall -55% > Calls.AwaitFutureOrCallInstanceTargetPolymorphic -54% > Calls.AwaitFutureOrCallClosureTargetPolymorphic -53% > > JIT, arm: > AsyncLiveVars.* +64-71% (bigger is better) > Calls.AwaitAsyncCallInstanceTargetPolymorphic -51% (less is better) > Calls.AwaitAsyncCallClosureTargetPolymorphic -47% > Calls.AwaitFutureOrCallInstanceTargetPolymorphicManyAwaits -48% > Calls.AwaitFutureOrCall -64% > Calls.AwaitFutureOrCallInstanceTargetPolymorphic -64% > Calls.AwaitFutureOrCallClosureTargetPolymorphic -59% > > JIT, arm64: > AsyncLiveVars.* +65-78% (bigger is better) > Calls.AwaitAsyncCall -51% (less is better) > Calls.AwaitAsyncCallInstanceTargetPolymorphic -51% > Calls.AwaitAsyncCallClosureTargetPolymorphic -50% > Calls.AwaitFutureOrCallInstanceTargetPolymorphicManyAwaits -49% > Calls.AwaitFutureOrCall -69% > Calls.AwaitFutureOrCallInstanceTargetPolymorphic -68% > Calls.AwaitFutureOrCallClosureTargetPolymorphic -67% > > AOT, x64: > AsyncLiveVars.* +55-61% (bigger is better) > Calls.AwaitAsyncCall -47% (less is better) > Calls.AwaitAsyncCallInstanceTargetPolymorphic -46% > Calls.AwaitAsyncCallClosureTargetPolymorphic -47% > Calls.AwaitFutureOrCallInstanceTargetPolymorphicManyAwaits -46% > Calls.AwaitFutureOrCall -59% > Calls.AwaitFutureOrCallInstanceTargetPolymorphic -59% > Calls.AwaitFutureOrCallClosureTargetPolymorphic -58% > > AOT, arm: > AsyncLiveVars.* 54-66% (bigger is better) > Calls.AwaitAsyncCall -46-51% (less is better) > Calls.AwaitAsyncCallInstanceTargetPolymorphic -46-50% > Calls.AwaitAsyncCallClosureTargetPolymorphic -46-52% > Calls.AwaitFutureOrCallInstanceTargetPolymorphicManyAwaits -45-50% > Calls.AwaitFutureOrCall -63-68% > Calls.AwaitFutureOrCallInstanceTargetPolymorphic -63-66% > Calls.AwaitFutureOrCallClosureTargetPolymorphic -63-67% > > AOT, arm64: > AsyncLiveVars.* +53-66% (bigger is better) > Calls.AwaitAsyncCall -50-51% (less is better) > Calls.AwaitAsyncCallInstanceTargetPolymorphic -50% > Calls.AwaitAsyncCallClosureTargetPolymorphic -50-51% > Calls.AwaitFutureOrCallInstanceTargetPolymorphicManyAwaits -49-50% > Calls.AwaitFutureOrCall -66-68% > Calls.AwaitFutureOrCallInstanceTargetPolymorphic -66-68% > Calls.AwaitFutureOrCallClosureTargetPolymorphic -63-67% > > TEST=ci > Issue: #48378 > > Change-Id: I65e3702fcd816ee3fee876ff442b9887c035b1ec > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/243102 > Reviewed-by: Lasse Nielsen <lrn@google.com> > Commit-Queue: Alexander Markov <alexmarkov@google.com> # Not skipping CQ checks because original CL landed > 1 day ago. Issue: #48378 Change-Id: I8ed0fca7234dd33f45997029b948a63341991ee1 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/248353 Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
copybara-service bot
pushed a commit
that referenced
this issue
Jun 15, 2022
This is a reland of commit 6b3d175 Fixes b/235734143 TEST=runtime/tests/vm/dart/await_in_custom_zone_test.dart Original change's description: > [vm] More efficient 'await' of not Future and completed _Future > > When awaiting a value which is not a Future or a completed > built-in _Future, 'await' implementation can bypass heavyweight > _Future/_FutureListener machinery and schedule micro-tasks directly. > > Benchmarks: > JIT, x64: > AsyncLiveVars.* +46-54% (bigger is better) > Calls.AwaitAsyncCall -46% (less is better) > Calls.AwaitAsyncCallInstanceTargetPolymorphic -46% > Calls.AwaitAsyncCallClosureTargetPolymorphic -45% > Calls.AwaitFutureOrCallInstanceTargetPolymorphicManyAwaits -45% > Calls.AwaitFutureOrCall -60% > Calls.AwaitFutureOrCallInstanceTargetPolymorphic -60% > Calls.AwaitFutureOrCallClosureTargetPolymorphic -59% > > JIT, ia32: > AsyncLiveVars.* +43-52% (bigger is better) > Calls.AwaitAsyncCall -42% (less is better) > Calls.AwaitAsyncCallInstanceTargetPolymorphic -42% > Calls.AwaitAsyncCallClosureTargetPolymorphic -41% > Calls.AwaitFutureOrCallInstanceTargetPolymorphicManyAwaits -39% > Calls.AwaitFutureOrCall -55% > Calls.AwaitFutureOrCallInstanceTargetPolymorphic -54% > Calls.AwaitFutureOrCallClosureTargetPolymorphic -53% > > JIT, arm: > AsyncLiveVars.* +64-71% (bigger is better) > Calls.AwaitAsyncCallInstanceTargetPolymorphic -51% (less is better) > Calls.AwaitAsyncCallClosureTargetPolymorphic -47% > Calls.AwaitFutureOrCallInstanceTargetPolymorphicManyAwaits -48% > Calls.AwaitFutureOrCall -64% > Calls.AwaitFutureOrCallInstanceTargetPolymorphic -64% > Calls.AwaitFutureOrCallClosureTargetPolymorphic -59% > > JIT, arm64: > AsyncLiveVars.* +65-78% (bigger is better) > Calls.AwaitAsyncCall -51% (less is better) > Calls.AwaitAsyncCallInstanceTargetPolymorphic -51% > Calls.AwaitAsyncCallClosureTargetPolymorphic -50% > Calls.AwaitFutureOrCallInstanceTargetPolymorphicManyAwaits -49% > Calls.AwaitFutureOrCall -69% > Calls.AwaitFutureOrCallInstanceTargetPolymorphic -68% > Calls.AwaitFutureOrCallClosureTargetPolymorphic -67% > > AOT, x64: > AsyncLiveVars.* +55-61% (bigger is better) > Calls.AwaitAsyncCall -47% (less is better) > Calls.AwaitAsyncCallInstanceTargetPolymorphic -46% > Calls.AwaitAsyncCallClosureTargetPolymorphic -47% > Calls.AwaitFutureOrCallInstanceTargetPolymorphicManyAwaits -46% > Calls.AwaitFutureOrCall -59% > Calls.AwaitFutureOrCallInstanceTargetPolymorphic -59% > Calls.AwaitFutureOrCallClosureTargetPolymorphic -58% > > AOT, arm: > AsyncLiveVars.* 54-66% (bigger is better) > Calls.AwaitAsyncCall -46-51% (less is better) > Calls.AwaitAsyncCallInstanceTargetPolymorphic -46-50% > Calls.AwaitAsyncCallClosureTargetPolymorphic -46-52% > Calls.AwaitFutureOrCallInstanceTargetPolymorphicManyAwaits -45-50% > Calls.AwaitFutureOrCall -63-68% > Calls.AwaitFutureOrCallInstanceTargetPolymorphic -63-66% > Calls.AwaitFutureOrCallClosureTargetPolymorphic -63-67% > > AOT, arm64: > AsyncLiveVars.* +53-66% (bigger is better) > Calls.AwaitAsyncCall -50-51% (less is better) > Calls.AwaitAsyncCallInstanceTargetPolymorphic -50% > Calls.AwaitAsyncCallClosureTargetPolymorphic -50-51% > Calls.AwaitFutureOrCallInstanceTargetPolymorphicManyAwaits -49-50% > Calls.AwaitFutureOrCall -66-68% > Calls.AwaitFutureOrCallInstanceTargetPolymorphic -66-68% > Calls.AwaitFutureOrCallClosureTargetPolymorphic -63-67% > > TEST=ci > Issue: #48378 > > Change-Id: I65e3702fcd816ee3fee876ff442b9887c035b1ec > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/243102 > Reviewed-by: Lasse Nielsen <lrn@google.com> > Commit-Queue: Alexander Markov <alexmarkov@google.com> Change-Id: I245984ace1c768fdcba58dfdd6aa46e52126be4e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/248442 Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Lasse Nielsen <lrn@google.com> Reviewed-by: Slava Egorov <vegorov@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Jun 27, 2022
Issue: #48378 Change-Id: I7f4b6b56d914a617dfd7ac724cd4414532073b4c TEST=ci Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/249141 Reviewed-by: Johnni Winther <johnniwinther@google.com> Reviewed-by: Slava Egorov <vegorov@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Jul 6, 2022
Issue: #48378 Change-Id: I0cfff561a06c402603ad4f2b977821b572cb6e21 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/250408 Reviewed-by: Slava Egorov <vegorov@google.com> Auto-Submit: Alexander Markov <alexmarkov@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Jul 11, 2022
This change removes kernel transformation which was used to desugar async/async*/sync* functions in the old implementation of async/async*/sync*. The useful part of the transformation is retained in pkg/vm/lib/transformations/for_in_lowering.dart. TEST=ci Issue: #48378 Change-Id: Ic70c1fb35162a31bcc22eac3a8f6488b61e945b4 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/249944 Reviewed-by: Slava Egorov <vegorov@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Jul 11, 2022
…isNative AsyncMarker.SyncYielding and YieldStatement.isNative became obsolete after async/async*/sync* kernel transformation was removed in https://dart-review.googlesource.com/c/sdk/+/249944. TEST=ci Issue: #48378 Change-Id: I69ac994af77f7e403686750bf8df437868bf33fa Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/249947 Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Sigmund Cherem <sigmund@google.com> Reviewed-by: Slava Egorov <vegorov@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Jul 11, 2022
TEST=ci Issue: #48378 Change-Id: I089ba4ed5613f30eec29f0db4ac6d5d8fbffd185 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/249980 Reviewed-by: Martin Kustermann <kustermann@google.com> Reviewed-by: Slava Egorov <vegorov@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Jul 11, 2022
This reverts commit bc8afad. Reason for revert: b/238653741 Original change's description: > [vm] Cleanup old async/async*/sync* implementation from the VM > > TEST=ci > > Issue: #48378 > Change-Id: I089ba4ed5613f30eec29f0db4ac6d5d8fbffd185 > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/249980 > Reviewed-by: Martin Kustermann <kustermann@google.com> > Reviewed-by: Slava Egorov <vegorov@google.com> > Commit-Queue: Alexander Markov <alexmarkov@google.com> TBR=vegorov@google.com,kustermann@google.com,alexmarkov@google.com Change-Id: I6437d2d7d3914eb7fb9fe397472e2a5f7ae0cd9e No-Presubmit: true No-Tree-Checks: true No-Try: true Issue: #48378 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/251147 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Jul 12, 2022
This is a reland of commit bc8afad On top of the original commit, this change fixes incorrect propagation of async/async*/sync* modifiers from a function to its dynamic invocation forwarder. TEST=ci, runtime/tests/vm/dart/regress_b_238653741_test.dart Fixes b/238653741 Issue: #48378 Original change's description: > [vm] Cleanup old async/async*/sync* implementation from the VM > > TEST=ci > > Issue: #48378 > Change-Id: I089ba4ed5613f30eec29f0db4ac6d5d8fbffd185 > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/249980 > Reviewed-by: Martin Kustermann <kustermann@google.com> > Reviewed-by: Slava Egorov <vegorov@google.com> > Commit-Queue: Alexander Markov <alexmarkov@google.com> Change-Id: Iaad033d974a23fc6c5880a3d7f41818eb117f839 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/251300 Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Slava Egorov <vegorov@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Jul 12, 2022
This change introduces separate stubs for suspending sync* functions at start and at yield/yield*. Suspend stub for yield/yield* no longer calls Dart callback (in order to make it faster). Also, ReturnSyncStar stub is removed - sync* functions now directly return false instead of going through the stub. TEST=ci Issue: #48378 Change-Id: Iee9a1f48cab2812cf0f9f0e4e6d8e847547e49f7 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/250420 Reviewed-by: Slava Egorov <vegorov@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Jul 14, 2022
This change continues cleanup of async implementation in the VM. TEST=ci Issue: #48378 Change-Id: Icdaeab18bcdc0d6974bc45841b630822cd1ac114 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/251441 Reviewed-by: Martin Kustermann <kustermann@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Jul 21, 2022
…uspend/resume stubs TEST=none (documentation only change) Issue: #48378 Change-Id: I61e734f85c40e3a301c4185e8917e78c37171590 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/251680 Reviewed-by: Ryan Macnak <rmacnak@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
area-vm
Use area-vm for VM related issues, including code coverage, and the AOT and JIT backends.
vm-aot-code-size
Related to improvements in AOT code size
We pay a high code size cost for
async
functions atm and we should investigate possible improvements.The text was updated successfully, but these errors were encountered: