TeraMediaPresentationLimits.swift (1871B)
1 import Foundation 2 3 /// Presentation budgets only. Eviction never mutates an authored artifact. 4 struct TeraMediaPresentationLimits: Sendable, Equatable { 5 let encodedBytes: Int 6 let sourcePixels: Int 7 let thumbnailDimension: Int 8 let cacheBytes: Int 9 let cacheEntries: Int 10 let workers: Int 11 let queuedRequests: Int 12 let visibilityEntries: Int 13 14 static let standard: Self = { 15 guard let limits = Self(encodedBytes: 8 * 1024 * 1024, sourcePixels: 16_000_000, 16 thumbnailDimension: 1024, cacheBytes: 32 * 1024 * 1024, cacheEntries: 64, 17 workers: 2, queuedRequests: 16, visibilityEntries: 4096) 18 else { 19 preconditionFailure("Bundled media presentation limits must be valid") 20 } 21 return limits 22 }() 23 24 init?(encodedBytes: Int, sourcePixels: Int, thumbnailDimension: Int, cacheBytes: Int, 25 cacheEntries: Int, workers: Int, queuedRequests: Int, visibilityEntries: Int) 26 { 27 guard (1 ... 8 * 1024 * 1024).contains(encodedBytes), 28 (1 ... 16_000_000).contains(sourcePixels), (1 ... 1024).contains(thumbnailDimension), 29 (1 ... 32 * 1024 * 1024).contains(cacheBytes), (1 ... 64).contains(cacheEntries), 30 (1 ... 2).contains(workers), (1 ... 16).contains(queuedRequests), 31 (1 ... 4096).contains(visibilityEntries), workers + queuedRequests <= cacheEntries else { return nil } 32 self.encodedBytes = encodedBytes 33 self.sourcePixels = sourcePixels 34 self.thumbnailDimension = thumbnailDimension 35 self.cacheBytes = cacheBytes 36 self.cacheEntries = cacheEntries 37 self.workers = workers 38 self.queuedRequests = queuedRequests 39 self.visibilityEntries = visibilityEntries 40 } 41 42 func accepts(byteCount: Int, width: Int, height: Int) -> Bool { 43 byteCount > 0 && byteCount <= encodedBytes && width > 0 && height > 0 44 && width <= sourcePixels / height 45 } 46 }