perf: coalesce superseded queued playback seeks
This commit is contained in:
@@ -399,6 +399,39 @@ struct CastSessionCheck {
|
||||
language: "en", label: "English")])
|
||||
}
|
||||
|
||||
static func seekCoalescing(identity: SecIdentity) async throws {
|
||||
let peer = try Receiver(identity: identity)
|
||||
try await peer.start()
|
||||
defer { peer.stop() }
|
||||
let clock = CastCheckClock()
|
||||
let session = CastSession(sleep: { try await clock.sleep($0) })
|
||||
var status: CastStatus?
|
||||
var errors: [String] = []
|
||||
session.onStatus = { status = $0 }
|
||||
session.onError = { errors.append($0) }
|
||||
try await session.connect(to: peer.device)
|
||||
try await session.load(media(), title: "Seek burst", position: 0, playing: false, subtitle: nil)
|
||||
let before = peer.commands.count
|
||||
for target in 1...64 { require(session.seek(Double(target)), "Seek burst exceeds ordinary queue capacity") }
|
||||
require(session.setPlaying(true), "PLAY separates seek runs")
|
||||
for target in 65...96 { require(session.seek(Double(target)), "Second seek run accepted") }
|
||||
require(session.setPlaying(false), "PAUSE separates seek runs")
|
||||
for target in (48...63).reversed() { require(session.seek(Double(target)), "Reverse seek run accepted") }
|
||||
require(status?.seekPending == true, "Latest queued seek remains unacknowledged")
|
||||
try await until("Final seek and playback acknowledged") {
|
||||
status?.position == 48 && status?.seekPending == false &&
|
||||
status?.playing == false && status?.playbackPending == false
|
||||
}
|
||||
let controls = peer.commands.dropFirst(before).filter { ["SEEK", "PLAY", "PAUSE"].contains($0.0) }
|
||||
let targets = controls.filter { $0.0 == "SEEK" }.compactMap { $0.1["currentTime"] as? Double }
|
||||
require(targets == [64, 96, 48] || targets == [1, 64, 96, 48],
|
||||
"Only unsent adjacent seeks are replaced")
|
||||
require(Array(controls.suffix(5)).map(\.0) == ["SEEK", "PLAY", "SEEK", "PAUSE", "SEEK"],
|
||||
"Playback controls remain seek ordering barriers")
|
||||
require(errors.isEmpty && peer.failure == nil, "Superseded requests do not fail or leak queue capacity")
|
||||
session.disconnect()
|
||||
}
|
||||
|
||||
static func behavior(identity: SecIdentity) async throws {
|
||||
let peer = try Receiver(identity: identity)
|
||||
peer.muted = true
|
||||
@@ -756,10 +789,6 @@ struct CastSessionCheck {
|
||||
let load = peer.commands.first { $0.0 == "LOAD" }!.1
|
||||
require(load["currentTime"] as? Double == 9.25 && load["autoplay"] as? Bool == false, "Acknowledged paused handoff")
|
||||
require(peer.relayVerified, "Receiver fetches real relay HLS and media bytes")
|
||||
let controls = peer.commands.filter { ["PLAY", "SEEK", "PAUSE", "STOP"].contains($0.0) }
|
||||
require(controls.map(\.0) == ["PLAY", "SEEK", "SEEK", "PAUSE", "STOP"], "Integrated controls ordered")
|
||||
require(controls[1].1["currentTime"] as? Double == 14.25 &&
|
||||
controls[2].1["currentTime"] as? Double == 24.25, "Rapid skips accumulate from the pending target")
|
||||
}
|
||||
|
||||
static func interruptedPlayback(identity: SecIdentity, executable: String, file: String) async throws {
|
||||
@@ -886,6 +915,7 @@ struct CastSessionCheck {
|
||||
print("PASS: interrupted Cast connect/LOAD, rejection, replacement/close, latest intent and acknowledged-position recovery")
|
||||
} else {
|
||||
try await behavior(identity: identity)
|
||||
try await seekCoalescing(identity: identity)
|
||||
try await launchRegressions(identity: identity)
|
||||
try await volumeRegressions(identity: identity)
|
||||
try await failures(identity: identity)
|
||||
|
||||
Reference in New Issue
Block a user