Thank you for the detailed explanation. There's a lot that I'm not quite following yet.
This shows that the main thread was sampled 2529 times and:
All 2529 backtraces included NSApplicationMain (duh!).
Only 2516 included -[NSApplication run].
But all of those also included -[BrowserApplication nextEventMatchingMask:untilDate:inMode:dequeue:].
I’ve heavily edited this to highlight the area around _BlockUntilNextEventMatchingListInModeWithFilter. Of the 2529 total backtraces, 2505 included that symbol. And of those, 2494 included ReceiveNextEventCommon + 587 and the remaining 11 included ReceiveNextEventCommon + 284.
What's the implication of a larger number -- "2494 ReceiveNextEventCommon" -- followed by the smaller number "11 ReceiveNextEventCommon"
What you’re looking for is the thread, or threads, that are not blocked like this, , for example:
The samples for the thread are scattered around a bazillion different routines.
The samples are concentrated in one routine, or a small set of them, but they are obviously not blocking.
I'm imagining a listing that, instead of being hierarchical is more or less flat, repeating over and over again. Is that what you mean?
When you say "blocked" and "not blocked" I'm in a JavaScript headspace where synchronous block the next command and asynchronous step aside and let the next steps run, but that might be misunderstanding what you're getting at.