Shell teardown is synchronous. The shell was attempting to destroy components on a quitting message loop. The message loop implementation was executing such tasks on the calling thread which the shell does not consider thread safe.
The thread on which the runner services `CreateApplication` calls is now called `io.flutter.runner.<aot|jit>`. Each application will launch four threads named `<application_name>.<platform|ui|io|gpu>`.
`fx shell ps -T` is an easy way to tell which runners are hosting which applications.
* Scenic is used on the GPU thread and is owned by the session connection held by the rasterizer.
* The view container is used to initialize the mozart bindings on the UI thread.
* Accessibility bridge is used on the platform thread.
We were trying to re-establish the wait after calling Reset(), but
Reset() can result in the surface being destroyed. Now we re-establish
the wait inside the Reset() machinery.
* Update vulkan_swampchain.cc to use getBackendRenderTarget.
The use of getRenderTargetHandle on SkSurface is being removed so switch over to the new API of getBackendRenderTarget.
* Update vulkan_swapchain.cc
* Update vulkan_surface_producer.cc
This syntax fails in conjunction with the new 6-argument constructor
that's been added. Fields were already initialized in the correct
order, so simply omit the field names. Once the constructor lands,
this will switch to calling that.