From 6dad39bbdb1956d4f0b803f74fbe21c6faef2867 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 26 May 2026 06:26:29 +0000 Subject: [PATCH] perf: Optimize hot loop in TouchControlOverlay `onTouchEvent` Replace `controlViews.indices.reversed()` with `controlViews.size - 1 downTo 0` in `onTouchEvent` to avoid unnecessary iterator allocations during touch event processing. Co-authored-by: SirDank <52797753+SirDank@users.noreply.github.com> --- .../main/java/com/skarm/launcher/touch/TouchControlOverlay.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/launcher/app/src/main/java/com/skarm/launcher/touch/TouchControlOverlay.kt b/launcher/app/src/main/java/com/skarm/launcher/touch/TouchControlOverlay.kt index 0bdf837..9c4091d 100644 --- a/launcher/app/src/main/java/com/skarm/launcher/touch/TouchControlOverlay.kt +++ b/launcher/app/src/main/java/com/skarm/launcher/touch/TouchControlOverlay.kt @@ -291,7 +291,7 @@ class TouchControlOverlay @JvmOverloads constructor( // In play mode, let the overlay dispatch touches down to the controls, // or pass through to the game surface if no control was hit. var handled = false - for (i in controlViews.indices.reversed()) { + for (i in controlViews.size - 1 downTo 0) { val view = controlViews[i] if (view.visibility == View.VISIBLE && isPointInsideView(event.x, event.y, view)) { val viewEvent = MotionEvent.obtain(event) @@ -310,7 +310,7 @@ class TouchControlOverlay @JvmOverloads constructor( MotionEvent.ACTION_DOWN -> { // Find tapped view var tappedView: BaseTouchControl? = null - for (i in controlViews.indices.reversed()) { + for (i in controlViews.size - 1 downTo 0) { val view = controlViews[i] if (isPointInsideView(event.x, event.y, view)) { tappedView = view