diff --git a/Sources/RDReaderView/EPUBUI/ReaderController/ChapterRuntime/RDEPUBChapterLoader.swift b/Sources/RDReaderView/EPUBUI/ReaderController/ChapterRuntime/RDEPUBChapterLoader.swift index fb50c18..687fd51 100644 --- a/Sources/RDReaderView/EPUBUI/ReaderController/ChapterRuntime/RDEPUBChapterLoader.swift +++ b/Sources/RDReaderView/EPUBUI/ReaderController/ChapterRuntime/RDEPUBChapterLoader.swift @@ -65,6 +65,10 @@ final class RDEPUBChapterLoader { completion: @escaping (Result) -> Void ) { if let cached = store.chapterData(for: spineIndex) { + RDEPUBBackgroundTrace.log( + "ChapterLoad", + "memory HIT spine=\(spineIndex) pages=\(cached.pages.count) priority=\(priority)" + ) if let context { scheduleDeferredCFIMapBuildIfNeeded( for: cached, @@ -92,6 +96,10 @@ final class RDEPUBChapterLoader { switch registration { case .joined(let existingPriority, let effectivePriority): + RDEPUBBackgroundTrace.log( + "ChapterLoad", + "join pendingLoad spine=\(spineIndex) existing=\(existingPriority) effective=\(effectivePriority)" + ) return case .created: break @@ -120,6 +128,20 @@ final class RDEPUBChapterLoader { let diskPageRanges = diskSummary?.pageRanges.map { $0.nsRange } 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 { let chapter = try self.buildChapter( @@ -130,6 +152,10 @@ final class RDEPUBChapterLoader { layoutSnapshot: layoutSnapshot ) + RDEPUBBackgroundTrace.log( + "ChapterLoad", + "build done spine=\(spineIndex) pages=\(chapter.pages.count) elapsedMs=\(Int((CFAbsoluteTimeGetCurrent() - buildStart) * 1000)) pageRanges=\(pageRangeSource)" + ) store.insertChapter(chapter) let pc = RDEPUBRuntimePageCount( cacheKey: cacheKey, @@ -172,6 +198,10 @@ final class RDEPUBChapterLoader { self.resolvePendingLoad(spineIndex: spineIndex, result: .success(chapter)) } } catch { + RDEPUBBackgroundTrace.log( + "ChapterLoad", + "build failed spine=\(spineIndex) pageRanges=\(pageRangeSource) error=\(String(describing: error))" + ) store.endPendingChapterLoad(for: spineIndex) store.markBuilding(false) self.resolvePendingLoad(spineIndex: spineIndex, result: .failure(error))