1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
//! Everything specific to dispatching an export's remote lane against an
//! `indicatrix-worker`: whether remote is even available and within its advertised
//! limits ([`capability`]), how big a chunk to claim next given the rate observed so
//! far ([`rate`]), and running the dispatch loop for the whole concurrent phase
//! ([`dispatch`]).
//!
//! # Where disjointness comes from
//!
//! Nothing here hands out sample ranges itself: every chunk comes from
//! `SampleCursor::claim`, the single shared atomic claim point local and remote both
//! draw from. This module only decides how much to claim next
//! ([`rate::remote_request_samples`]: a target duration for the peer's kind, held to
//! what one request may carry) and runs each claimed chunk to completion or failure
//! ([`dispatch::run_remote_batch`]).
//!
//! # Partial completion, not failure
//!
//! A chunk that comes back short (dropped connection, worker-side error, early
//! `DONE`) is not automatically an export failure: [`dispatch::run_remote_lane`]
//! merges whatever prefix completed and hands the remainder back to
//! `SampleCursor::return_to_local` for the local lane, as long as one exists
//! (`ComputeTarget::Both`). Only `ComputeTarget::RemoteOnly`, with no local lane to
//! fall back to, turns a short chunk into a fatal [`dispatch::RemoteLaneOutcome`].
//!
//! # Final picture only
//!
//! [`final_image`] is the other transfer: one `FinalImageRequest` per image, the remote
//! renders AND tone-maps, the viewer receives one PNG. No sample cursor, no local lane.
pub use ;
pub use ;
pub use ;
pub use forget_final_picture_refusals;
pub use ;
pub use ;