dailz
|
bcfbd93f5a
|
refactor(state_portal): extract bitrate helpers + thread loops to submodules
Step 3: split state_portal.rs (1241 -> 829 LOC) into three modules.
- src/state_portal.rs (829 LOC): keeps StatePortal struct + impl (with
poll_and_encode / handle_pw_frame / shutdown / etc.) + Drop + PortalStage
enum + DRM helpers + DRM tests. Per Oracle/Explore audit, all 21
StatePortal fields are private and poll_and_encode interleaves three
channel reads with state-machine transitions; moving it would force
pub(crate) on every field, so it stays in mod.rs.
- src/state_portal/bitrate.rs (144 LOC): RESOLUTION_TIERS + 4 pure fns
(resolution_bitrate_bps / webrtc_startup_bitrate_bps / select_resolution /
next_upscale_tier) + 10 tests that exercise them. Pure fns with no
StatePortal field access — the cleanest possible extract.
- src/state_portal/threads.rs (287 LOC): the 5 thread-related types
(EncodeThreadTiming / EncodeThread / WebrtcThread / WebRtcThreadConfig /
WebRtcThreadChannels) + the two free fns encode_thread_loop /
webrtc_thread_loop + the 3 channel-semantics regression tests
(try_send_* / shutdown_rx_drop_*) that document crossbeam invariants
the shutdown logic relies on. Struct fields widened to pub(super) so
StatePortal in mod.rs can construct and join them.
Test preservation:
- state_portal test count: 17 (mod.rs=4 drm tests + bitrate.rs=10 +
threads.rs=3 channel tests) — matches baseline.
Verification (all green):
- cargo build / cargo build --release
- cargo test (79 lib + 3 integration = 82 pass, 1 ignored — unchanged)
- cargo clippy --all-targets -- -D warnings
- cargo fmt --check
|
2026-07-13 16:35:44 +08:00 |
|