From 7132e4952bd0e477ecc3410afe37bacdbfa0756b Mon Sep 17 00:00:00 2001 From: shenlei Date: Mon, 6 Jul 2026 11:34:02 +0900 Subject: [PATCH] =?UTF-8?q?=E7=AB=A0=E8=8A=82=E5=8A=A0=E8=BD=BD=E5=99=A8?= =?UTF-8?q?=E8=A1=A5=E5=85=85=E4=B8=89=E7=BA=A7=E7=BC=93=E5=AD=98=E5=91=BD?= =?UTF-8?q?=E4=B8=AD=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit loadChapterWithSnapshot 打印内存章节 HIT、并发加载合流、构建来源 (memoryPageCount/diskSummary/fullRender)与构建耗时,便于判断章节 跳转时预加载与缓存的命中情况。 Co-Authored-By: Claude Fable 5 --- .../ChapterRuntime/RDEPUBChapterLoader.swift | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) 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))