预加载控制器补充页面视图缓存命中日志
pageViewForDisplay / prime / takePreloadedView 三条取视图路径打印 HIT/MISS 及视图地址,invalidate 打印被清空的缓存页码,便于排查 翻页时页面视图是否命中缓存。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
47fe2dc450
commit
f796823db8
@@ -66,6 +66,10 @@ final class RDReaderPreloadController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func invalidate(environment: Environment) {
|
func invalidate(environment: Environment) {
|
||||||
|
RDReaderTapDebug.log(
|
||||||
|
"PreloadController.invalidate",
|
||||||
|
"clearing pageCurlCached=\(pageCurlCachedViews.keys.sorted()) preloaded=\(preloadedPageViews.keys.sorted())"
|
||||||
|
)
|
||||||
pageCurlCachedViews.values.forEach { $0.removeFromSuperview() }
|
pageCurlCachedViews.values.forEach { $0.removeFromSuperview() }
|
||||||
preloadedPageViews.values.forEach { $0.removeFromSuperview() }
|
preloadedPageViews.values.forEach { $0.removeFromSuperview() }
|
||||||
pageCurlCachedViews.removeAll()
|
pageCurlCachedViews.removeAll()
|
||||||
@@ -81,8 +85,16 @@ final class RDReaderPreloadController {
|
|||||||
let view: UIView
|
let view: UIView
|
||||||
if let reusableView = detachedReusablePageView(for: pageNum) {
|
if let reusableView = detachedReusablePageView(for: pageNum) {
|
||||||
view = reusableView
|
view = reusableView
|
||||||
|
RDReaderTapDebug.log(
|
||||||
|
"PreloadController.pageViewForDisplay",
|
||||||
|
"cache HIT page=\(pageNum) view=\(RDReaderTapDebug.describe(reusableView))"
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
view = contentViewProvider(pageNum, nil) ?? UIView()
|
view = contentViewProvider(pageNum, nil) ?? UIView()
|
||||||
|
RDReaderTapDebug.log(
|
||||||
|
"PreloadController.pageViewForDisplay",
|
||||||
|
"cache MISS page=\(pageNum) created=\(RDReaderTapDebug.describe(view))"
|
||||||
|
)
|
||||||
}
|
}
|
||||||
if shouldCache(view: view, for: pageNum, environment: environment) {
|
if shouldCache(view: view, for: pageNum, environment: environment) {
|
||||||
pageCurlCachedViews[pageNum] = view
|
pageCurlCachedViews[pageNum] = view
|
||||||
@@ -95,6 +107,10 @@ final class RDReaderPreloadController {
|
|||||||
func takePreloadedView(for pageNum: Int) -> UIView? {
|
func takePreloadedView(for pageNum: Int) -> UIView? {
|
||||||
let preloaded = preloadedPageViews.removeValue(forKey: pageNum)
|
let preloaded = preloadedPageViews.removeValue(forKey: pageNum)
|
||||||
preloaded?.removeFromSuperview()
|
preloaded?.removeFromSuperview()
|
||||||
|
RDReaderTapDebug.log(
|
||||||
|
"PreloadController.takePreloadedView",
|
||||||
|
"cache \(preloaded == nil ? "MISS" : "HIT") page=\(pageNum) view=\(RDReaderTapDebug.describe(preloaded))"
|
||||||
|
)
|
||||||
return preloaded
|
return preloaded
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -118,10 +134,22 @@ final class RDReaderPreloadController {
|
|||||||
let contentView: UIView
|
let contentView: UIView
|
||||||
if let existing = preloadedPageViews[targetPage], existing.superview === preloadHostView {
|
if let existing = preloadedPageViews[targetPage], existing.superview === preloadHostView {
|
||||||
contentView = existing
|
contentView = existing
|
||||||
|
RDReaderTapDebug.log(
|
||||||
|
"PreloadController.prime",
|
||||||
|
"cache HIT(preloaded) page=\(targetPage) view=\(RDReaderTapDebug.describe(existing))"
|
||||||
|
)
|
||||||
} else if let cached = pageCurlCachedViews.removeValue(forKey: targetPage), cached.superview == nil {
|
} else if let cached = pageCurlCachedViews.removeValue(forKey: targetPage), cached.superview == nil {
|
||||||
contentView = cached
|
contentView = cached
|
||||||
|
RDReaderTapDebug.log(
|
||||||
|
"PreloadController.prime",
|
||||||
|
"cache HIT(pageCurl) page=\(targetPage) view=\(RDReaderTapDebug.describe(cached))"
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
contentView = contentViewProvider(targetPage, nil) ?? UIView()
|
contentView = contentViewProvider(targetPage, nil) ?? UIView()
|
||||||
|
RDReaderTapDebug.log(
|
||||||
|
"PreloadController.prime",
|
||||||
|
"cache MISS page=\(targetPage) created=\(RDReaderTapDebug.describe(contentView))"
|
||||||
|
)
|
||||||
}
|
}
|
||||||
let shouldCacheContentView = shouldCache(view: contentView, for: targetPage, environment: environment)
|
let shouldCacheContentView = shouldCache(view: contentView, for: targetPage, environment: environment)
|
||||||
if shouldCacheContentView {
|
if shouldCacheContentView {
|
||||||
|
|||||||
Reference in New Issue
Block a user