mapbox / mapbox/mapbox-maps-ios
Crash during MetalView.draw method call
Nobody has claimed this yet.
- Dominant language
- Swift
- Stars
- 601
- Forks
- 196
- PR merge metrics
- No merged PRs in 30d
Description
Thanks for all your hard work!
Environment
-
Xcode version: 15.3
-
iOS version: 17.5.1/17.4.1/17.4/17.3.1/17.3.0/17.2.1/16.7.7/16.6.1/16.3.1
-
Devices affected: iPhone/iPad/Simulator
-
Maps SDK Version: 10.17.0
Observed behavior and steps to reproduce
Just staying on the map, and sometimes this crash happens. I have updateGeoJSONSource and updateLayer called frequently to update the position and appearance of the layer.
Maybe you know what is wrong and can help me understand the cause.
Stack traces:
1
Crashed: com.apple.main-thread
0 MapboxCoreMaps 0x2b0ee0 mbgl::RenderSymbolLayer::render(mbgl::PaintParameters&) + 2500
1 MapboxCoreMaps 0x2e9cd8 mbgl::(anonymous namespace)::LayerRenderItemImpl::render(mbgl::PaintParameters&) const + 92
2 MapboxCoreMaps 0x303cd0 mbgl::Renderer::Impl::render(mbgl::RenderTree const&) + 28280
3 MapboxCoreMaps 0x2f86f0 mbgl::Renderer::render(std::__1::shared_ptr<mbgl::UpdateParameters> const&) + 604
4 MapboxCoreMaps 0x79130 mapbox::maps::MapImpl::Impl::render() + 400
5 MapboxCoreMaps 0x74270 -[MBMMetalViewDelegate drawInMTKView:] + 536
6 MetalKit 0x3224 -[MTKView draw] + 160
7 App 0xd3282c MapView.updateFromDisplayLink(displayLink:) + 631 (MapView.swift:631)
8 App 0xd33354 closure #1 in MapView.didMoveToWindow() + 667 (MapView.swift:667)
9 App 0xd1d93c ForwardingDisplayLinkTarget.update(with:) + 12 (ForwardingDispalyLinkTarget.swift:12)
10 App 0xd1d988 @objc ForwardingDisplayLinkTarget.update(with:) + 4347599240 (<compiler-generated>:4347599240)
11 QuartzCore 0x2fd50 CA::Display::DisplayLinkItem::dispatch_(CA::SignPost::Interval<(CA::SignPost::CAEventCode)835322056>&) + 48
12 QuartzCore 0x32f30 CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 868
13 QuartzCore 0xb1654 CA::Display::DisplayLink::dispatch_deferred_display_links(unsigned int) + 352
14 UIKitCore 0xaad78 _UIUpdateSequenceRun + 84
15 UIKitCore 0xaa468 schedulerStepScheduledMainSection + 144
16 UIKitCore 0xaa524 runloopSourceCallback + 92
17 CoreFoundation 0x3762c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28
18 CoreFoundation 0x368a8 __CFRunLoopDoSource0 + 176
19 CoreFoundation 0x35058 __CFRunLoopDoSources0 + 244
20 CoreFoundation 0x33d88 __CFRunLoopRun + 828
21 CoreFoundation 0x33968 CFRunLoopRunSpecific + 608
22 GraphicsServices 0x34e0 GSEventRunModal + 164
23 UIKitCore 0x22aedc -[UIApplication _run] + 888
24 UIKitCore 0x22a518 UIApplicationMain + 340
25 App 0x806c main + 24 (main.swift:24)
2
Crashed: com.apple.main-thread
0 MapboxCoreMaps 0x1adea0 mbgl::UpdateParameters::~UpdateParameters() + 236
1 MapboxCoreMaps 0x4eb32c mbgl::Placement::reset(std::__1::shared_ptr<mbgl::UpdateParameters const>, mbgl::Placement const*) + 96
2 MapboxCoreMaps 0x4f8c70 mbgl::PlacementController::updatePlacement(std::__1::shared_ptr<mbgl::UpdateParameters const>) + 120
3 MapboxCoreMaps 0x2e0b20 mbgl::RenderOrchestrator::createRenderTree(std::__1::shared_ptr<mbgl::UpdateParameters> const&) + 58852
4 MapboxCoreMaps 0x2f855c mbgl::Renderer::render(std::__1::shared_ptr<mbgl::UpdateParameters> const&) + 200
5 MapboxCoreMaps 0x79130 mapbox::maps::MapImpl::Impl::render() + 400
6 MapboxCoreMaps 0x74270 -[MBMMetalViewDelegate drawInMTKView:] + 536
7 MetalKit 0x3224 -[MTKView draw] + 160
8 App 0xd3282c MapView.updateFromDisplayLink(displayLink:) + 631 (MapView.swift:631)
9 App 0xd33354 closure #1 in MapView.didMoveToWindow() + 667 (MapView.swift:667)
10 App 0xd1d93c ForwardingDisplayLinkTarget.update(with:) + 12 (ForwardingDispalyLinkTarget.swift:12)
11 App 0xd1d988 @objc ForwardingDisplayLinkTarget.update(with:) + 4324645256 (<compiler-generated>:4324645256)
12 QuartzCore 0x2fd50 CA::Display::DisplayLinkItem::dispatch_(CA::SignPost::Interval<(CA::SignPost::CAEventCode)835322056>&) + 48
13 QuartzCore 0x32f30 CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 868
14 QuartzCore 0xb1654 CA::Display::DisplayLink::dispatch_deferred_display_links(unsigned int) + 352
15 UIKitCore 0xaad78 _UIUpdateSequenceRun + 84
16 UIKitCore 0xaa468 schedulerStepScheduledMainSection + 144
17 UIKitCore 0xaa524 runloopSourceCallback + 92
18 CoreFoundation 0x3762c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28
19 CoreFoundation 0x368a8 __CFRunLoopDoSource0 + 176
20 CoreFoundation 0x35058 __CFRunLoopDoSources0 + 244
21 CoreFoundation 0x33d88 __CFRunLoopRun + 828
22 CoreFoundation 0x33968 CFRunLoopRunSpecific + 608
23 GraphicsServices 0x34e0 GSEventRunModal + 164
24 UIKitCore 0x22aedc -[UIApplication _run] + 888
25 UIKitCore 0x22a518 UIApplicationMain + 340
26 App 0x806c main + 24 (main.swift:24)
3
Crashed: com.apple.main-thread
0 MapboxCoreMaps 0x3e2bd8 std::__1::__tree<std::__1::__value_type<unsigned char, unsigned int>, std::__1::__map_value_compare<unsigned char, std::__1::__value_type<unsigned char, unsigned int>, std::__1::less<unsigned char>, true>, std::__1::allocator<std::__1::__value_type<unsigned char, unsigned int>>>::destroy(std::__1::__tree_node<std::__1::__value_type<unsigned char, unsigned int>, void*>*) + 24
1 MapboxCoreMaps 0x3e2be0 std::__1::__tree<std::__1::__value_type<unsigned char, unsigned int>, std::__1::__map_value_compare<unsigned char, std::__1::__value_type<unsigned char, unsigned int>, std::__1::less<unsigned char>, true>, std::__1::allocator<std::__1::__value_type<unsigned char, unsigned int>>>::destroy(std::__1::__tree_node<std::__1::__value_type<unsigned char, unsigned int>, void*>*) + 32
2 MapboxCoreMaps 0x3e2be0 std::__1::__tree<std::__1::__value_type<unsigned char, unsigned int>, std::__1::__map_value_compare<unsigned char, std::__1::__value_type<unsigned char, unsigned int>, std::__1::less<unsigned char>, true>, std::__1::allocator<std::__1::__value_type<unsigned char, unsigned int>>>::destroy(std::__1::__tree_node<std::__1::__value_type<unsigned char, unsigned int>, void*>*) + 32
3 MapboxCoreMaps 0x3e2be0 std::__1::__tree<std::__1::__value_type<unsigned char, unsigned int>, std::__1::__map_value_compare<unsigned char, std::__1::__value_type<unsigned char, unsigned int>, std::__1::less<unsigned char>, true>, std::__1::allocator<std::__1::__value_type<unsigned char, unsigned int>>>::destroy(std::__1::__tree_node<std::__1::__value_type<unsigned char, unsigned int>, void*>*) + 32
4 MapboxCoreMaps 0x3e2bec std::__1::__tree<std::__1::__value_type<unsigned char, unsigned int>, std::__1::__map_value_compare<unsigned char, std::__1::__value_type<unsigned char, unsigned int>, std::__1::less<unsigned char>, true>, std::__1::allocator<std::__1::__value_type<unsigned char, unsigned int>>>::destroy(std::__1::__tree_node<std::__1::__value_type<unsigned char, unsigned int>, void*>*) + 44
5 MapboxCoreMaps 0x4b43a8 std::__1::__shared_ptr_pointer<mbgl::style::GeoJSONVTData*, std::__1::shared_ptr<mbgl::style::GeoJSONData>::__shared_ptr_default_delete<mbgl::style::GeoJSONData, mbgl::style::GeoJSONVTData>, std::__1::allocator<mbgl::style::GeoJSONVTData>>::__on_zero_shared() + 124
6 MapboxCoreMaps 0x4abd10 std::__1::__shared_ptr_emplace<mbgl::style::GeoJSONSource::Impl, std::__1::allocator<mbgl::style::GeoJSONSource::Impl>>::__on_zero_shared() + 124
7 MapboxCoreMaps 0x2d21c8 std::__1::__shared_ptr_emplace<std::__1::vector<mbgl::Immutable<mbgl::style::Source::Impl>, std::__1::allocator<mbgl::Immutable<mbgl::style::Source::Impl>>>, std::__1::allocator<std::__1::vector<mbgl::Immutable<mbgl::style::Source::Impl>, std::__1::allocator<mbgl::Immutable<mbgl::style::Source::Impl>>>>>::__on_zero_shared() + 108
8 MapboxCoreMaps 0x1ade90 mbgl::UpdateParameters::~UpdateParameters() + 220
9 MapboxCoreMaps 0x4eb32c mbgl::Placement::reset(std::__1::shared_ptr<mbgl::UpdateParameters const>, mbgl::Placement const*) + 96
10 MapboxCoreMaps 0x4f8c70 mbgl::PlacementController::updatePlacement(std::__1::shared_ptr<mbgl::UpdateParameters const>) + 120
11 MapboxCoreMaps 0x2e0b20 mbgl::RenderOrchestrator::createRenderTree(std::__1::shared_ptr<mbgl::UpdateParameters> const&) + 58852
12 MapboxCoreMaps 0x2f855c mbgl::Renderer::render(std::__1::shared_ptr<mbgl::UpdateParameters> const&) + 200
13 MapboxCoreMaps 0x79130 mapbox::maps::MapImpl::Impl::render() + 400
14 MapboxCoreMaps 0x74270 -[MBMMetalViewDelegate drawInMTKView:] + 536
15 MetalKit 0x74b4 -[MTKView draw] + 160
16 App 0xd3282c MapView.updateFromDisplayLink(displayLink:) + 631 (MapView.swift:631)
17 App 0xd33354 closure #1 in MapView.didMoveToWindow() + 667 (MapView.swift:667)
18 App 0xd1d93c ForwardingDisplayLinkTarget.update(with:) + 12 (ForwardingDispalyLinkTarget.swift:12)
19 App 0xd1d988 @objc ForwardingDisplayLinkTarget.update(with:) + 4316404104 (<compiler-generated>:4316404104)
20 QuartzCore 0xd0ecc CA::Display::DisplayLinkItem::dispatch_(CA::SignPost::Interval<(CA::SignPost::CAEventCode)835322056>&) + 48
21 QuartzCore 0xcf230 CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 876
22 QuartzCore 0xcedd0 CA::Display::DisplayLink::dispatch_deferred_display_links(unsigned int) + 352
23 UIKitCore 0xb776c _UIUpdateSequenceRun + 84
24 UIKitCore 0xb73b0 schedulerStepScheduledMainSection + 172
25 UIKitCore 0xb8254 runloopSourceCallback + 92
26 CoreFoundation 0x56834 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28
27 CoreFoundation 0x567c8 __CFRunLoopDoSource0 + 176
28 CoreFoundation 0x54298 __CFRunLoopDoSources0 + 244
29 CoreFoundation 0x53484 __CFRunLoopRun + 828
30 CoreFoundation 0x52cd8 CFRunLoopRunSpecific + 608
31 GraphicsServices 0x11a8 GSEventRunModal + 164
32 UIKitCore 0x40a90c -[UIApplication _run] + 888
33 UIKitCore 0x4be9d0 UIApplicationMain + 340
34 App 0x806c main + 24 (main.swift:24)
Expected behavior
No crash
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with MapView.swift at updateFromDisplayLink(displayLink:) line 631 and didMoveToWindow() line 667, then trace the frequent updateGeoJSONSource and updateLayer calls into the MetalView.draw stack shown here. Reproduce the crash with repeated source and layer updates; done means the map remains stable without a render-thread crash.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- ios, swift
- Domain
- computer-graphics, mobile
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100