Skip to content

Crash under sendIndexedMeshToGpu when resizing macOS embedder #17579

@stuartmorgan-g

Description

@stuartmorgan-g

The macOS embedder (https://github.com/google/flutter-desktop-embedding) pretty reliably crashes during window resizing.

None of the code in the stack trace is from the embedder, so it looks like this is a Flutter (or graphics driver, but that seems much less likely) bug.

STR:

  • Clone the repo above and open macos/example/Example Embedder.xcodeproj.
  • Build and run.
  • Start resizing the window and just move the mouse around a bunch.

The stack trace looks like this (the end portion seems consistent in my testing so far):

* thread #8, name = 'io.flutter.gpu', stop reason = EXC_BAD_ACCESS (code=1, address=0x8)
  * frame #0: 0x00000001080187dc AppleIntelKBLGraphicsGLDriver`void updateBindingTable<SGfx3dStateBindingTablePointers>(GenContext*, unsigned int, SGfx3dStateBindingTablePointers&) + 1233
    frame #1: 0x0000000108015a5e AppleIntelKBLGraphicsGLDriver`GenContext::ProgramPipeline() + 18032
    frame #2: 0x0000000108010a22 AppleIntelKBLGraphicsGLDriver`glrIntelRenderVertexArray + 412
    frame #3: 0x00007fff3d4415e1 GLEngine`glDrawRangeElements_ACC_Exec + 448
    frame #4: 0x00007fff3c808b31 libGL.dylib`glDrawRangeElements + 45
    frame #5: 0x0000000101131d7e FlutterEmbedder`GrGLGpu::sendIndexedMeshToGpu(GrPrimitiveProcessor const&, GrPrimitiveType, GrBuffer const*, int, int, unsigned short, unsigned short, GrBuffer const*, int) + 254
    frame #6: 0x0000000101131a28 FlutterEmbedder`GrMesh::sendToGpu(GrPrimitiveProcessor const&, GrMesh::SendToGpuImpl*) const + 248
    frame #7: 0x0000000101131850 FlutterEmbedder`GrGLGpu::draw(GrPipeline const&, GrPrimitiveProcessor const&, GrMesh const*, GrPipeline::DynamicState const*, int) + 592
    frame #8: 0x000000010105276d FlutterEmbedder`GrGpuRTCommandBuffer::draw(GrPipeline const&, GrPrimitiveProcessor const&, GrMesh const*, GrPipeline::DynamicState const*, int, SkRect const&) + 189
    frame #9: 0x0000000101053d13 FlutterEmbedder`GrOpFlushState::executeDrawsAndUploadsForMeshDrawOp(unsigned int, SkRect const&) + 115
    frame #10: 0x0000000101070b00 FlutterEmbedder`GrRenderTargetOpList::onExecute(GrOpFlushState*) + 512
    frame #11: 0x000000010104a947 FlutterEmbedder`GrDrawingManager::executeOpLists(int, int, GrOpFlushState*) + 567
    frame #12: 0x000000010104a46b FlutterEmbedder`GrDrawingManager::internalFlush(GrSurfaceProxy*, GrResourceCache::FlushType, int, GrBackendSemaphore*) + 1755
    frame #13: 0x000000010104aaa8 FlutterEmbedder`GrDrawingManager::prepareSurfaceForExternalIO(GrSurfaceProxy*, int, GrBackendSemaphore*) + 152
    frame #14: 0x000000010106dcd7 FlutterEmbedder`GrRenderTargetContext::prepareForExternalIO(int, GrBackendSemaphore*) + 359
    frame #15: 0x000000010143f0ed FlutterEmbedder`shell::GPUSurfaceGL::PresentSurface(SkCanvas*) + 493
    frame #16: 0x0000000100e23f0a FlutterEmbedder`shell::SurfaceFrame::Submit() + 106
    frame #17: 0x0000000100e13f4b FlutterEmbedder`shell::Rasterizer::DrawToSurface(flow::LayerTree&) + 203
    frame #18: 0x0000000100e14256 FlutterEmbedder`shell::Rasterizer::DoDraw(std::__1::unique_ptr<flow::LayerTree, std::__1::default_delete<flow::LayerTree> >) + 54
    frame #19: 0x0000000100e14de7 FlutterEmbedder`std::__1::__function::__func<std::__1::__bind<void (shell::Rasterizer::*)(std::__1::unique_ptr<flow::LayerTree, std::__1::default_delete<flow::LayerTree> >), shell::Rasterizer*, std::__1::placeholders::__ph<1> const&>, std::__1::allocator<std::__1::__bind<void (shell::Rasterizer::*)(std::__1::unique_ptr<flow::LayerTree, std::__1::default_delete<flow::LayerTree> >), shell::Rasterizer*, std::__1::placeholders::__ph<1> const&> >, void (std::__1::unique_ptr<flow::LayerTree, std::__1::default_delete<flow::LayerTree> >)>::operator()(std::__1::unique_ptr<flow::LayerTree, std::__1::default_delete<flow::LayerTree> >&&) + 71
    frame #20: 0x0000000100e1444f FlutterEmbedder`flutter::Pipeline<flow::LayerTree>::Consume(std::__1::function<void (std::__1::unique_ptr<flow::LayerTree, std::__1::default_delete<flow::LayerTree> >)>) + 399
    frame #21: 0x0000000100e140aa FlutterEmbedder`shell::Rasterizer::Draw(fxl::RefPtr<flutter::Pipeline<flow::LayerTree> >) + 218
    frame #22: 0x0000000100e222b6 FlutterEmbedder`std::__1::__function::__func<shell::Shell::OnAnimatorDraw(shell::Animator const&, fxl::RefPtr<flutter::Pipeline<flow::LayerTree> >)::$_22, std::__1::allocator<shell::Shell::OnAnimatorDraw(shell::Animator const&, fxl::RefPtr<flutter::Pipeline<flow::LayerTree> >)::$_22>, void ()>::operator()() + 70
    frame #23: 0x0000000100d82843 FlutterEmbedder`fml::MessageLoopImpl::RunExpiredTasks() + 1587
    frame #24: 0x0000000100d871cc FlutterEmbedder`fml::MessageLoopDarwin::OnTimerFire(__CFRunLoopTimer*, fml::MessageLoopDarwin*) + 44
    frame #25: 0x00007fff32eba064 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
    frame #26: 0x00007fff32eb9cd7 CoreFoundation`__CFRunLoopDoTimer + 1095
    frame #27: 0x00007fff32eb97da CoreFoundation`__CFRunLoopDoTimers + 346
    frame #28: 0x00007fff32eb0dab CoreFoundation`__CFRunLoopRun + 2427
    frame #29: 0x00007fff32eb01a3 CoreFoundation`CFRunLoopRunSpecific + 483
    frame #30: 0x0000000100d8741d FlutterEmbedder`fml::MessageLoopDarwin::Run() + 93
    frame #31: 0x0000000100d82ba5 FlutterEmbedder`fml::MessageLoopImpl::DoRun() + 53
    frame #32: 0x0000000100d86999 FlutterEmbedder`void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0> >(void*) + 265
    frame #33: 0x00000001027e6665 libsystem_pthread.dylib`_pthread_body + 340
    frame #34: 0x00000001027e6511 libsystem_pthread.dylib`_pthread_start + 377
    frame #35: 0x00000001027e5bfd libsystem_pthread.dylib`thread_start + 13

Metadata

Metadata

Assignees

Labels

a: desktopRunning on desktopc: crashStack traces logged to the consolecustomer: octopode: embedderUsers of the Embedder APIengineflutter/engine related. See also e: labels.platform-macBuilding on or for macOS specifically

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions