Skip to content

Commit 4f41100

Browse files
committed
multiple thread cache
1 parent cccb23f commit 4f41100

File tree

3 files changed

+12
-8
lines changed

3 files changed

+12
-8
lines changed

library/src/main/java/com/hoc081098/viewbindingdelegate/internal/cache.kt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,31 +28,33 @@ import androidx.annotation.AnyThread
2828
import androidx.collection.ArrayMap
2929
import androidx.viewbinding.ViewBinding
3030
import java.lang.reflect.Method
31-
import java.util.*
3231

3332
@AnyThread
3433
internal sealed interface MethodCache {
3534
fun <T : ViewBinding> getOrPut(clazz: Class<T>): Method
3635
}
3736

3837
private abstract class AbstractMethodCache : MethodCache {
39-
private val cache: MutableMap<Class<out ViewBinding>, Method> =
40-
Collections.synchronizedMap(ArrayMap())
38+
private val cache: MutableMap<Class<out ViewBinding>, Method> = ArrayMap()
4139

4240
override fun <T : ViewBinding> getOrPut(clazz: Class<T>) =
43-
cache.getOrPut(clazz) { clazz.findMethod() }
41+
measureNanoTime("[${this::class.java.simpleName}-getOrPut] class=$clazz") {
42+
synchronized(cache) {
43+
cache.getOrPut(clazz) { clazz.findMethod() }
44+
}
45+
}
4446

4547
abstract fun <T : ViewBinding> Class<T>.findMethod(): Method
4648
}
4749

4850
private class BindMethodCache : AbstractMethodCache() {
4951
override fun <T : ViewBinding> Class<T>.findMethod() =
50-
measureTimeMillis("[BindMethodCache-findBindMethod]") { findBindMethod() }
52+
measureNanoTime("[BindMethodCache-findMethod] class=$this") { findBindMethod() }
5153
}
5254

5355
private class InflateMethodCache : AbstractMethodCache() {
5456
override fun <T : ViewBinding> Class<T>.findMethod() =
55-
measureTimeMillis("[InflateMethodCache-findInflateMethod]") { findInflateMethod() }
57+
measureNanoTime("[InflateMethodCache-findMethod] class=$this") { findInflateMethod() }
5658
}
5759

5860
internal object CacheContainer {

library/src/main/java/com/hoc081098/viewbindingdelegate/internal/preload.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,15 @@ internal object PreloadMethods {
6363
}
6464

6565
ioExecutor.execute {
66-
measureTimeMillis(tag) {
66+
measureNanoTime(tag) {
6767
log { "$tag start..." }
6868

6969
kClasses.forEach { kClass ->
7070
cache.getOrPut(kClass.java)
7171
log { "$tag processed $kClass" }
7272
}
73+
74+
log { "$tag done" }
7375
}
7476
}
7577
}

library/src/main/java/com/hoc081098/viewbindingdelegate/internal/utils.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ internal inline fun log(crossinline message: () -> String) {
4444
}
4545
}
4646

47-
internal inline fun <T> measureTimeMillis(tag: String, crossinline block: () -> T): T =
47+
internal inline fun <T> measureNanoTime(tag: String, crossinline block: () -> T): T =
4848
if (DEBUG) {
4949
val t: T
5050
val time = measureNanoTime { t = block() }

0 commit comments

Comments
 (0)