1

我的 AR iOS 应用程序只是在 ARSession 期间挂起,没有任何问题的线索,或者阻塞主线程的
任何帮助非常感谢。下面是线程回溯

(lldb) thread list
Process 83660 stopped
  thread #1: tid = 0xa7210c, 0x00000001d8e02784 libsystem_kernel.dylib`__psynch_rw_wrlock + 8, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
  thread #6: tid = 0xa721c0, 0x00000001d8ddf644 libsystem_kernel.dylib`mach_msg_trap + 8, name = 'com.apple.uikit.eventfetch-thread'
  thread #10: tid = 0xa721e2, 0x00000001d8ddf644 libsystem_kernel.dylib`mach_msg_trap + 8, name = 'AVAudioSession Notify Thread'
  thread #11: tid = 0xa72247, 0x00000001d8ddf644 libsystem_kernel.dylib`mach_msg_trap + 8, name = 'com.apple.NSURLConnectionLoader'
  thread #13: tid = 0xa722cc, 0x00000001d8ddf644 libsystem_kernel.dylib`mach_msg_trap + 8, name = 'com.apple.coreaudio.AQClient'
  thread #26: tid = 0xa723b3, 0x00000001d8ddf644 libsystem_kernel.dylib`mach_msg_trap + 8, name = 'com.apple.CoreMotion.MotionThread'
  thread #31: tid = 0xa723f8, 0x00000001d8ddf644 libsystem_kernel.dylib`mach_msg_trap + 8, name = 'com.apple.arkit.ardisplaylink.0x28057aa00'
* thread #32: tid = 0xa723f9, 0x00000001d8e03290 libsystem_kernel.dylib`__ulock_wait + 8, name = 'com.apple.scenekit.scnview-renderer', queue = 'com.apple.scenekit.renderingQueue.ARSCNView0x11391c2f0'
  thread #37: tid = 0xa72477, 0x00000001f56d486c libsystem_pthread.dylib`start_wqthread
  thread #38: tid = 0xa72484, 0x00000001f56d486c libsystem_pthread.dylib`start_wqthread
  thread #40: tid = 0xa725a1, 0x00000001f56d486c libsystem_pthread.dylib`start_wqthread
  thread #43: tid = 0xa725ae, 0x00000001d8e0348c libsystem_kernel.dylib`__workq_kernreturn + 8
(lldb) thread info
thread #32: tid = 0xa723f9, 0x00000001d8e03290 libsystem_kernel.dylib`__ulock_wait + 8, name = 'com.apple.scenekit.scnview-renderer', queue = 'com.apple.scenekit.renderingQueue.ARSCNView0x11391c2f0'

(lldb) thread backtrace
* thread #32, name = 'com.apple.scenekit.scnview-renderer', queue = 'com.apple.scenekit.renderingQueue.ARSCNView0x11391c2f0'
  * frame #0: 0x00000001d8e03290 libsystem_kernel.dylib`__ulock_wait + 8
    frame #1: 0x0000000112429fcc libdispatch.dylib`_dlock_wait + 52
    frame #2: 0x000000011242a348 libdispatch.dylib`_dispatch_group_wait_slow + 56
    frame #3: 0x00000001dedcd120 SceneKit`-[SCNTextureCoreAnimationSource _resizeLayer:toSize:updateLayer:updateTransform:caRenderer:] + 204
    frame #4: 0x00000001dedcd6c4 SceneKit`-[SCNTextureCoreAnimationSource __renderLayerUsingMetal:withCARenderer:engineContext:viewport:atTime:forceUpdate:didUpdate:] + 216
    frame #5: 0x00000001dedcde40 SceneKit`-[SCNTextureCoreAnimationSource __updateTextureWithLayer:texture:engineContext:sampler:] + 804
    frame #6: 0x00000001dedce404 SceneKit`-[SCNTextureCoreAnimationSource metalTextureWithEngineContext:textureSampler:nextFrameTime:] + 372
    frame #7: 0x00000001defea5d4 SceneKit`kSCNTextureSourceCallbackGetMetalTexture + 60
    frame #8: 0x00000001dee2664c SceneKit`-[SCNMTLResourceManager(Textures) renderResourceForImageProxy:sampler:engineContext:] + 200
    frame #9: 0x00000001dee2652c SceneKit`-[SCNMTLResourceManager(Textures) renderResourcesForEffectSlot:withEngineContext:] + 128
    frame #10: 0x00000001dee48e38 SceneKit`__39+[SCNMTLRenderContext registerBindings]_block_invoke_28 + 80
    frame #11: 0x00000001dee46270 SceneKit`_execute(SCNMTLRenderContext*, DrawCommand) + 4316
    frame #12: 0x00000001dee45034 SceneKit`-[SCNMTLRenderContext drawRenderElement:withPass:] + 600
    frame #13: 0x00000001dee43fa4 SceneKit`-[SCNMTLRenderContext processRendererElements:count:engineIterationContext:] + 932
    frame #14: 0x00000001def6da78 SceneKit`C3D::DrawNodesPass::_renderEye(long) + 508
    frame #15: 0x00000001def6d7c8 SceneKit`C3D::DrawNodesPass::execute(C3D::RenderArgs const&) + 196
    frame #16: 0x00000001def74bd8 SceneKit`C3D::ScenePass::execute(C3D::RenderArgs const&) + 252
    frame #17: 0x00000001dedff644 SceneKit`C3D::__renderSlice(C3D::RenderGraph*, C3D::RenderPass*, unsigned short&, C3D::RenderGraph::GraphNode const&, C3D::RenderGraph::Stage*&, C3D::RenderArgs, bool, id<MTLCommandBuffer>&) + 1672
    frame #18: 0x00000001dee00e30 SceneKit`C3D::RenderGraph::execute() + 4660
    frame #19: 0x00000001deef8f20 SceneKit`-[SCNRenderer _renderSceneWithEngineContext:sceneTime:] + 440
    frame #20: 0x00000001deef9788 SceneKit`-[SCNRenderer _drawSceneWithNewRenderer:] + 272
    frame #21: 0x00000001deef9cfc SceneKit`-[SCNRenderer _drawScene:] + 48
    frame #22: 0x00000001deefa0a4 SceneKit`-[SCNRenderer _drawAtTime:] + 636
    frame #23: 0x00000001def95418 SceneKit`-[SCNView _drawAtTime:] + 452
    frame #24: 0x00000001dee5a2f0 SceneKit`__76-[NSObject(SCN_DisplayLinkExtensions) SCN_setupDisplayLinkWithQueue:screen:]_block_invoke + 56
    frame #25: 0x00000001def60e14 SceneKit`__36-[SCNDisplayLink _callbackWithTime:]_block_invoke + 64
    frame #26: 0x0000000112429528 libdispatch.dylib`_dispatch_client_callout + 16
    frame #27: 0x0000000112438740 libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete + 124
    frame #28: 0x00000001def60da4 SceneKit`-[SCNDisplayLink _callbackWithTime:] + 232
    frame #29: 0x00000001b0079640 QuartzCore`CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 660
    frame #30: 0x00000001b014ba20 QuartzCore`display_timer_callback(__CFMachPort*, void*, long, void*) + 276
    frame #31: 0x00000001ace9eb54 CoreFoundation`__CFMachPortPerform + 172
    frame #32: 0x00000001acec2420 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 56
    frame #33: 0x00000001acec1834 CoreFoundation`__CFRunLoopDoSource1 + 588
    frame #34: 0x00000001acebb9f4 CoreFoundation`__CFRunLoopRun + 2332
    frame #35: 0x00000001acebaba0 CoreFoundation`CFRunLoopRunSpecific + 572
    frame #36: 0x00000001ae0da7f8 Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 228
    frame #37: 0x00000001dee5a7d8 SceneKit`__78-[SCNView(SCNDisplayLink) _initializeDisplayLinkWithScreen:completionHandler:]_block_invoke + 668
    frame #38: 0x00000001dee5aa74 SceneKit`__SCNRenderThread_start__ + 96
    frame #39: 0x00000001f56cfc9c libsystem_pthread.dylib`_pthread_start + 288
(lldb) thread info
thread #31: tid = 0xa723f8, 0x00000001d8ddf644 libsystem_kernel.dylib`mach_msg_trap + 8, name = 'com.apple.arkit.ardisplaylink.0x28057aa00'

(lldb) thread backtrace
* thread #31, name = 'com.apple.arkit.ardisplaylink.0x28057aa00'
  * frame #0: 0x00000001d8ddf644 libsystem_kernel.dylib`mach_msg_trap + 8
    frame #1: 0x00000001d8ddea48 libsystem_kernel.dylib`mach_msg + 72
    frame #2: 0x00000001acec10fc CoreFoundation`__CFRunLoopServiceMachPort + 376
    frame #3: 0x00000001acebb570 CoreFoundation`__CFRunLoopRun + 1176
    frame #4: 0x00000001acebaba0 CoreFoundation`CFRunLoopRunSpecific + 572
    frame #5: 0x00000001acebbc60 CoreFoundation`CFRunLoopRun + 60
    frame #6: 0x00000001d6bca270 ARKitCore`-[ARRunLoop _startThread] + 560
    frame #7: 0x00000001ae2374bc Foundation`__NSThread__start__ + 848
    frame #8: 0x00000001f56cfc9c libsystem_pthread.dylib`_pthread_start + 288
(lldb) thread info
thread #6: tid = 0xa721c0, 0x00000001d8ddf644 libsystem_kernel.dylib`mach_msg_trap + 8, name = 'com.apple.uikit.eventfetch-thread'

(lldb) thread backtrace
* thread #6, name = 'com.apple.uikit.eventfetch-thread'
  * frame #0: 0x00000001d8ddf644 libsystem_kernel.dylib`mach_msg_trap + 8
    frame #1: 0x00000001d8ddea48 libsystem_kernel.dylib`mach_msg + 72
    frame #2: 0x00000001acec10fc CoreFoundation`__CFRunLoopServiceMachPort + 376
    frame #3: 0x00000001acebb570 CoreFoundation`__CFRunLoopRun + 1176
    frame #4: 0x00000001acebaba0 CoreFoundation`CFRunLoopRunSpecific + 572
    frame #5: 0x00000001ae0da7f8 Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 228
    frame #6: 0x00000001ae0da6d8 Foundation`-[NSRunLoop(NSRunLoop) runUntilDate:] + 88
    frame #7: 0x00000001af858054 UIKitCore`-[UIEventFetcher threadMain] + 504
    frame #8: 0x00000001ae2374bc Foundation`__NSThread__start__ + 848
    frame #9: 0x00000001f56cfc9c libsystem_pthread.dylib`_pthread_start + 288
(lldb) thread info
thread #10: tid = 0xa721e2, 0x00000001d8ddf644 libsystem_kernel.dylib`mach_msg_trap + 8, name = 'AVAudioSession Notify Thread'

(lldb) thread backtrace
* thread #10, name = 'AVAudioSession Notify Thread'
  * frame #0: 0x00000001d8ddf644 libsystem_kernel.dylib`mach_msg_trap + 8
    frame #1: 0x00000001d8ddea48 libsystem_kernel.dylib`mach_msg + 72
    frame #2: 0x00000001acec10fc CoreFoundation`__CFRunLoopServiceMachPort + 376
    frame #3: 0x00000001acebb570 CoreFoundation`__CFRunLoopRun + 1176
    frame #4: 0x00000001acebaba0 CoreFoundation`CFRunLoopRunSpecific + 572
    frame #5: 0x00000001b443b098 AudioSession`GenericRunLoopThread::Entry(void*) + 156
    frame #6: 0x00000001b443cff8 AudioSession`CAPThread::Entry(CAPThread*) + 88
    frame #7: 0x00000001f56cfc9c libsystem_pthread.dylib`_pthread_start + 288
(lldb) thread info
thread #11: tid = 0xa72247, 0x00000001d8ddf644 libsystem_kernel.dylib`mach_msg_trap + 8, name = 'com.apple.NSURLConnectionLoader'

(lldb) thread backtrace
* thread #11, name = 'com.apple.NSURLConnectionLoader'
  * frame #0: 0x00000001d8ddf644 libsystem_kernel.dylib`mach_msg_trap + 8
    frame #1: 0x00000001d8ddea48 libsystem_kernel.dylib`mach_msg + 72
    frame #2: 0x00000001acec10fc CoreFoundation`__CFRunLoopServiceMachPort + 376
    frame #3: 0x00000001acebb570 CoreFoundation`__CFRunLoopRun + 1176
    frame #4: 0x00000001acebaba0 CoreFoundation`CFRunLoopRunSpecific + 572
    frame #5: 0x00000001ad74c4b0 CFNetwork`___lldb_unnamed_symbol11132$$CFNetwork + 552
    frame #6: 0x00000001ae2374bc Foundation`__NSThread__start__ + 848
    frame #7: 0x00000001f56cfc9c libsystem_pthread.dylib`_pthread_start + 288
(lldb) thread info
thread #13: tid = 0xa722cc, 0x00000001d8ddf644 libsystem_kernel.dylib`mach_msg_trap + 8, name = 'com.apple.coreaudio.AQClient'

(lldb) thread backtrace
* thread #13, name = 'com.apple.coreaudio.AQClient'
  * frame #0: 0x00000001d8ddf644 libsystem_kernel.dylib`mach_msg_trap + 8
    frame #1: 0x00000001d8ddea48 libsystem_kernel.dylib`mach_msg + 72
    frame #2: 0x00000001acec10fc CoreFoundation`__CFRunLoopServiceMachPort + 376
    frame #3: 0x00000001acebb570 CoreFoundation`__CFRunLoopRun + 1176
    frame #4: 0x00000001acebaba0 CoreFoundation`CFRunLoopRunSpecific + 572
    frame #5: 0x00000001b59334e0 AudioToolbox`GenericRunLoopThread::Entry(void*) + 156
    frame #6: 0x00000001c19ec464 libAudioToolboxUtility.dylib`CADeprecated::CAPThread::Entry(CADeprecated::CAPThread*) + 88
    frame #7: 0x00000001f56cfc9c libsystem_pthread.dylib`_pthread_start + 288
(lldb) thread info
thread backtrace
* thread #26, name = 'com.apple.CoreMotion.MotionThread'
  * frame #0: 0x00000001d8ddf644 libsystem_kernel.dylib`mach_msg_trap + 8
    frame #1: 0x00000001d8ddea48 libsystem_kernel.dylib`mach_msg + 72
    frame #2: 0x00000001acec10fc CoreFoundation`__CFRunLoopServiceMachPort + 376
    frame #3: 0x00000001acebb570 CoreFoundation`__CFRunLoopRun + 1176
    frame #4: 0x00000001acebaba0 CoreFoundation`CFRunLoopRunSpecific + 572
    frame #5: 0x00000001acebbc60 CoreFoundation`CFRunLoopRun + 60
    frame #6: 0x00000001b7914d68 CoreMotion`___lldb_unnamed_symbol6249$$CoreMotion + 1308
    frame #7: 0x00000001f56cfc9c libsystem_pthread.dylib`_pthread_start + 288
(lldb) thread backtrace
(lldb) thread backtrace
* thread #38
  * frame #0: 0x00000001f56d486c libsystem_pthread.dylib`start_wqthread
(lldb) thread info
thread #1: tid = 0xa7210c, 0x00000001d8e02784 libsystem_kernel.dylib`__psynch_rw_wrlock + 8, queue = 'com.apple.main-thread'

(lldb) thread backtrace
* thread #1, queue = 'com.apple.main-thread'
    frame #0: 0x00000001d8e02784 libsystem_kernel.dylib`__psynch_rw_wrlock + 8
    frame #1: 0x00000001f56cec98 libsystem_pthread.dylib`_pthread_rwlock_lock_wait + 84
    frame #2: 0x00000001f56cec20 libsystem_pthread.dylib`_pthread_rwlock_lock_slow$VARIANT$armv81 + 676
    frame #3: 0x00000001defcc23c SceneKit`C3DTransactionFlush + 444
    frame #4: 0x00000001acec087c CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32
    frame #5: 0x00000001acebaf50 CoreFoundation`__CFRunLoopDoObservers + 604
    frame #6: 0x00000001acebb498 CoreFoundation`__CFRunLoopRun + 960
    frame #7: 0x00000001acebaba0 CoreFoundation`CFRunLoopRunSpecific + 572
    frame #8: 0x00000001c3c20598 GraphicsServices`GSEventRunModal + 160
    frame #9: 0x00000001af7ac2f4 UIKitCore`-[UIApplication _run] + 1052
  * frame #10: 0x00000001af7b1874 UIKitCore`UIApplicationMain + 164
    frame #11: 0x0000000104389cb8 verifyt-b2c-app`main at AppDelegate.swift:14:7 [opt]
    frame #12: 0x00000001acb99568 libdyld.dylib`start + 4

  
4

1 回答 1

1

在您的场景中使用简单的 SCNBox 代替 3D 模型 - 您将看到是否有许多多边形和纹理大小产生了这种冻结。如果是,为 AR 应用程序准备一个包含不超过100K 多边形(理想情况下,不超过 50K 多边形)和png/jpg纹理的场景,模型大小不超过 2Kx2K(理想情况下,不超过 1Kx1K)。

如果没有提到冻结的原因 - 尝试仅使用renderer(...)方法,而不是renderer(...)一起使用session(...)

于 2021-04-23T06:52:23.153 回答