From 0724dcf58dd45d4d02c2958d8971a424c4130657 Mon Sep 17 00:00:00 2001 From: Adrian Cojocaru Date: Mon, 22 Jun 2026 21:18:14 +0300 Subject: [PATCH] fix(android): Add missing benchmark app module (#4352) --- .../MapLibreAndroidTestApp/build.gradle.kts | 3 +++ .../MapLibreAndroidTestApp/proguard-rules.pro | 4 ++++ .../activity/benchmark/BenchmarkActivity.kt | 20 ++++++++++++---- .../android/testapp/utils/CoroutineUtils.kt | 23 +++++++++++++++---- platform/android/gradle/libs.versions.toml | 1 + 5 files changed, 41 insertions(+), 10 deletions(-) diff --git a/platform/android/MapLibreAndroidTestApp/build.gradle.kts b/platform/android/MapLibreAndroidTestApp/build.gradle.kts index fa2b7eee0..52a764e89 100644 --- a/platform/android/MapLibreAndroidTestApp/build.gradle.kts +++ b/platform/android/MapLibreAndroidTestApp/build.gradle.kts @@ -169,6 +169,9 @@ dependencies { androidTestImplementation(libs.androidxTestExtJUnit) androidTestImplementation(libs.androidxTestCoreKtx) androidTestImplementation(libs.kotlinxCoroutinesTest) + + // version conflict when using androidTestImplementation + implementation(libs.androidxTracing) } apply() diff --git a/platform/android/MapLibreAndroidTestApp/proguard-rules.pro b/platform/android/MapLibreAndroidTestApp/proguard-rules.pro index 8062ce8f3..fe952c21d 100644 --- a/platform/android/MapLibreAndroidTestApp/proguard-rules.pro +++ b/platform/android/MapLibreAndroidTestApp/proguard-rules.pro @@ -3,6 +3,9 @@ # Kotlin -dontnote kotlin.** +-keep class kotlin.LazyKt { *; } +-keep class kotlin.LazyKt__LazyJVMKt { *; } +-keep class kotlin.LazyKt__LazyKt { *; } # LeakCanary -dontnote com.squareup.leakcanary.internal.** @@ -15,6 +18,7 @@ -keep class org.maplibre.android.testapp.model.customlayer.ExampleCustomLayer { *; } +-keep class androidx.tracing.** { *; } # okhttp -dontwarn org.bouncycastle.jsse.BCSSLSocket diff --git a/platform/android/MapLibreAndroidTestApp/src/main/java/org/maplibre/android/testapp/activity/benchmark/BenchmarkActivity.kt b/platform/android/MapLibreAndroidTestApp/src/main/java/org/maplibre/android/testapp/activity/benchmark/BenchmarkActivity.kt index 7fcb7a067..0f8ad1e0a 100644 --- a/platform/android/MapLibreAndroidTestApp/src/main/java/org/maplibre/android/testapp/activity/benchmark/BenchmarkActivity.kt +++ b/platform/android/MapLibreAndroidTestApp/src/main/java/org/maplibre/android/testapp/activity/benchmark/BenchmarkActivity.kt @@ -51,6 +51,7 @@ import kotlin.coroutines.resume class BenchmarkActivity : AppCompatActivity() { private val TAG = "BenchmarkActivity" private val useAdvancedMetrics = false + private val skipFailingStyles = true private lateinit var mapView: MapView private var handler: Handler? = null @@ -115,16 +116,17 @@ class BenchmarkActivity : AppCompatActivity() { // return default return BenchmarkInputData( styleNames = listOf( - "AWS Open Data Standard Light", -// "Facebook Light", +// "AWS Open Data Standard Light", + "Facebook Light", "Americana", // "Protomaps Light", // "Versatiles Colorful", "OpenFreeMap Bright" ), styleURLs = listOf( - "https://maps.geo.us-east-2.amazonaws.com/maps/v0/maps/OpenDataStyle/style-descriptor?key=v1.public.eyJqdGkiOiI1NjY5ZTU4My0yNWQwLTQ5MjctODhkMS03OGUxOTY4Y2RhMzgifR_7GLT66TNRXhZJ4KyJ-GK1TPYD9DaWuc5o6YyVmlikVwMaLvEs_iqkCIydspe_vjmgUVsIQstkGoInXV_nd5CcmqRMMa-_wb66SxDdbeRDvmmkpy2Ow_LX9GJDgL2bbiCws0wupJPFDwWCWFLwpK9ICmzGvNcrPbX5uczOQL0N8V9iUvziA52a1WWkZucIf6MUViFRf3XoFkyAT15Ll0NDypAzY63Bnj8_zS8bOaCvJaQqcXM9lrbTusy8Ftq8cEbbK5aMFapXRjug7qcrzUiQ5sr0g23qdMvnKJQFfo7JuQn8vwAksxrQm6A0ByceEXSfyaBoVpFcTzEclxUomhY.NjAyMWJkZWUtMGMyOS00NmRkLThjZTMtODEyOTkzZTUyMTBi", -// "https://external.xx.fbcdn.net/maps/vt/style/canterbury_1_0/?locale=en_US", +// {"message":"User is not authorized to access this resource with an explicit deny in an identity-based policy"} +// "https://maps.geo.us-east-2.amazonaws.com/maps/v0/maps/OpenDataStyle/style-descriptor?key=v1.public.eyJqdGkiOiI1NjY5ZTU4My0yNWQwLTQ5MjctODhkMS03OGUxOTY4Y2RhMzgifR_7GLT66TNRXhZJ4KyJ-GK1TPYD9DaWuc5o6YyVmlikVwMaLvEs_iqkCIydspe_vjmgUVsIQstkGoInXV_nd5CcmqRMMa-_wb66SxDdbeRDvmmkpy2Ow_LX9GJDgL2bbiCws0wupJPFDwWCWFLwpK9ICmzGvNcrPbX5uczOQL0N8V9iUvziA52a1WWkZucIf6MUViFRf3XoFkyAT15Ll0NDypAzY63Bnj8_zS8bOaCvJaQqcXM9lrbTusy8Ftq8cEbbK5aMFapXRjug7qcrzUiQ5sr0g23qdMvnKJQFfo7JuQn8vwAksxrQm6A0ByceEXSfyaBoVpFcTzEclxUomhY.NjAyMWJkZWUtMGMyOS00NmRkLThjZTMtODEyOTkzZTUyMTBi", + "https://external.xx.fbcdn.net/maps/vt/style/canterbury_1_0/?locale=en_US", "https://americanamap.org/style.json", // "https://api.protomaps.com/styles/v2/light.json?key=e761cc7daedf832a", // "https://tiles.versatiles.org/assets/styles/colorful.json", @@ -224,7 +226,15 @@ class BenchmarkActivity : AppCompatActivity() { } mapView.addOnDidFinishRenderingFrameListener(listener) - mapView.setStyleSuspend(benchmarkRun.styleURL) + val styleResult = mapView.setStyleSuspend(benchmarkRun.styleURL) + + if (skipFailingStyles && !styleResult) { + mapView.removeOnDidFinishRenderingFrameListener(listener) + metrics?.stop() + + return BenchmarkRunResult(0.0, encodingTimeStore, renderingTimeStore, getThermalStatus(), metrics) + } + numFrames = 0 val startTime = System.nanoTime() diff --git a/platform/android/MapLibreAndroidTestApp/src/main/java/org/maplibre/android/testapp/utils/CoroutineUtils.kt b/platform/android/MapLibreAndroidTestApp/src/main/java/org/maplibre/android/testapp/utils/CoroutineUtils.kt index db02eb986..b834093a7 100644 --- a/platform/android/MapLibreAndroidTestApp/src/main/java/org/maplibre/android/testapp/utils/CoroutineUtils.kt +++ b/platform/android/MapLibreAndroidTestApp/src/main/java/org/maplibre/android/testapp/utils/CoroutineUtils.kt @@ -7,23 +7,36 @@ import org.maplibre.android.maps.MapLibreMap.CancelableCallback import org.maplibre.android.maps.MapView import kotlin.coroutines.resume -suspend fun MapView.setStyleSuspend(styleUrl: String): Unit = +suspend fun MapView.setStyleSuspend(styleUrl: String): Boolean = suspendCancellableCoroutine { continuation -> - var listener: MapView.OnDidFinishLoadingStyleListener? = null + lateinit var listener: MapView.OnDidFinishLoadingStyleListener + lateinit var errorListener: MapView.OnDidFailLoadingMapListener var resumed = false - listener = MapView.OnDidFinishLoadingStyleListener { + val resume: (Boolean) -> Unit = { result -> if (!resumed) { resumed = true - listener?.let { removeOnDidFinishLoadingStyleListener(it) } - continuation.resume(Unit) + removeOnDidFinishLoadingStyleListener(listener) + removeOnDidFailLoadingMapListener(errorListener) + continuation.resume(result) } } + + listener = MapView.OnDidFinishLoadingStyleListener { + resume(true) + } + + errorListener = MapView.OnDidFailLoadingMapListener { + resume(false) + } + addOnDidFinishLoadingStyleListener(listener) + addOnDidFailLoadingMapListener(errorListener) getMapAsync { map -> map.setStyle(styleUrl) } continuation.invokeOnCancellation { removeOnDidFinishLoadingStyleListener(listener) + removeOnDidFailLoadingMapListener(errorListener) } } diff --git a/platform/android/gradle/libs.versions.toml b/platform/android/gradle/libs.versions.toml index cd508d682..45a919c7c 100644 --- a/platform/android/gradle/libs.versions.toml +++ b/platform/android/gradle/libs.versions.toml @@ -69,6 +69,7 @@ lintTests = { group = "com.android.tools.lint", name = "lint-tests", version.ref androidxTestExtJUnit = { group = "androidx.test.ext", name = "junit", version = "1.3.0" } androidxTestCoreKtx = { group = "androidx.test", name = "core-ktx", version = "1.7.0" } +androidxTracing = { group = "androidx.tracing", name = "tracing", version = "1.3.0" } kotlinxSerializationJson = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version = "1.11.0" } [plugins]