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

Commit 99e793a5 authored by Hawkwood Glazier's avatar Hawkwood Glazier
Browse files

Reduce small object allocations by adding value version of RectF

Bug: 399835774
Test: Manually checked results
Flag: com.android.systemui.shared.clock_reactive_variants
Change-Id: I67ca17667e2f70121b7725080289beeb1d0831e5
parent a2b57e1e
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package com.android.systemui.shared.clocks

import android.graphics.Canvas
import com.android.systemui.plugins.clocks.VPoint
import com.android.systemui.plugins.clocks.VPointF

object CanvasUtil {
    fun Canvas.translate(pt: VPointF) = this.translate(pt.x, pt.y)
+2 −1
Original line number Diff line number Diff line
@@ -20,7 +20,8 @@ import android.animation.Animator
import android.animation.AnimatorListenerAdapter
import android.animation.TimeInterpolator
import android.animation.ValueAnimator
import com.android.systemui.shared.clocks.VPointF.Companion.times
import com.android.systemui.plugins.clocks.VPointF
import com.android.systemui.plugins.clocks.VPointF.Companion.times

class DigitTranslateAnimator(private val updateCallback: (VPointF) -> Unit) {
    var currentTranslation = VPointF.ZERO
+2 −2
Original line number Diff line number Diff line
@@ -16,13 +16,13 @@

package com.android.systemui.shared.clocks

import android.graphics.RectF
import android.view.View
import androidx.annotation.VisibleForTesting
import com.android.systemui.plugins.clocks.ClockAnimations
import com.android.systemui.plugins.clocks.ClockEvents
import com.android.systemui.plugins.clocks.ClockFaceConfig
import com.android.systemui.plugins.clocks.ClockFaceEvents
import com.android.systemui.plugins.clocks.VRectF

interface SimpleClockLayerController {
    val view: View
@@ -32,5 +32,5 @@ interface SimpleClockLayerController {
    val config: ClockFaceConfig

    @VisibleForTesting var fakeTimeMills: Long?
    var onViewBoundsChanged: ((RectF) -> Unit)?
    var onViewBoundsChanged: ((VRectF) -> Unit)?
}
+3 −2
Original line number Diff line number Diff line
@@ -18,8 +18,9 @@ package com.android.systemui.shared.clocks

import android.graphics.Rect
import android.view.View
import com.android.systemui.shared.clocks.VPoint.Companion.center
import com.android.systemui.shared.clocks.VPointF.Companion.center
import com.android.systemui.plugins.clocks.VPoint.Companion.center
import com.android.systemui.plugins.clocks.VPointF
import com.android.systemui.plugins.clocks.VPointF.Companion.center

object ViewUtils {
    fun View.computeLayoutDiff(targetRegion: Rect, isLargeClock: Boolean): VPointF {
+9 −20
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
package com.android.systemui.shared.clocks.view

import android.graphics.Canvas
import android.graphics.RectF
import android.icu.text.NumberFormat
import android.util.MathUtils.constrainedMap
import android.view.View
@@ -29,14 +28,15 @@ import com.android.app.animation.Interpolators
import com.android.systemui.customization.R
import com.android.systemui.plugins.clocks.ClockFontAxisSetting
import com.android.systemui.plugins.clocks.ClockLogger
import com.android.systemui.plugins.clocks.VPoint
import com.android.systemui.plugins.clocks.VPointF
import com.android.systemui.plugins.clocks.VPointF.Companion.max
import com.android.systemui.plugins.clocks.VPointF.Companion.times
import com.android.systemui.plugins.clocks.VRectF
import com.android.systemui.shared.clocks.CanvasUtil.translate
import com.android.systemui.shared.clocks.CanvasUtil.use
import com.android.systemui.shared.clocks.ClockContext
import com.android.systemui.shared.clocks.DigitTranslateAnimator
import com.android.systemui.shared.clocks.VPoint
import com.android.systemui.shared.clocks.VPointF
import com.android.systemui.shared.clocks.VPointF.Companion.max
import com.android.systemui.shared.clocks.VPointF.Companion.times
import com.android.systemui.shared.clocks.ViewUtils.measuredSize
import java.util.Locale
import kotlin.collections.filterNotNull
@@ -101,7 +101,7 @@ class FlexClockView(clockCtx: ClockContext) : ViewGroup(clockCtx.context) {
        updateLocale(Locale.getDefault())
    }

    var onViewBoundsChanged: ((RectF) -> Unit)? = null
    var onViewBoundsChanged: ((VRectF) -> Unit)? = null
    private val digitOffsets = mutableMapOf<Int, Float>()

    protected fun calculateSize(
@@ -189,13 +189,7 @@ class FlexClockView(clockCtx: ClockContext) : ViewGroup(clockCtx.context) {

    fun updateLocation() {
        val layoutBounds = this.layoutBounds ?: return
        val bounds =
            RectF(
                layoutBounds.centerX() - measuredWidth / 2f,
                layoutBounds.centerY() - measuredHeight / 2f,
                layoutBounds.centerX() + measuredWidth / 2f,
                layoutBounds.centerY() + measuredHeight / 2f,
            )
        val bounds = VRectF.fromCenter(layoutBounds.center, this.measuredSize)
        setFrame(
            bounds.left.roundToInt(),
            bounds.top.roundToInt(),
@@ -215,16 +209,11 @@ class FlexClockView(clockCtx: ClockContext) : ViewGroup(clockCtx.context) {
        onAnimateDoze = null
    }

    private val layoutBounds = RectF()
    private var layoutBounds = VRectF.ZERO

    override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
        logger.onLayout(changed, left, top, right, bottom)

        layoutBounds.left = left.toFloat()
        layoutBounds.top = top.toFloat()
        layoutBounds.right = right.toFloat()
        layoutBounds.bottom = bottom.toFloat()

        layoutBounds = VRectF(left.toFloat(), top.toFloat(), right.toFloat(), bottom.toFloat())
        updateChildFrames(isLayout = true)
    }

Loading