Posts

Post not yet marked as solved
7 Replies
617 Views
Hi! I have a macOS app and it uses around 2x more CPU when it's not launched by the Xcode debugger. This is not about build optimization or anything. I can use the exact same executable, and when I launch it directly by double clicking it in Finder it's uses 2x as much CPU as when I launch the executable through the Debug > Debug Executable... option in Xcode. I did some CPU profiling in Instruments, and there is only one difference I could find so far when the app is launched by the Xcode debugger: There is an entry in the trace named CA::Context::commit_transaction(CA::Transaction*, double, double) | Quartz Core. This entry always appears. But - If, and only if the app is not launched by the Xcode debugger, this entry has a child entry _dispatch_async_f_slow which itself has children that seem to be related to dispatch queue "introspection". It looks kind of like this: v CA::Context::commit_transaction(CA::Transaction*, double, double) v _dispatch_async_f_slow > _dispatch_introspection_queue_item_enqueue_hook _dispatch_trace_item_push_internal dispatch_introspection_queue_item_get_info > _dispatch_introspection_queue_item_enqueue Now this alone doesn't account for the huge difference in CPU usage, but my best theory is that this dispatch queue introspection stuff is done all over the app, and cumulatively leads to the 2x slowdown. I'm running Xcode Version 15.1 (15C65) macOS 14.1.2 (23B92) M1 MacBook Air If you have any clue how to prevent this slowdown when the Xcode debugger is not attached please let me know. Thank you so much!
Posted Last updated
.