Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6ebe8dad authored by Steve Elliott's avatar Steve Elliott
Browse files

[kairos] Optimize internal map wrappers

Flag: com.android.systemui.status_bar_mobile_icon_kairos
Bug: 383172066
Test: atest
Change-Id: I02e458359bf6907821a4bded502f785556a4a835
parent ce0fa6cf
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -75,9 +75,12 @@ private constructor(private val storage: AtomicReferenceArray<MutableMap.Mutable
            override val size: Int
                get() = getNumEntries()

            override fun add(element: MutableMap.MutableEntry<Int, V>): Boolean =
                (storage.get(element.key) is MutableMap.MutableEntry<*, *>).also {
            override fun add(element: MutableMap.MutableEntry<Int, V>): Boolean {
                if (storage.get(element.key) != element) {
                    storage.set(element.key, element)
                    return true
                }
                return false
            }

            override fun iterator(): MutableIterator<MutableMap.MutableEntry<Int, V>> =
@@ -116,7 +119,9 @@ private constructor(private val storage: AtomicReferenceArray<MutableMap.Mutable

    class Factory : MutableMapK.Factory<ArrayMapK.W, Int> {
        override fun <V> create(capacity: Int?) =
            MutableArrayMapK<V>(checkNotNull(capacity) { "Cannot use ArrayMapK with null capacity." })
            MutableArrayMapK<V>(
                checkNotNull(capacity) { "Cannot use ArrayMapK with null capacity." }
            )

        override fun <V> create(input: MapK<ArrayMapK.W, Int, V>): MutableArrayMapK<V> {
            val holder = input.asArrayHolder()
+17 −2
Original line number Diff line number Diff line
@@ -49,10 +49,25 @@ internal class SingletonMapK<V>(@Volatile private var value: Any?) :
            this.value = StoreEntry(Unit, value)
        }

    @Suppress("UNCHECKED_CAST")
    override fun remove(key: Unit): V? {
        if (value === NoValue) return null
        val entry = (value as MutableMap.MutableEntry<Unit, V>)
        value = NoValue
        return entry.value
    }

    override fun isEmpty(): Boolean = value === NoValue

    override val entries: MutableSet<MutableMap.MutableEntry<Unit, V>> =
        object : AbstractMutableSet<MutableMap.MutableEntry<Unit, V>>() {
            override fun add(element: MutableMap.MutableEntry<Unit, V>): Boolean =
                (value !== NoValue).also { value = element }
            override fun add(element: MutableMap.MutableEntry<Unit, V>): Boolean {
                if (value != element) {
                    value = element
                    return true
                }
                return false
            }

            override val size: Int
                get() = if (value === NoValue) 0 else 1