Attempt to fix test
diff --git a/snapshot-tests/src/androidTest/java/com/airbnb/lottie/snapshots/SnapshotTestCaseContext.kt b/snapshot-tests/src/androidTest/java/com/airbnb/lottie/snapshots/SnapshotTestCaseContext.kt
index 8d753df..b05d0b0 100644
--- a/snapshot-tests/src/androidTest/java/com/airbnb/lottie/snapshots/SnapshotTestCaseContext.kt
+++ b/snapshot-tests/src/androidTest/java/com/airbnb/lottie/snapshots/SnapshotTestCaseContext.kt
@@ -30,6 +30,7 @@
 import com.airbnb.lottie.snapshots.utils.ObjectPool
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.first
 import kotlinx.coroutines.suspendCancellableCoroutine
 import kotlinx.coroutines.withContext
 import kotlin.coroutines.resume
@@ -187,77 +188,55 @@
     log("Snapshotting $name")
     val composeView = ComposeView(context)
     composeView.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)
-    var bitmap = withContext(Dispatchers.Main) {
-        val readyFlow = MutableStateFlow<Boolean?>(null)
-        composeView.setContent {
-            CompositionLocalProvider(LocalSnapshotReady provides readyFlow) {
-                content(RenderMode.SOFTWARE)
-            }
-            if (readyFlow.value == null) readyFlow.value = true
+    val readyFlow = MutableStateFlow<Boolean?>(null)
+    composeView.setContent {
+        CompositionLocalProvider(LocalSnapshotReady provides readyFlow) {
+            content(RenderMode.SOFTWARE)
         }
-        lateinit var onDrawListener: ViewTreeObserver.OnDrawListener
-        suspendCancellableCoroutine<Bitmap> { cont ->
-            onDrawListener = ViewTreeObserver.OnDrawListener {
-                composeView.viewTreeObserver.addOnDrawListener(onDrawListener)
-                composeView.post {
-                    if (readyFlow.value != true) {
-                        return@post
-                    }
-                    log("Drawing $name - Software")
-                    val b = bitmapPool.acquire(composeView.width, composeView.height)
-                    val canvas = Canvas(b)
-                    composeView.viewTreeObserver.removeOnDrawListener(onDrawListener)
-                    composeView.draw(canvas)
-                    cont.resume(b)
-                }
-            }
-            onActivity { activity ->
-                activity.binding.content.addView(composeView)
-            }
-        }
+        if (readyFlow.value == null) readyFlow.value = true
     }
     onActivity { activity ->
-        activity.binding.content.removeView(composeView)
+        activity.binding.content.addView(composeView)
     }
+    readyFlow.first { it == true }
+    composeView.awaitFrame()
+    log("Drawing $name - Software")
+    var bitmap = bitmapPool.acquire(composeView.width, composeView.height)
+    var canvas = Canvas(bitmap)
+    composeView.draw(canvas)
     snapshotter.record(bitmap, name, if (renderHardwareAndSoftware) "$variant - Software" else variant)
     bitmapPool.release(bitmap)
 
     if (renderHardwareAndSoftware) {
-        bitmap = withContext(Dispatchers.Main) {
-            val readyFlow = MutableStateFlow<Boolean?>(null)
-            composeView.setContent {
-                CompositionLocalProvider(LocalSnapshotReady provides readyFlow) {
-                    content(RenderMode.HARDWARE)
-                }
-                if (readyFlow.value == null) readyFlow.value = true
+        readyFlow.value = null
+        composeView.setContent {
+            CompositionLocalProvider(LocalSnapshotReady provides readyFlow) {
+                content(RenderMode.HARDWARE)
             }
-            lateinit var onDrawListener: ViewTreeObserver.OnDrawListener
-            suspendCancellableCoroutine { cont ->
-                onDrawListener = ViewTreeObserver.OnDrawListener {
-                    composeView.viewTreeObserver.addOnDrawListener(onDrawListener)
-                    composeView.post {
-                        if (readyFlow.value != true) {
-                            return@post
-                        }
-                        log("Drawing $name - Hardware")
-                        val b = bitmapPool.acquire(composeView.width, composeView.height)
-                        val canvas = Canvas(b)
-                        composeView.viewTreeObserver.removeOnDrawListener(onDrawListener)
-                        composeView.draw(canvas)
-                        cont.resume(b)
-                    }
-                }
-                onActivity { activity ->
-                    activity.binding.content.addView(composeView)
-                }
-            }
+            if (readyFlow.value == null) readyFlow.value = true
         }
-        onActivity { activity ->
-            activity.binding.content.removeView(composeView)
-        }
+        readyFlow.first { it == true }
+        composeView.awaitFrame()
+        log("Drawing $name - Software")
+        bitmap = bitmapPool.acquire(composeView.width, composeView.height)
+        canvas = Canvas(bitmap)
+        composeView.draw(canvas)
         snapshotter.record(bitmap, name, if (renderHardwareAndSoftware) "$variant - Hardware" else variant)
         bitmapPool.release(bitmap)
     }
 
+
+    onActivity { activity ->
+        activity.binding.content.removeView(composeView)
+    }
+
     LottieCompositionCache.getInstance().clear()
+}
+
+private suspend fun View.awaitFrame() {
+    suspendCancellableCoroutine<Unit> { cont ->
+        post {
+            cont.resume(Unit)
+        }
+    }
 }
\ No newline at end of file