Noir::DirListing
One directory's entries and their lstat results, taken off the thread
that walks the tree.
The detect walk spent most of its time in opendir, readdir, lstat
and one access per directory (the shard.yml check), all on the thread
that also dispatches detection. The walk submits each directory here when
it pushes it and takes the listing when it pops it, so the syscalls run
ahead on Noir::WorkerThreads.walk_context while everything the walk
decides — pruning, filters, order — is unchanged.