One lock covers every kind of work that touches the loaders' shared buffers:
a view pass (updateView's sweep + atomic commit), the frame the lock is
held across between two passes, a progressive-refinement drain, and a
failed-loader retry. This class owns that lock and everything that decides
who runs next:
the pending slot (one latest-wins view state, in ViewStateQueue);
request generations and the waiters parked on them (#2943), which make
waitForUpdate() and the dimension-animation pacing gate wait for the
view they asked for to COMMIT, not merely to be accepted;
the targeted-resync stash (partition parts re-entering the frustum);
the B5 drag commit guarantee and its hold-expiry timer;
refinement start, hand-off, pre-emption by a retry (A10) and release.
idle lock free.
pass a view pass is running (generation PassScheduler.passGen).
yielding the lock is held across a frame with no pass in flight (between
two serialized passes, or a refinement cancellation hand-off).
refining a refinement drain holds the lock it inherited from a pass tail
or a load.
retrying a failed-loader retry holds the lock.
What runs, and for which view, stays with the host (SceneLoader): this
class never reads geometry or loaders except through PassSchedulerHost.
Serialization of a SceneLoader's view passes.
One lock covers every kind of work that touches the loaders' shared buffers: a view pass (
updateView's sweep + atomic commit), the frame the lock is held across between two passes, a progressive-refinement drain, and a failed-loader retry. This class owns that lock and everything that decides who runs next:waitForUpdate()and the dimension-animation pacing gate wait for the view they asked for to COMMIT, not merely to be accepted;The state is explicit in PassScheduler.phase:
idle lock free. pass a view pass is running (generation PassScheduler.passGen). yielding the lock is held across a frame with no pass in flight (between two serialized passes, or a refinement cancellation hand-off). refining a refinement drain holds the lock it inherited from a pass tail or a load. retrying a failed-loader retry holds the lock.
What runs, and for which view, stays with the host (
SceneLoader): this class never reads geometry or loaders except through PassSchedulerHost.