章节加载器补充三级缓存命中日志
loadChapterWithSnapshot 打印内存章节 HIT、并发加载合流、构建来源 (memoryPageCount/diskSummary/fullRender)与构建耗时,便于判断章节 跳转时预加载与缓存的命中情况。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
f796823db8
commit
7132e4952b
@ -65,6 +65,10 @@ final class RDEPUBChapterLoader {
|
|||||||
completion: @escaping (Result<RDEPUBRuntimeChapter, Error>) -> Void
|
completion: @escaping (Result<RDEPUBRuntimeChapter, Error>) -> Void
|
||||||
) {
|
) {
|
||||||
if let cached = store.chapterData(for: spineIndex) {
|
if let cached = store.chapterData(for: spineIndex) {
|
||||||
|
RDEPUBBackgroundTrace.log(
|
||||||
|
"ChapterLoad",
|
||||||
|
"memory HIT spine=\(spineIndex) pages=\(cached.pages.count) priority=\(priority)"
|
||||||
|
)
|
||||||
if let context {
|
if let context {
|
||||||
scheduleDeferredCFIMapBuildIfNeeded(
|
scheduleDeferredCFIMapBuildIfNeeded(
|
||||||
for: cached,
|
for: cached,
|
||||||
@ -92,6 +96,10 @@ final class RDEPUBChapterLoader {
|
|||||||
|
|
||||||
switch registration {
|
switch registration {
|
||||||
case .joined(let existingPriority, let effectivePriority):
|
case .joined(let existingPriority, let effectivePriority):
|
||||||
|
RDEPUBBackgroundTrace.log(
|
||||||
|
"ChapterLoad",
|
||||||
|
"join pendingLoad spine=\(spineIndex) existing=\(existingPriority) effective=\(effectivePriority)"
|
||||||
|
)
|
||||||
return
|
return
|
||||||
case .created:
|
case .created:
|
||||||
break
|
break
|
||||||
@ -120,6 +128,20 @@ final class RDEPUBChapterLoader {
|
|||||||
let diskPageRanges = diskSummary?.pageRanges.map { $0.nsRange }
|
let diskPageRanges = diskSummary?.pageRanges.map { $0.nsRange }
|
||||||
let availablePageRanges = precomputedPageRanges ?? diskPageRanges
|
let availablePageRanges = precomputedPageRanges ?? diskPageRanges
|
||||||
|
|
||||||
|
let pageRangeSource: String
|
||||||
|
if precomputedPageRanges != nil {
|
||||||
|
pageRangeSource = "HIT(memoryPageCount)"
|
||||||
|
} else if diskPageRanges != nil {
|
||||||
|
pageRangeSource = "HIT(diskSummary)"
|
||||||
|
} else {
|
||||||
|
pageRangeSource = "MISS(fullRender)"
|
||||||
|
}
|
||||||
|
RDEPUBBackgroundTrace.log(
|
||||||
|
"ChapterLoad",
|
||||||
|
"build start spine=\(spineIndex) priority=\(queuePriority) pageRanges=\(pageRangeSource)"
|
||||||
|
)
|
||||||
|
let buildStart = CFAbsoluteTimeGetCurrent()
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let chapter = try self.buildChapter(
|
let chapter = try self.buildChapter(
|
||||||
@ -130,6 +152,10 @@ final class RDEPUBChapterLoader {
|
|||||||
layoutSnapshot: layoutSnapshot
|
layoutSnapshot: layoutSnapshot
|
||||||
)
|
)
|
||||||
|
|
||||||
|
RDEPUBBackgroundTrace.log(
|
||||||
|
"ChapterLoad",
|
||||||
|
"build done spine=\(spineIndex) pages=\(chapter.pages.count) elapsedMs=\(Int((CFAbsoluteTimeGetCurrent() - buildStart) * 1000)) pageRanges=\(pageRangeSource)"
|
||||||
|
)
|
||||||
store.insertChapter(chapter)
|
store.insertChapter(chapter)
|
||||||
let pc = RDEPUBRuntimePageCount(
|
let pc = RDEPUBRuntimePageCount(
|
||||||
cacheKey: cacheKey,
|
cacheKey: cacheKey,
|
||||||
@ -172,6 +198,10 @@ final class RDEPUBChapterLoader {
|
|||||||
self.resolvePendingLoad(spineIndex: spineIndex, result: .success(chapter))
|
self.resolvePendingLoad(spineIndex: spineIndex, result: .success(chapter))
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
|
RDEPUBBackgroundTrace.log(
|
||||||
|
"ChapterLoad",
|
||||||
|
"build failed spine=\(spineIndex) pageRanges=\(pageRangeSource) error=\(String(describing: error))"
|
||||||
|
)
|
||||||
store.endPendingChapterLoad(for: spineIndex)
|
store.endPendingChapterLoad(for: spineIndex)
|
||||||
store.markBuilding(false)
|
store.markBuilding(false)
|
||||||
self.resolvePendingLoad(spineIndex: spineIndex, result: .failure(error))
|
self.resolvePendingLoad(spineIndex: spineIndex, result: .failure(error))
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user