perf: clear cache node
Some checks failed
Build-Apk / build (push) Has been cancelled

This commit is contained in:
lisonge 2024-10-17 22:13:16 +08:00
parent 1825b000c0
commit 5a2455a20e

View File

@ -36,6 +36,12 @@ class A11yContext(
var rootCache: AccessibilityNodeInfo? = null var rootCache: AccessibilityNodeInfo? = null
private fun clearNodeCache() { private fun clearNodeCache() {
if (META.debuggable) {
val sizeList = listOf(childCache.size(), parentCache.size(), indexCache.size())
if (sizeList.any { it > 0 }) {
Log.d("cache", "clear cache -> $sizeList")
}
}
rootCache = null rootCache = null
try { try {
childCache.evictAll() childCache.evictAll()
@ -51,16 +57,17 @@ class A11yContext(
} }
private var lastClearTime = 0L private var lastClearTime = 0L
private var lastAppChangeTime = appChangeTime
private fun clearNodeCacheIfTimeout() { private fun clearNodeCacheIfTimeout() {
val currentTime = System.currentTimeMillis() if (appChangeTime != lastAppChangeTime) {
if (currentTime - lastClearTime > 5000L) { lastAppChangeTime = appChangeTime
lastClearTime = currentTime lastClearTime = System.currentTimeMillis()
if (META.debuggable) { clearNodeCache()
val sizeList = listOf(childCache.size(), parentCache.size(), indexCache.size()) return
if (sizeList.any { it > 0 }) { }
Log.d("cache", "clear cache -> $sizeList") val t = System.currentTimeMillis()
} if (t - lastClearTime > 30_000L) {
} lastClearTime = t
clearNodeCache() clearNodeCache()
} }
} }
@ -74,10 +81,10 @@ class A11yContext(
private fun guardInterrupt() { private fun guardInterrupt() {
if (disableInterrupt) return if (disableInterrupt) return
if (interruptInnerKey == interruptKey) return if (interruptInnerKey == interruptKey) return
if (!activityRuleFlow.value.activePriority) return
val rule = currentRule ?: return
if (rule.isPriority()) return
interruptInnerKey = interruptKey interruptInnerKey = interruptKey
val rule = currentRule ?: return
if (!activityRuleFlow.value.currentRules.contains(rule)) return
if (rule.isPriority()) return
if (META.debuggable) { if (META.debuggable) {
Log.d("guardInterrupt", "中断 rule=${rule.statusText()}") Log.d("guardInterrupt", "中断 rule=${rule.statusText()}")
} }