Fetch improvements

This commit is contained in:
Ali 2023-03-20 16:33:54 +04:00
parent 03ae2197ac
commit f92f4c38c6
2 changed files with 40 additions and 6 deletions

View File

@ -360,13 +360,17 @@ final class MediaBoxFileContextV2Impl: MediaBoxFileContext {
if complete {
if let maxOffset = self.fileMap.ranges.ranges.reversed().first?.upperBound {
let maxValue = max(resourceOffset + Int64(dataRange.count), Int64(maxOffset))
self.fileMap.truncate(maxValue)
self.fileMap.serialize(manager: self.manager, to: self.metaPath)
if self.fileMap.truncationSize != maxValue {
self.fileMap.truncate(maxValue)
self.fileMap.serialize(manager: self.manager, to: self.metaPath)
}
}
}
case let .resourceSizeUpdated(size):
self.fileMap.truncate(size)
self.fileMap.serialize(manager: self.manager, to: self.metaPath)
if self.fileMap.truncationSize != size {
self.fileMap.truncate(size)
self.fileMap.serialize(manager: self.manager, to: self.metaPath)
}
case let .progressUpdated(progress):
let _ = progress
case let .replaceHeader(data, range):

View File

@ -208,6 +208,7 @@ private final class FetchImpl {
private let consumerId: Int64
private var knownSize: Int64?
private var didReportKnownSize: Bool = false
private var updatedFileReference: Data?
private var requiredRangesDisposable: Disposable?
@ -307,6 +308,11 @@ private final class FetchImpl {
switch state {
case let .fetching(state):
if let knownSize = self.knownSize, !self.didReportKnownSize {
self.didReportKnownSize = true
self.onNext(.resourceSizeUpdated(knownSize))
}
var filteredRequiredRanges: [RangeSet<Int64>] = []
for _ in 0 ..< 3 {
filteredRequiredRanges.append(RangeSet<Int64>())
@ -349,8 +355,32 @@ private final class FetchImpl {
}*/
if state.pendingParts.count < state.maxPendingParts {
//let debugRanges = filteredRequiredRanges.ranges.map { "\($0.lowerBound)..<\($0.upperBound)" }
//Logger.shared.log("FetchV2", "\(self.loggingIdentifier): will fetch \(debugRanges)")
var debugRangesString = ""
for priorityIndex in 0 ..< 3 {
if filteredRequiredRanges[priorityIndex].isEmpty {
continue
}
if !debugRangesString.isEmpty {
debugRangesString.append(", ")
}
debugRangesString.append("priority: \(priorityIndex): [")
var isFirst = true
for range in filteredRequiredRanges[priorityIndex].ranges {
if isFirst {
isFirst = false
} else {
debugRangesString.append(", ")
}
debugRangesString.append("\(range.lowerBound)..<\(range.upperBound)")
}
debugRangesString.append("]")
}
if !debugRangesString.isEmpty {
Logger.shared.log("FetchV2", "\(self.loggingIdentifier): will fetch \(debugRangesString)")
}
while state.pendingParts.count < state.maxPendingParts {
var found = false