sdk
sdk copied to clipboard
jit compiler produces erroneous runtime optimizations on large applications
TLDR
Amount of classes somehow trigger bugs in runtime jit optimizations, particularly disabling of Inliner fixed the problem for both our internal codebase and generated example.
might be related to https://github.com/dart-lang/sdk/issues/54886
Description
Recently we faced a strange exception, the app would hit it once in a while and stop working till hot or full restart.
example: (actual list of dirty widgets might change)
FlutterError: buildScope missed some dirty elements.
This probably indicates that the dirty list should have been resorted but was not.
The list of dirty elements at the end of the buildScope call was
AnimatedBuilder
#0 BuildOwner.buildScope.<anonymous closure>
#1 BuildOwner.buildScope
#2 WidgetsBinding.drawFrame
#3 RendererBinding._handlePersistentFrameCallback
#4 SchedulerBinding._invokeFrameCallback
#5 SchedulerBinding.handleDrawFrame
#6 SchedulerBinding._handleDrawFrame
#7 _rootRun (dart:async/zone.dart:1398:13)
#8 _CustomZone.run (dart:async/zone.dart:1300:19)
#9 _CustomZone.runGuarded (dart:async/zone.dart:1208:7)
#10 _invoke (dart:ui/hooks.dart:147:10)
#11 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:338:5)
#12 _drawFrame (dart:ui/hooks.dart:112:31)
With each passing week, it became easier to reproduce it, to the point when we could not debug full application anymore. So it became clear that size of codebase directly affect reproducibility of this exception.
This idea was confirmed by experiment: removal of usages and imports of any large module extinguished exceptions completely. So imports are enough for reproduction, it doesn't matter if code is actually reachable.
Additional debugging showed that at some point the code in jit mode just started working incorrectly. The idea arose that inlining could somehow influence this and it was it. As soon as I replaced vm:prefer-inline
by vm:never-inline
behavior of the bug changed, and as soon as I completely disabled inlining the problem vanished.
example of such behavior
dart 2.19.6, flutter 3.7.12 https://drive.google.com/file/d/1AZij0axanL3FNaqV1EMotJJWy65EO020/view
00:08 - animation freezes
00:12 - buildScope exception happen
00:32 - replace vm:prefer-inline
by vm:never-inline
, and hot reload
01:52 - app is restarted
03:34 - assert _lifecycleState == ElementLifecycle.inactive
04:00 - opening _lifecycleState
in debugger, it's actually .inactive
, so the assertion is wrong
Steps to reproduce
example with reproduction: example project runtime
-
dart ./tools/generate.dart && flutter run
- open and close keyboard a few times, typically 10 times is enough on example that large. expected result: everything continues working actual result: most content of the app is freezed, only focus node still triggers keyboard opening
videos with reproduction on different versions
dart 2.19.6, flutter 3.7.12 https://drive.google.com/file/d/1AZij0axanL3FNaqV1EMotJJWy65EO020/view
00:08 - animation freezes
00:12 - buildScope exception happen
00:32 - replace vm:prefer-inline
by vm:never-inline
, and hot reload
01:52 - app is restarted
03:34 - assert _lifecycleState == ElementLifecycle.inactive
04:00 - opening _lifecycleState
in debugger, it's actually .inactive
, so the assertion is wrong
dart 3.0.0, flutter 3.10.0 https://drive.google.com/file/d/1GlihHsz-rmH6KRxHczIPYSAFG9JZz-zo/view
00:28 - assert _lifecycleState == ElementLifecycle.inactive
00:43 - opening _lifecycleState
in debugger, it's actually .inactive
dart 3.0.6, flutter 3.10.6 https://drive.google.com/file/d/1d5cleiZ_lcL_s84O9CAtCY1UJbCac_Hw/view
00:30 - assert _lifecycleState == ElementLifecycle.inactive
00:47 - opening _lifecycleState
in debugger, it's actually .inactive
dart 3.2.2, flutter 3.16.2 https://drive.google.com/file/d/1CbFF9ZXYkMzynsF7mq-RGvIqwk3QP5rW/view
02:34 - assert _lifecycleState == ElementLifecycle.inactive
02:47 - opening _lifecycleState
in debugger, it's actually .inactive
dart 3.3.0-197.0.dev, flutter master https://drive.google.com/file/d/1NIMoy17jWYEN1Q89FxFH1oEMRWs3wCYH/view
02:11 - assert _lifecycleState == ElementLifecycle.inactive
02:24 - opening _lifecycleState
in debugger, it's actually .inactive
What have we tried to do to mitigate the issue internally
- Disable inliner: https://github.com/2ZeroSix/sdk/compare/feature/reuse_patch_classes...2ZeroSix:sdk:feature/disable_inliner_for_debug
- the bug was never reproduced with disabled inliner
- Use as few mixins as possible. We couldn't determine why it mitigated the issue so effectively.
//cc @alexmarkov
I wasn't able to reproduce the problem both on the current Flutter and on 3.16.2.
@2ZeroSix Could you try reproducing the problem on the latest Flutter (main
channel) once again? Also, please post the output of flutter doctor -v
and flutter run -v
of the failing run.
@alexmarkov Sorry, I seem to have messed up the example to the point where it became impossible to reproduce in 3.16.2 and main, while trying to simplify it.
I've just updated it, the only difference is that i moved back a bunch of export
directives, didn't expect it to be important. commit: https://github.com/2ZeroSix/flutter_gen_snapshot_oom_example/pull/2/commits/011fdf19293ad87d849d4725fed5c045727f2428
Here are logs from flutter 3.16.2
(dart 3.2.2
) and 3.19.0
(dart 3.3.0
), but I couldn't reproduce it on main (flutter: 3.20.0-7.0.pre.64
dart: 3.4.0-140.0.dev
) anymore.
Can't say whether it's an issue with an example or problem was somehow fixed, because our internal code is not ready yet to be built against newest versions. Currently there is a possibility that it was fixed somewhere between 3.3.0-197.0.dev
and 3.4.0-140.0.dev
, trying to investigate further.
3.16.2: flutter doctor -v
[!] Flutter (Channel stable, 3.16.2, on macOS 13.3.1 22E261 darwin-arm64, locale en-RU)
• Flutter version 3.16.2 on channel stable at /Users/2zerosix/fvm/versions/3.16.2
! Warning: `dart` on your path resolves to /opt/homebrew/Cellar/dart/3.2.6/libexec/bin/dart, which is not inside your current Flutter SDK checkout at /Users/2zerosix/fvm/versions/3.16.2. Consider adding /Users/2zerosix/fvm/versions/3.16.2/bin to the front of your path.
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 9e1c857886 (3 months ago), 2023-11-30 11:51:18 -0600
• Engine revision cf7a9d0800
• Dart version 3.2.2
• DevTools version 2.28.3
• If those were intentional, you can disregard the above warnings; however it is recommended to use "git" directly to perform update checks and upgrades.
[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
• Android SDK at /Users/2zerosix/Library/Android/sdk
• Platform android-34, build-tools 34.0.0
• ANDROID_HOME = /Users/2zerosix/Library/Android/sdk
• Java binary at: /Users/2zerosix/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/223.8836.35.2231.11005911/Android Studio.app/Contents/jbr/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b829.9-10027231)
• All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS (Xcode 14.3.1)
• Xcode at /Applications/Xcode14.3.1.app/Contents/Developer
• Build 14E300b
• CocoaPods version 1.15.2
[✓] Chrome - develop for the web
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[✓] Android Studio (version 2022.2)
• Android Studio at /Users/2zerosix/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/222.4459.24.2221.10121639/Android Studio.app/Contents
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b802.4-9586694)
[✓] Android Studio (version 2022.3)
• Android Studio at /Users/2zerosix/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/223.8836.35.2231.11005911/Android Studio.app/Contents
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b829.9-10027231)
[✓] IntelliJ IDEA Ultimate Edition (version 2021.3.2)
• IntelliJ at /Users/2zerosix/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/213.6777.52/IntelliJ IDEA.app
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
[✓] IntelliJ IDEA Ultimate Edition (version 2022.3.1)
• IntelliJ at /Users/2zerosix/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/223.8214.52/IntelliJ IDEA.app
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
[✓] VS Code (version 1.86.1)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 3.82.0
[✓] Connected device (3 available)
• sdk gphone64 arm64 (mobile) • emulator-5554 • android-arm64 • Android 14 (API 34) (emulator)
• macOS (desktop) • macos • darwin-arm64 • macOS 13.3.1 22E261 darwin-arm64
• Chrome (web) • chrome • web-javascript • Google Chrome 121.0.6167.184
! Error: (null) needs to connect to determine its availability. Check the connection between the device and its companion iPhone, and the connection between the iPhone and Xcode. Both devices may also need to be restarted and unlocked. (code 1)
! Error: Bogdan’s iPhone is busy: Making Bogdan’s iPhone ready for development. Xcode will continue when Bogdan’s iPhone is finished. (code -10)
[✓] Network resources
• All expected network resources are available.
! Doctor found issues in 1 category.
3.16.2: dart ./tools/generate.dart && flutter pub get && flutter run -v
full logs: https://github.com/2ZeroSix/flutter_gen_snapshot_oom_example/blob/71638ba7be3b5a580c21199c4b002656af760376/logs/3.16.2.txt
[ +59 ms] ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following assertion was thrown building _BodyBuilder:
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4509 pos 12: '_lifecycleState
== _ElementLifecycle.inactive': is not true.
Either the assertion indicates an error in the framework itself, or we should provide substantially
more information in this error message to help you determine and fix the underlying cause.
In either case, please report this assertion by filing a bug on GitHub:
https://github.com/flutter/flutter/issues/new?template=2_bug.yml
The relevant error-causing widget was:
Scaffold
Scaffold:file:///Users/2zerosix/Projects/flutter_gen_snapshot_oom_example/lib/main.dart:22:22
When the exception was thrown, this was the stack:
#2 Element.debugDeactivated (package:flutter/src/widgets/framework.dart:4509:12)
#3 InheritedElement.debugDeactivated (package:flutter/src/widgets/framework.dart:5920:11)
#4 _InactiveElements._deactivateRecursively.<anonymous closure> (package:flutter/src/widgets/framework.dart:2089:15)
#5 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2091:6)
#6 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5523:14)
#7 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#8 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5523:14)
#9 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#10 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5523:14)
#11 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#12 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5523:14)
#13 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#14 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5523:14)
#15 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#16 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5523:14)
#17 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#18 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5523:14)
#19 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#20 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5523:14)
#21 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#22 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6722:14)
#23 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#24 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6722:14)
#25 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#26 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6722:14)
#27 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#28 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5523:14)
#29 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#30 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5523:14)
#31 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#32 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6722:14)
#33 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#34 Iterable.forEach (dart:core/iterable.dart:347:35)
#35 SlottedRenderObjectElement.visitChildren (package:flutter/src/widgets/slotted_render_object_widget.dart:234:25)
#36 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#37 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5523:14)
#38 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#39 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5523:14)
#40 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#41 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6722:14)
#42 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#43 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5523:14)
#44 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#45 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5523:14)
#46 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#47 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6722:14)
#48 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#49 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5523:14)
#50 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#51 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6722:14)
#52 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#53 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6722:14)
#54 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#55 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6722:14)
#56 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#57 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5523:14)
#58 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#59 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6722:14)
#60 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#61 MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6834:16)
#62 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#63 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5523:14)
#64 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2087:13)
#65 _InactiveElements.add (package:flutter/src/widgets/framework.dart:2099:7)
#66 Element.deactivateChild (package:flutter/src/widgets/framework.dart:4368:30)
#67 Element._retakeInactiveElement (package:flutter/src/widgets/framework.dart:4254:14)
... Normal element mounting (19 frames)
#86 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4326:16)
#87 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6871:36)
#88 Element.updateChild (package:flutter/src/widgets/framework.dart:3837:18)
#89 Element.updateChildren (package:flutter/src/widgets/framework.dart:4024:32)
#90 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6896:17)
#91 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#92 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#93 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#94 ProxyElement.update (package:flutter/src/widgets/framework.dart:5800:5)
#95 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#96 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#97 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5634:11)
#98 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#99 StatefulElement.update (package:flutter/src/widgets/framework.dart:5657:5)
#100 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#101 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#102 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5634:11)
#103 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#104 StatefulElement.update (package:flutter/src/widgets/framework.dart:5657:5)
#105 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#106 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#107 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#108 ProxyElement.update (package:flutter/src/widgets/framework.dart:5800:5)
#109 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#110 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#111 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5634:11)
#112 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#113 StatefulElement.update (package:flutter/src/widgets/framework.dart:5657:5)
#114 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#115 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6743:14)
#116 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#117 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#118 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#119 ProxyElement.update (package:flutter/src/widgets/framework.dart:5800:5)
#120 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#121 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6743:14)
#122 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#123 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#124 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5634:11)
#125 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#126 StatefulElement.update (package:flutter/src/widgets/framework.dart:5657:5)
#127 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#128 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#129 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5634:11)
#130 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#131 StatefulElement.update (package:flutter/src/widgets/framework.dart:5657:5)
#132 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#133 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#134 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#135 ProxyElement.update (package:flutter/src/widgets/framework.dart:5800:5)
#136 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#137 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#138 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#139 ProxyElement.update (package:flutter/src/widgets/framework.dart:5800:5)
#140 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#141 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#142 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#143 ProxyElement.update (package:flutter/src/widgets/framework.dart:5800:5)
#144 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#145 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#146 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5634:11)
#147 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#148 StatefulElement.update (package:flutter/src/widgets/framework.dart:5657:5)
#149 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#150 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#151 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#152 ProxyElement.update (package:flutter/src/widgets/framework.dart:5800:5)
#153 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#154 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#155 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5634:11)
#156 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#157 StatefulElement.update (package:flutter/src/widgets/framework.dart:5657:5)
#158 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#159 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6743:14)
#160 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#161 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6743:14)
#162 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#163 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#164 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5634:11)
#165 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#166 StatefulElement.update (package:flutter/src/widgets/framework.dart:5657:5)
#167 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#168 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#169 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#170 StatelessElement.update (package:flutter/src/widgets/framework.dart:5547:5)
#171 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#172 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#173 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#174 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2895:19)
#175 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:984:21)
#176 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:457:5)
#177 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1325:15)
#178 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1255:9)
#179 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1113:5)
#180 _invoke (dart:ui/hooks.dart:312:13)
#181 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:383:5)
#182 _drawFrame (dart:ui/hooks.dart:283:31)
(elided 2 frames from class _AssertionError)
════════════════════════════════════════════════════════════════════════════════════════════════════
[ +12 ms] Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 2106 pos 12: '_elements.contains(element)': is not true.
[ +16 ms] Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 2106 pos 12: '_elements.contains(element)': is not true.
[ +51 ms] Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 2106 pos 12: '_elements.contains(element)': is not true.
[ +13 ms] Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 2106 pos 12: '_elements.contains(element)': is not true.
[ +14 ms] Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 2106 pos 12: '_elements.contains(element)': is not true.
[ +34 ms] Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 2106 pos 12: '_elements.contains(element)': is not true.
[ +17 ms] Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 2106 pos 12: '_elements.contains(element)': is not true.
3.19.0: flutter doctor -v
[!] Flutter (Channel stable, 3.19.0, on macOS 13.3.1 22E261 darwin-arm64, locale en-RU)
• Flutter version 3.19.0 on channel stable at /Users/2zerosix/fvm/versions/stable
! Warning: `dart` on your path resolves to /opt/homebrew/Cellar/dart/3.2.6/libexec/bin/dart, which is not inside your current Flutter SDK checkout at /Users/2zerosix/fvm/versions/stable. Consider adding /Users/2zerosix/fvm/versions/stable/bin to the front of your path.
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision bae5e49bc2 (3 days ago), 2024-02-13 17:46:18 -0800
• Engine revision 04817c99c9
• Dart version 3.3.0
• DevTools version 2.31.1
• If those were intentional, you can disregard the above warnings; however it is recommended to use "git" directly to perform update checks and upgrades.
[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
• Android SDK at /Users/2zerosix/Library/Android/sdk
• Platform android-34, build-tools 34.0.0
• ANDROID_HOME = /Users/2zerosix/Library/Android/sdk
• Java binary at: /Users/2zerosix/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/223.8836.35.2231.11005911/Android Studio.app/Contents/jbr/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b829.9-10027231)
• All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS (Xcode 14.3.1)
• Xcode at /Applications/Xcode14.3.1.app/Contents/Developer
• Build 14E300b
• CocoaPods version 1.15.2
[✓] Chrome - develop for the web
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[✓] Android Studio (version 2022.2)
• Android Studio at /Users/2zerosix/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/222.4459.24.2221.10121639/Android Studio.app/Contents
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b802.4-9586694)
[✓] Android Studio (version 2022.3)
• Android Studio at /Users/2zerosix/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/223.8836.35.2231.11005911/Android Studio.app/Contents
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b829.9-10027231)
[✓] IntelliJ IDEA Ultimate Edition (version 2021.3.2)
• IntelliJ at /Users/2zerosix/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/213.6777.52/IntelliJ IDEA.app
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
[✓] IntelliJ IDEA Ultimate Edition (version 2022.3.1)
• IntelliJ at /Users/2zerosix/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/223.8214.52/IntelliJ IDEA.app
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
[✓] VS Code (version 1.86.1)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 3.82.0
[✓] Connected device (3 available)
• sdk gphone64 arm64 (mobile) • emulator-5554 • android-arm64 • Android 14 (API 34) (emulator)
• macOS (desktop) • macos • darwin-arm64 • macOS 13.3.1 22E261 darwin-arm64
• Chrome (web) • chrome • web-javascript • Google Chrome 121.0.6167.184
[✓] Network resources
• All expected network resources are available.
! Doctor found issues in 1 category.
3.19.0: dart ./tools/generate.dart && flutter pub get && flutter run -v
full logs: https://github.com/2ZeroSix/flutter_gen_snapshot_oom_example/blob/71638ba7be3b5a580c21199c4b002656af760376/logs/3.19.0.txt
[ +224 ms] ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following assertion was thrown building _BodyBuilder:
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4518 pos 12: '_lifecycleState
== _ElementLifecycle.inactive': is not true.
Either the assertion indicates an error in the framework itself, or we should provide substantially
more information in this error message to help you determine and fix the underlying cause.
In either case, please report this assertion by filing a bug on GitHub:
https://github.com/flutter/flutter/issues/new?template=2_bug.yml
The relevant error-causing widget was:
Scaffold
Scaffold:file:///Users/2zerosix/Projects/flutter_gen_snapshot_oom_example/lib/main.dart:22:22
When the exception was thrown, this was the stack:
#2 Element.debugDeactivated (package:flutter/src/widgets/framework.dart:4518:12)
#3 InheritedElement.debugDeactivated (package:flutter/src/widgets/framework.dart:5929:11)
#4 _InactiveElements._deactivateRecursively.<anonymous closure> (package:flutter/src/widgets/framework.dart:2098:15)
#5 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2100:6)
#6 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5532:14)
#7 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#8 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5532:14)
#9 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#10 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5532:14)
#11 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#12 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5532:14)
#13 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#14 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5532:14)
#15 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#16 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5532:14)
#17 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#18 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5532:14)
#19 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#20 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5532:14)
#21 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#22 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6744:14)
#23 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#24 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6744:14)
#25 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#26 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6744:14)
#27 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#28 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5532:14)
#29 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#30 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5532:14)
#31 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#32 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6744:14)
#33 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#34 Iterable.forEach (dart:core/iterable.dart:347:35)
#35 SlottedRenderObjectElement.visitChildren (package:flutter/src/widgets/slotted_render_object_widget.dart:234:25)
#36 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#37 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5532:14)
#38 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#39 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5532:14)
#40 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#41 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6744:14)
#42 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#43 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5532:14)
#44 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#45 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5532:14)
#46 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#47 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6744:14)
#48 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#49 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5532:14)
#50 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#51 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6744:14)
#52 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#53 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6744:14)
#54 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#55 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6744:14)
#56 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#57 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5532:14)
#58 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#59 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6744:14)
#60 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#61 MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6856:16)
#62 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#63 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5532:14)
#64 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2096:13)
#65 _InactiveElements.add (package:flutter/src/widgets/framework.dart:2108:7)
#66 Element.deactivateChild (package:flutter/src/widgets/framework.dart:4377:30)
#67 Element._retakeInactiveElement (package:flutter/src/widgets/framework.dart:4263:14)
... Normal element mounting (19 frames)
#86 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4335:16)
#87 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6893:36)
#88 Element.updateChild (package:flutter/src/widgets/framework.dart:3846:18)
#89 Element.updateChildren (package:flutter/src/widgets/framework.dart:4033:32)
#90 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6918:17)
#91 Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
#92 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505:16)
#93 Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
#94 ProxyElement.update (package:flutter/src/widgets/framework.dart:5809:5)
#95 Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
#96 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505:16)
#97 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5643:11)
#98 Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
#99 StatefulElement.update (package:flutter/src/widgets/framework.dart:5666:5)
#100 Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
#101 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505:16)
#102 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5643:11)
#103 Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
#104 StatefulElement.update (package:flutter/src/widgets/framework.dart:5666:5)
#105 Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
#106 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505:16)
#107 Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
#108 ProxyElement.update (package:flutter/src/widgets/framework.dart:5809:5)
#109 Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
#110 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505:16)
#111 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5643:11)
#112 Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
#113 StatefulElement.update (package:flutter/src/widgets/framework.dart:5666:5)
#114 Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
#115 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6765:14)
#116 Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
#117 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505:16)
#118 Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
#119 ProxyElement.update (package:flutter/src/widgets/framework.dart:5809:5)
#120 Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
#121 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6765:14)
#122 Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
#123 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505:16)
#124 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5643:11)
#125 Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
#126 StatefulElement.update (package:flutter/src/widgets/framework.dart:5666:5)
#127 Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
#128 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505:16)
#129 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5643:11)
#130 Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
#131 StatefulElement.update (package:flutter/src/widgets/framework.dart:5666:5)
#132 Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
#133 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505:16)
#134 Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
#135 ProxyElement.update (package:flutter/src/widgets/framework.dart:5809:5)
#136 Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
#137 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505:16)
#138 Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
#139 ProxyElement.update (package:flutter/src/widgets/framework.dart:5809:5)
#140 Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
#141 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505:16)
#142 Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
#143 ProxyElement.update (package:flutter/src/widgets/framework.dart:5809:5)
#144 Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
#145 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505:16)
#146 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5643:11)
#147 Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
#148 StatefulElement.update (package:flutter/src/widgets/framework.dart:5666:5)
#149 Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
#150 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505:16)
#151 Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
#152 ProxyElement.update (package:flutter/src/widgets/framework.dart:5809:5)
#153 Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
#154 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505:16)
#155 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5643:11)
#156 Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
#157 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2904:19)
#158 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:989:21)
#159 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:448:5)
#160 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1386:15)
#161 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1311:9)
#162 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1169:5)
#163 _invoke (dart:ui/hooks.dart:312:13)
#164 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:399:5)
#165 _drawFrame (dart:ui/hooks.dart:283:31)
(elided 2 frames from class _AssertionError)
════════════════════════════════════════════════════════════════════════════════════════════════════
[ +2 ms] Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 2115 pos 12: '_elements.contains(element)': is not true.
@2ZeroSix Could you try reproducing the problem with Flutter at b23b3da9353592d6f5d7461ddda13616b00d1815 and 4b110de996eadc4e5080e4725f9d4073a3525914 ?
Flutter b23b3da9353592d6f5d7461ddda13616b00d1815 includes 8c5407b3ddf024dea09aa3db57cbf7c24cca6771 which fixed the bug which appears when there are >64K classes - it could potentially cause the problem you're seeing.
@alexmarkov Seems to be it! Thank you!
reproducible on 4b110de996eadc4e5080e4725f9d4073a3525914
exception 4b110de996eadc4e5080e4725f9d4073a3525914
[ +159 ms] ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following assertion was thrown building _BodyBuilder:
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4519 pos 12: '_lifecycleState
== _ElementLifecycle.inactive': is not true.
Either the assertion indicates an error in the framework itself, or we should provide substantially
more information in this error message to help you determine and fix the underlying cause.
In either case, please report this assertion by filing a bug on GitHub:
https://github.com/flutter/flutter/issues/new?template=2_bug.yml
The relevant error-causing widget was:
Scaffold
Scaffold:file:///Users/2zerosix/Projects/flutter_gen_snapshot_oom_example/lib/main.dart:19:17
When the exception was thrown, this was the stack:
#2 Element.debugDeactivated (package:flutter/src/widgets/framework.dart:4519:12)
#3 InheritedElement.debugDeactivated (package:flutter/src/widgets/framework.dart:5930:11)
#4 _InactiveElements._deactivateRecursively.<anonymous closure> (package:flutter/src/widgets/framework.dart:2099:15)
#5 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2101:6)
#6 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5533:14)
#7 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#8 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5533:14)
#9 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#10 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5533:14)
#11 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#12 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5533:14)
#13 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#14 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5533:14)
#15 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#16 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5533:14)
#17 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#18 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5533:14)
#19 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#20 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5533:14)
#21 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#22 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6745:14)
#23 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#24 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6745:14)
#25 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#26 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6745:14)
#27 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#28 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5533:14)
#29 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#30 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5533:14)
#31 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#32 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6745:14)
#33 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#34 Iterable.forEach (dart:core/iterable.dart:347:35)
#35 SlottedRenderObjectElement.visitChildren (package:flutter/src/widgets/slotted_render_object_widget.dart:234:25)
#36 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#37 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5533:14)
#38 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#39 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5533:14)
#40 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#41 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6745:14)
#42 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#43 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5533:14)
#44 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#45 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5533:14)
#46 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#47 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6745:14)
#48 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#49 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5533:14)
#50 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#51 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6745:14)
#52 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#53 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6745:14)
#54 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#55 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6745:14)
#56 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#57 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5533:14)
#58 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#59 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6745:14)
#60 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#61 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5533:14)
#62 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2097:13)
#63 _InactiveElements.add (package:flutter/src/widgets/framework.dart:2109:7)
#64 Element.deactivateChild (package:flutter/src/widgets/framework.dart:4378:30)
#65 Element._retakeInactiveElement (package:flutter/src/widgets/framework.dart:4264:14)
... Normal element mounting (19 frames)
#84 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4336:16)
#85 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6894:36)
#86 Element.updateChild (package:flutter/src/widgets/framework.dart:3847:18)
#87 Element.updateChildren (package:flutter/src/widgets/framework.dart:4034:32)
#88 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6919:17)
#89 Element.updateChild (package:flutter/src/widgets/framework.dart:3825:15)
#90 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5506:16)
#91 Element.rebuild (package:flutter/src/widgets/framework.dart:5197:7)
#92 ProxyElement.update (package:flutter/src/widgets/framework.dart:5810:5)
#93 Element.updateChild (package:flutter/src/widgets/framework.dart:3825:15)
#94 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5506:16)
#95 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5644:11)
#96 Element.rebuild (package:flutter/src/widgets/framework.dart:5197:7)
#97 StatefulElement.update (package:flutter/src/widgets/framework.dart:5667:5)
#98 Element.updateChild (package:flutter/src/widgets/framework.dart:3825:15)
#99 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5506:16)
#100 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5644:11)
#101 Element.rebuild (package:flutter/src/widgets/framework.dart:5197:7)
#102 StatefulElement.update (package:flutter/src/widgets/framework.dart:5667:5)
#103 Element.updateChild (package:flutter/src/widgets/framework.dart:3825:15)
#104 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5506:16)
#105 Element.rebuild (package:flutter/src/widgets/framework.dart:5197:7)
#106 ProxyElement.update (package:flutter/src/widgets/framework.dart:5810:5)
#107 Element.updateChild (package:flutter/src/widgets/framework.dart:3825:15)
#108 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5506:16)
#109 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5644:11)
#110 Element.rebuild (package:flutter/src/widgets/framework.dart:5197:7)
#111 StatefulElement.update (package:flutter/src/widgets/framework.dart:5667:5)
#112 Element.updateChild (package:flutter/src/widgets/framework.dart:3825:15)
#113 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6766:14)
#114 Element.updateChild (package:flutter/src/widgets/framework.dart:3825:15)
#115 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5506:16)
#116 Element.rebuild (package:flutter/src/widgets/framework.dart:5197:7)
#117 ProxyElement.update (package:flutter/src/widgets/framework.dart:5810:5)
#118 Element.updateChild (package:flutter/src/widgets/framework.dart:3825:15)
#119 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6766:14)
#120 Element.updateChild (package:flutter/src/widgets/framework.dart:3825:15)
#121 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5506:16)
#122 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5644:11)
#123 Element.rebuild (package:flutter/src/widgets/framework.dart:5197:7)
#124 StatefulElement.update (package:flutter/src/widgets/framework.dart:5667:5)
#125 Element.updateChild (package:flutter/src/widgets/framework.dart:3825:15)
#126 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5506:16)
#127 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5644:11)
#128 Element.rebuild (package:flutter/src/widgets/framework.dart:5197:7)
#129 StatefulElement.update (package:flutter/src/widgets/framework.dart:5667:5)
#130 Element.updateChild (package:flutter/src/widgets/framework.dart:3825:15)
#131 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5506:16)
#132 Element.rebuild (package:flutter/src/widgets/framework.dart:5197:7)
#133 ProxyElement.update (package:flutter/src/widgets/framework.dart:5810:5)
#134 Element.updateChild (package:flutter/src/widgets/framework.dart:3825:15)
#135 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5506:16)
#136 Element.rebuild (package:flutter/src/widgets/framework.dart:5197:7)
#137 ProxyElement.update (package:flutter/src/widgets/framework.dart:5810:5)
#138 Element.updateChild (package:flutter/src/widgets/framework.dart:3825:15)
#139 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5506:16)
#140 Element.rebuild (package:flutter/src/widgets/framework.dart:5197:7)
#141 ProxyElement.update (package:flutter/src/widgets/framework.dart:5810:5)
#142 Element.updateChild (package:flutter/src/widgets/framework.dart:3825:15)
#143 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5506:16)
#144 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5644:11)
#145 Element.rebuild (package:flutter/src/widgets/framework.dart:5197:7)
#146 StatefulElement.update (package:flutter/src/widgets/framework.dart:5667:5)
#147 Element.updateChild (package:flutter/src/widgets/framework.dart:3825:15)
#148 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5506:16)
#149 Element.rebuild (package:flutter/src/widgets/framework.dart:5197:7)
#150 ProxyElement.update (package:flutter/src/widgets/framework.dart:5810:5)
#151 Element.updateChild (package:flutter/src/widgets/framework.dart:3825:15)
#152 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5506:16)
#153 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5644:11)
#154 Element.rebuild (package:flutter/src/widgets/framework.dart:5197:7)
#155 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2905:19)
#156 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:993:21)
#157 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:443:5)
#158 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1387:15)
#159 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1312:9)
#160 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1170:5)
#161 _invoke (dart:ui/hooks.dart:312:13)
#162 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:399:5)
#163 _drawFrame (dart:ui/hooks.dart:283:31)
(elided 2 frames from class _AssertionError)
════════════════════════════════════════════════════════════════════════════════════════════════════
couldn't reproduce it on b23b3da9353592d6f5d7461ddda13616b00d1815
I'll try to cherry-pick and try it on our internal code shortly
Thank you, it does really fix the problem that occurs in 3+ versions
The only thing that I still need to figure out is what is triggering "buildScope" variant of exception on 2.19.6, we'll probably stick to work-around with disabled inliner till the end of the migration to 3.0.0
Anyway https://github.com/dart-lang/sdk/commit/8c5407b3ddf024dea09aa3db57cbf7c24cca6771 has not only fixed this problem for versions higher than 3.0.0, but also another one that we haven't been able to report yet!
We were only able to reproduce it in our internal codebase, and we had no luck building an example with the reproduction. All we had is this stack trace: (For future readers: the issue has been fixed in flutter 3.20+)
crash
flutter 3.7.12, dart 2.19.6, gen_snapshot, host: macos, target: android arm (same happens for ios, but android arm64/x86_64 crashes because of https://github.com/dart-lang/sdk/issues/54886)
===== CRASH =====
si_signo=Segmentation fault: 11(11), si_code=1, si_addr=0x3e149
version=2.19.6 (stable) (Tue Mar 28 13:41:04 2023 +0000) on "macos_arm"
pid=27043, thread=-1, isolate_group=isolate(0x7fce0300d000), isolate=(nil)(0x0)
os=macos, arch=arm, comp=no, sim=no
isolate_instructions=0, vm_instructions=0
pc 0x000000010286d4bd fp 0x0000000309b99e40 dart::Class::LookupFunctionReadLocked(dart::String const&, dart::Class::MemberKind) const+0x1cd
pc 0x000000010291dd16 fp 0x0000000309b99f00 dart::ResolveDynamicAnyArgsWithCustomLookup(dart::Zone*, dart::Class const&, dart::String const&, bool, std::_LIBCPP_ABI_NAMESPACE::function<dart::FunctionPtr (dart::Class&, dart::String const&)>)+0x296
pc 0x000000010291d81e fp 0x0000000309b99f90 dart::ResolveDynamicForReceiverClassWithCustomLookup(dart::Class const&, dart::String const&, dart::ArgumentsDescriptor const&, bool, std::_LIBCPP_ABI_NAMESPACE::function<dart::FunctionPtr (dart::Class&, dart::String const&)>)+0x8e
pc 0x000000010291d737 fp 0x0000000309b99ff0 dart::Resolver::ResolveDynamicForReceiverClass(dart::Class const&, dart::String const&, dart::ArgumentsDescriptor const&, bool)+0x47
pc 0x0000000102a78309 fp 0x0000000309b9a040 dart::InstanceCallBaseInstr::ResolveForReceiverClass(dart::Class const&, bool)+0xa9
pc 0x0000000102b329c7 fp 0x0000000309b9a0b0 dart::CallSpecializer::TryCreateICData(dart::InstanceCallInstr*)+0x227
pc 0x0000000102b325d7 fp 0x0000000309b9a110 dart::CallSpecializer::ApplyClassIds()+0x137
pc 0x0000000102b3e962 fp 0x0000000309b9a130 dart::CompilerPass_ApplyClassIds::DoBody(dart::CompilerPassState*) const+0x22
pc 0x0000000102b3d4d0 fp 0x0000000309b9a200 dart::CompilerPass::Run(dart::CompilerPassState*) const+0x1b0
pc 0x0000000102b3d6eb fp 0x0000000309b9a230 dart::CompilerPass::RunInliningPipeline(dart::CompilerPass::PipelineMode, dart::CompilerPassState*)+0x2b
pc 0x0000000102aec37f fp 0x0000000309b9a740 dart::CallSiteInliner::TryInliningImpl(dart::Function const&, dart::Array const&, dart::InlinedCallData*, bool)+0x100f
pc 0x0000000102ae0a56 fp 0x0000000309b9a7e0 dart::CallSiteInliner::TryInlining(dart::Function const&, dart::Array const&, dart::InlinedCallData*, bool)+0xf6
pc 0x0000000102aef55b fp 0x0000000309b9a8d0 dart::CallSiteInliner::InlineStaticCalls()+0x56b
pc 0x0000000102ae665f fp 0x0000000309b9a9f0 dart::CallSiteInliner::InlineCalls()+0x24f
pc 0x0000000102ae62b1 fp 0x0000000309b9aaf0 dart::FlowGraphInliner::Inline()+0x1e1
pc 0x0000000102b3e852 fp 0x0000000309b9ab60 dart::CompilerPass_Inlining::DoBody(dart::CompilerPassState*) const+0x52
pc 0x0000000102b3d4d0 fp 0x0000000309b9ac30 dart::CompilerPass::Run(dart::CompilerPassState*) const+0x1b0
pc 0x0000000102b3d9b9 fp 0x0000000309b9ac60 dart::CompilerPass::RunPipeline(dart::CompilerPass::PipelineMode, dart::CompilerPassState*)+0xa9
pc 0x0000000102a0fb89 fp 0x0000000309b9b330 dart::PrecompileParsedFunctionHelper::Compile(dart::CompilationPipeline*)+0x5c9
pc 0x0000000102a1068d fp 0x0000000309b9b9b0 dart::PrecompileFunctionHelper(dart::Precompiler*, dart::CompilationPipeline*, dart::Function const&, bool)+0x31d
pc 0x0000000102a0b4c6 fp 0x0000000309b9bac0 dart::Precompiler::CompileFunction(dart::Precompiler*, dart::Thread*, dart::Zone*, dart::Function const&)+0x176
pc 0x0000000102a08d51 fp 0x0000000309b9bb60 dart::Precompiler::ProcessFunction(dart::Function const&)+0xf1
pc 0x0000000102a03024 fp 0x0000000309b9bbc0 dart::Precompiler::Iterate()+0x94
pc 0x00000001029fdae9 fp 0x0000000309b9c310 dart::Precompiler::DoCompileAll()+0x1489
pc 0x00000001029fc5db fp 0x0000000309b9c770 dart::Precompiler::CompileAll()+0xbb
pc 0x0000000102bf1d38 fp 0x0000000309b9c8e0 Dart_Precompile+0x248
pc 0x000000010274bf4b fp 0x0000000309b9ca70 dart::bin::main(int, char**)+0x9ab
pc 0x000000020335a41f fp 0x0000000309b9cd00 Unknown symbol
-- End of DumpStackTrace
=== Crash occurred when compiling dart:ui__Channel@15065589__drainStep@15065589 in AOT mode in ApplyClassIds pass
*** BEGIN CFG
ApplyClassIds
==== dart:core_Iterable_get_isNotEmpty (GetterFunction)
B0[graph]:0 {
v39 <- Constant(#null)
v40 <- Constant(#<optimized out>)
}
B12[function entry]:2 {
v41 <- Parameter(0)
v42 <- Parameter(0) T{PatchClass}
}
v43 <- InstanceCall:10( get:isEmpty<0>, v42 IC[0: ], result_type = T{bool?})
AssertBoolean:12(v43)
v44 <- BooleanNegate(v43)
Return:14(v44)
*** END CFG
Dart snapshot generator failed with exit code -6
Target android_aot_release_android-arm failed: Exception: AOT snapshotter exited with code -6
The only thing that I still need to figure out is what is triggering "buildScope" variant of exception on 2.19.6, we'll probably stick to work-around with disabled inliner till the end of the migration to 3.0.0
@alexmarkov it's unlikely, but maybe you know what could have fixed it between 2.19.6 and 3.0.0?
@2ZeroSix thanks for confirming that the fix worked in your app. Can I go ahead and close this issue?
@2ZeroSix thanks for confirming that the fix worked in your app. Can I go ahead and close this issue?
Yes, I have one more question above, but it does have a working work-around and fixed in main
.
Yes, I have one more question above, but it does have a working work-around and fixed in
main
.
You don't think https://github.com/dart-lang/sdk/commit/8c5407b3ddf024dea09aa3db57cbf7c24cca6771 fixed that issue?