field_ios

In-the-field app for Radroots on iOS
git clone https://radroots.dev/git/field_ios.git
Log | Files | Refs | README | LICENSE

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 }