Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace GLSurfaceView with GLRenderer and AndroidExternalSurface #1908

Draft
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

alexvanyo
Copy link
Owner

@alexvanyo alexvanyo commented Jul 18, 2024

Fixes #1838

Current issues:

  • Crashes when rotating on physical device
    2024-10-10 10:27:50.720 27061-27158 AndroidRuntime          com.alexvanyo.composelife            
    E  FATAL EXCEPTION: GLThread
                                                                                                        
    Process: com.alexvanyo.composelife, PID: 27061
                                                                                                      
    java.lang.IllegalStateException: OpenGL framebuffer error: 33305
                                                                                                      	 
    at B1.o.d(SourceFile:558)
                                                                                                      	 
    at B1.m.run(SourceFile:38)
                                                                                                      	 
    at android.os.Handler.handleCallback(Handler.java:959)
                                                                                                      	 
    at android.os.Handler.dispatchMessage(Handler.java:100)
                                                                                                      	 
    at android.os.Looper.loopOnce(Looper.java:232)
                                                                                                      	 
    at android.os.Looper.loop(Looper.java:317)
                                                                                                      	 
    at android.os.HandlerThread.run(HandlerThread.java:85)
    

Copy link

codecov bot commented Jul 18, 2024

❌ 2 Tests Failed:

Tests completed Failed Passed Skipped
8800 2 8798 0
View the top 2 failed tests by shortest run time
com.alexvanyo.composelife.ui.cells.RoborazziTest previewScreenshotTest[CombinedRoborazziParameterization]
Stack Traces | 91.4s run time
java.lang.IllegalStateException: Handler (android.os.Handler) {38571d2f} sending message to a Looper thread that has died due to an uncaught exception
	at org.robolectric.shadows.ShadowPausedMessageQueue.enqueueMessage(ShadowPausedMessageQueue.java:200)
	at android.os.MessageQueue.enqueueMessage(MessageQueue.java)
	at android.os.Handler.enqueueMessage(Handler.java:786)
	at android.os.Handler.sendMessageAtTime(Handler.java:735)
	at android.os.Handler.sendMessageDelayed(Handler.java:705)
	at android.os.Handler.post(Handler.java:435)
	at androidx.graphics.opengl.GLThread.tearDown(GLThread.kt:179)
	at androidx.graphics.opengl.GLRenderer.stop(GLRenderer.kt:260)
	at androidx.graphics.opengl.GLRenderer.stop$default(GLRenderer.kt:251)
	at com.alexvanyo.composelife.ui.cells.OpenGLNonInteractableCellsKt$rememberGLRenderer$1$1.onForgotten(OpenGLNonInteractableCells.kt:182)
	at androidx.compose.runtime.internal.RememberEventDispatcher.dispatchRememberObservers(RememberEventDispatcher.kt:153)
	at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Composition.kt:1042)
	at androidx.compose.runtime.CompositionImpl.applyChanges(Composition.kt:1065)
	at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:681)
	at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:588)
	at androidx.compose.ui.test.TestMonotonicFrameClock$withFrameNanos$2$1$1.invoke(TestMonotonicFrameClock.jvm.kt:106)
	at androidx.compose.ui.test.TestMonotonicFrameClock$withFrameNanos$2$1$1.invoke(TestMonotonicFrameClock.jvm.kt:106)
	at androidx.compose.ui.test.TestMonotonicFrameClock$performFrame$1.invoke(TestMonotonicFrameClock.jvm.kt:151)
	at androidx.compose.ui.test.TestMonotonicFrameClock$performFrame$1.invoke(TestMonotonicFrameClock.jvm.kt:133)
	at androidx.compose.ui.test.FrameDeferringContinuationInterceptor.runWithoutResumingCoroutines(FrameDeferringContinuationInterceptor.jvm.kt:57)
	at androidx.compose.ui.test.TestMonotonicFrameClock.performFrame(TestMonotonicFrameClock.jvm.kt:133)
	at androidx.compose.ui.test.TestMonotonicFrameClock.access$performFrame(TestMonotonicFrameClock.jvm.kt:53)
	at androidx.compose.ui.test.TestMonotonicFrameClock$withFrameNanos$2$1$2.invokeSuspend(TestMonotonicFrameClock.jvm.kt:111)
	at _COROUTINE._BOUNDARY._(CoroutineDebugging.kt:42)
	at androidx.compose.runtime.Recomposer$recompositionRunner$2.invokeSuspend(Recomposer.kt:1069)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$withWindowRecomposer$2$1.invokeSuspend(ComposeUiTest.android.kt:414)
Caused by: java.lang.IllegalStateException: Handler (android.os.Handler) {38571d2f} sending message to a Looper thread that has died due to an uncaught exception
	at org.robolectric.shadows.ShadowPausedMessageQueue.enqueueMessage(ShadowPausedMessageQueue.java:200)
	at android.os.MessageQueue.enqueueMessage(MessageQueue.java)
	at android.os.Handler.enqueueMessage(Handler.java:786)
	at android.os.Handler.sendMessageAtTime(Handler.java:735)
	at android.os.Handler.sendMessageDelayed(Handler.java:705)
	at android.os.Handler.post(Handler.java:435)
	at androidx.graphics.opengl.GLThread.tearDown(GLThread.kt:179)
	at androidx.graphics.opengl.GLRenderer.stop(GLRenderer.kt:260)
	at androidx.graphics.opengl.GLRenderer.stop$default(GLRenderer.kt:251)
	at com.alexvanyo.composelife.ui.cells.OpenGLNonInteractableCellsKt$rememberGLRenderer$1$1.onForgotten(OpenGLNonInteractableCells.kt:182)
	at androidx.compose.runtime.internal.RememberEventDispatcher.dispatchRememberObservers(RememberEventDispatcher.kt:153)
	at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Composition.kt:1042)
	at androidx.compose.runtime.CompositionImpl.applyChanges(Composition.kt:1065)
	at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:681)
	at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:588)
	at androidx.compose.ui.test.TestMonotonicFrameClock$withFrameNanos$2$1$1.invoke(TestMonotonicFrameClock.jvm.kt:106)
	at androidx.compose.ui.test.TestMonotonicFrameClock$withFrameNanos$2$1$1.invoke(TestMonotonicFrameClock.jvm.kt:106)
	at androidx.compose.ui.test.TestMonotonicFrameClock$performFrame$1.invoke(TestMonotonicFrameClock.jvm.kt:151)
	at androidx.compose.ui.test.TestMonotonicFrameClock$performFrame$1.invoke(TestMonotonicFrameClock.jvm.kt:133)
	at androidx.compose.ui.test.FrameDeferringContinuationInterceptor.runWithoutResumingCoroutines(FrameDeferringContinuationInterceptor.jvm.kt:57)
	at androidx.compose.ui.test.TestMonotonicFrameClock.performFrame(TestMonotonicFrameClock.jvm.kt:133)
	at androidx.compose.ui.test.TestMonotonicFrameClock.access$performFrame(TestMonotonicFrameClock.jvm.kt:53)
	at androidx.compose.ui.test.TestMonotonicFrameClock$withFrameNanos$2$1$2.invokeSuspend(TestMonotonicFrameClock.jvm.kt:111)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTaskKt.resume(DispatchedTask.kt:221)
	at kotlinx.coroutines.DispatchedTaskKt.dispatch(DispatchedTask.kt:154)
	at kotlinx.coroutines.CancellableContinuationImpl.dispatchResume(CancellableContinuationImpl.kt:470)
	at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$kotlinx_coroutines_core(CancellableContinuationImpl.kt:504)
	at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$kotlinx_coroutines_core$default(CancellableContinuationImpl.kt:493)
	at kotlinx.coroutines.CancellableContinuationImpl.resumeUndispatched(CancellableContinuationImpl.kt:596)
	at kotlinx.coroutines.test.CancellableContinuationRunnable.run(TestDispatcher.kt:60)
	at kotlinx.coroutines.test.TestDispatcher.processEvent$kotlinx_coroutines_test(TestDispatcher.kt:24)
	at kotlinx.coroutines.test.TestCoroutineScheduler.runCurrent(TestCoroutineScheduler.kt:132)
	at androidx.compose.ui.test.AbstractMainTestClock$advanceScheduler$1.invoke(AbstractMainTestClock.jvm.kt:68)
	at androidx.compose.ui.test.AbstractMainTestClock$advanceScheduler$1.invoke(AbstractMainTestClock.jvm.kt:64)
	at androidx.compose.ui.test.AndroidSynchronization_androidKt.runOnUiThread(AndroidSynchronization.android.kt:35)
	at androidx.compose.ui.test.MainTestClockImpl$1.invoke(MainTestClockImpl.android.kt:26)
	at androidx.compose.ui.test.MainTestClockImpl$1.invoke(MainTestClockImpl.android.kt:26)
	at androidx.compose.ui.test.AbstractMainTestClock.advanceScheduler(AbstractMainTestClock.jvm.kt:64)
	at androidx.compose.ui.test.AbstractMainTestClock.advanceTimeByFrame(AbstractMainTestClock.jvm.kt:36)
	at androidx.compose.ui.test.ComposeIdlingResource.isIdleNow(ComposeIdlingResource.android.kt:77)
	at androidx.compose.ui.test.RobolectricIdlingStrategy$runUntilIdle$1.invoke(RobolectricIdlingStrategy.android.kt:87)
	at androidx.compose.ui.test.RobolectricIdlingStrategy$runUntilIdle$1.invoke(RobolectricIdlingStrategy.android.kt:65)
	at androidx.compose.ui.test.AndroidSynchronization_androidKt.runOnUiThread(AndroidSynchronization.android.kt:35)
	at androidx.compose.ui.test.RobolectricIdlingStrategy.runUntilIdle(RobolectricIdlingStrategy.android.kt:65)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment.waitForIdle(ComposeUiTest.android.kt:385)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment.access$waitForIdle(ComposeUiTest.android.kt:237)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$AndroidComposeUiTestImpl.waitForIdle(ComposeUiTest.android.kt:484)
	at com.alexvanyo.composelife.roborazzishowkasescreenshottest.BaseRoborazziTest.previewScreenshotTest$lambda$3(BaseRoborazziTest.kt:138)
	at androidx.compose.ui.test.ComposeUiTest_androidKt$runAndroidComposeUiTest$1.invoke(ComposeUiTest.android.kt:114)
	at androidx.compose.ui.test.ComposeUiTest_androidKt$runAndroidComposeUiTest$1.invoke(ComposeUiTest.android.kt:112)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$AndroidComposeUiTestImpl.withDisposableContent(ComposeUiTest.android.kt:585)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$runTest$1$1$1$1$1$1.invoke(ComposeUiTest.android.kt:372)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment.withComposeIdlingResource(ComposeUiTest.android.kt:441)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment.access$withComposeIdlingResource(ComposeUiTest.android.kt:237)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$runTest$1$1$1$1$1.invoke(ComposeUiTest.android.kt:371)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment.withWindowRecomposer(ComposeUiTest.android.kt:415)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment.access$withWindowRecomposer(ComposeUiTest.android.kt:237)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$runTest$1$1$1$1.invoke(ComposeUiTest.android.kt:370)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment.withTestCoroutines(ComposeUiTest.android.kt:428)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment.access$withTestCoroutines(ComposeUiTest.android.kt:237)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$runTest$1$1$1.invoke(ComposeUiTest.android.kt:369)
	at androidx.compose.ui.test.IdlingStrategy.withStrategy(IdlingStrategy.android.kt:55)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$runTest$1$1.invoke(ComposeUiTest.android.kt:368)
	at androidx.compose.ui.test.IdlingResourceRegistry.withRegistry(IdlingResourceRegistry.jvm.kt:146)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$runTest$1.invoke(ComposeUiTest.android.kt:367)
	at androidx.compose.ui.test.ComposeRootRegistry.withRegistry(ComposeRootRegistry.android.kt:137)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment.runTest(ComposeUiTest.android.kt:366)
	at androidx.compose.ui.test.ComposeUiTest_androidKt.runAndroidComposeUiTest(ComposeUiTest.android.kt:112)
	at androidx.compose.ui.test.ComposeUiTest_androidKt.runComposeUiTest(ComposeUiTest.android.kt:53)
	at androidx.compose.ui.test.ComposeUiTest_androidKt.runComposeUiTest$default(ComposeUiTest.android.kt:52)
	at com.alexvanyo.composelife.roborazzishowkasescreenshottest.BaseRoborazziTest.previewScreenshotTest(BaseRoborazziTest.kt:94)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at com.google.testing.junit.testparameterinjector.PluggableTestRunner$ContextMethodRule$1.evaluate(PluggableTestRunner.java:414)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.robolectric.internal.SandboxTestRunner$2.lambda$evaluate$2(SandboxTestRunner.java:285)
	at org.robolectric.internal.bytecode.Sandbox.lambda$runOnMainThread$0(Sandbox.java:104)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.lang.NullPointerException: EGL_NO_SURFACE must not be null
	at androidx.graphics.opengl.egl.EGLManager.<init>(EGLManager.kt:40)
	at androidx.graphics.opengl.GLThread.obtainEGLManager(GLThread.kt:210)
	at androidx.graphics.opengl.GLThread.start$lambda$1$lambda$0(GLThread.kt:57)
	at android.os.Handler.handleCallback(Handler.java:958)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at android.os.Looper.loopOnce(Looper.java:205)
	at android.os.Looper.loop(Looper.java:294)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at org.robolectric.shadows.ShadowPausedLooper$LooperReflector$$Reflector1.loop(Unknown Source)
	at org.robolectric.shadows.ShadowPausedLooper.loop(ShadowPausedLooper.java:472)
	at android.os.Looper.loop(Looper.java)
	at android.os.HandlerThread.run(HandlerThread.java:67)
com.alexvanyo.composelife.ui.cells.RoborazziTest previewScreenshotTest[CombinedRoborazziParameterization]
Stack Traces | 103s run time
java.lang.IllegalStateException: Handler (android.os.Handler) {65c6d9d7} sending message to a Looper thread that has died due to an uncaught exception
	at org.robolectric.shadows.ShadowPausedMessageQueue.enqueueMessage(ShadowPausedMessageQueue.java:200)
	at android.os.MessageQueue.enqueueMessage(MessageQueue.java)
	at android.os.Handler.enqueueMessage(Handler.java:786)
	at android.os.Handler.sendMessageAtTime(Handler.java:735)
	at android.os.Handler.sendMessageDelayed(Handler.java:705)
	at android.os.Handler.post(Handler.java:435)
	at androidx.graphics.opengl.GLThread.tearDown(GLThread.kt:179)
	at androidx.graphics.opengl.GLRenderer.stop(GLRenderer.kt:260)
	at androidx.graphics.opengl.GLRenderer.stop$default(GLRenderer.kt:251)
	at com.alexvanyo.composelife.ui.cells.OpenGLNonInteractableCellsKt$rememberGLRenderer$1$1.onForgotten(OpenGLNonInteractableCells.kt:182)
	at androidx.compose.runtime.internal.RememberEventDispatcher.dispatchRememberObservers(RememberEventDispatcher.kt:153)
	at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Composition.kt:1042)
	at androidx.compose.runtime.CompositionImpl.applyChanges(Composition.kt:1065)
	at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:681)
	at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:588)
	at androidx.compose.ui.test.TestMonotonicFrameClock$withFrameNanos$2$1$1.invoke(TestMonotonicFrameClock.jvm.kt:106)
	at androidx.compose.ui.test.TestMonotonicFrameClock$withFrameNanos$2$1$1.invoke(TestMonotonicFrameClock.jvm.kt:106)
	at androidx.compose.ui.test.TestMonotonicFrameClock$performFrame$1.invoke(TestMonotonicFrameClock.jvm.kt:151)
	at androidx.compose.ui.test.TestMonotonicFrameClock$performFrame$1.invoke(TestMonotonicFrameClock.jvm.kt:133)
	at androidx.compose.ui.test.FrameDeferringContinuationInterceptor.runWithoutResumingCoroutines(FrameDeferringContinuationInterceptor.jvm.kt:57)
	at androidx.compose.ui.test.TestMonotonicFrameClock.performFrame(TestMonotonicFrameClock.jvm.kt:133)
	at androidx.compose.ui.test.TestMonotonicFrameClock.access$performFrame(TestMonotonicFrameClock.jvm.kt:53)
	at androidx.compose.ui.test.TestMonotonicFrameClock$withFrameNanos$2$1$2.invokeSuspend(TestMonotonicFrameClock.jvm.kt:111)
	at _COROUTINE._BOUNDARY._(CoroutineDebugging.kt:42)
	at androidx.compose.runtime.Recomposer$recompositionRunner$2.invokeSuspend(Recomposer.kt:1069)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$withWindowRecomposer$2$1.invokeSuspend(ComposeUiTest.android.kt:414)
Caused by: java.lang.IllegalStateException: Handler (android.os.Handler) {65c6d9d7} sending message to a Looper thread that has died due to an uncaught exception
	at org.robolectric.shadows.ShadowPausedMessageQueue.enqueueMessage(ShadowPausedMessageQueue.java:200)
	at android.os.MessageQueue.enqueueMessage(MessageQueue.java)
	at android.os.Handler.enqueueMessage(Handler.java:786)
	at android.os.Handler.sendMessageAtTime(Handler.java:735)
	at android.os.Handler.sendMessageDelayed(Handler.java:705)
	at android.os.Handler.post(Handler.java:435)
	at androidx.graphics.opengl.GLThread.tearDown(GLThread.kt:179)
	at androidx.graphics.opengl.GLRenderer.stop(GLRenderer.kt:260)
	at androidx.graphics.opengl.GLRenderer.stop$default(GLRenderer.kt:251)
	at com.alexvanyo.composelife.ui.cells.OpenGLNonInteractableCellsKt$rememberGLRenderer$1$1.onForgotten(OpenGLNonInteractableCells.kt:182)
	at androidx.compose.runtime.internal.RememberEventDispatcher.dispatchRememberObservers(RememberEventDispatcher.kt:153)
	at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Composition.kt:1042)
	at androidx.compose.runtime.CompositionImpl.applyChanges(Composition.kt:1065)
	at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:681)
	at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:588)
	at androidx.compose.ui.test.TestMonotonicFrameClock$withFrameNanos$2$1$1.invoke(TestMonotonicFrameClock.jvm.kt:106)
	at androidx.compose.ui.test.TestMonotonicFrameClock$withFrameNanos$2$1$1.invoke(TestMonotonicFrameClock.jvm.kt:106)
	at androidx.compose.ui.test.TestMonotonicFrameClock$performFrame$1.invoke(TestMonotonicFrameClock.jvm.kt:151)
	at androidx.compose.ui.test.TestMonotonicFrameClock$performFrame$1.invoke(TestMonotonicFrameClock.jvm.kt:133)
	at androidx.compose.ui.test.FrameDeferringContinuationInterceptor.runWithoutResumingCoroutines(FrameDeferringContinuationInterceptor.jvm.kt:57)
	at androidx.compose.ui.test.TestMonotonicFrameClock.performFrame(TestMonotonicFrameClock.jvm.kt:133)
	at androidx.compose.ui.test.TestMonotonicFrameClock.access$performFrame(TestMonotonicFrameClock.jvm.kt:53)
	at androidx.compose.ui.test.TestMonotonicFrameClock$withFrameNanos$2$1$2.invokeSuspend(TestMonotonicFrameClock.jvm.kt:111)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTaskKt.resume(DispatchedTask.kt:221)
	at kotlinx.coroutines.DispatchedTaskKt.dispatch(DispatchedTask.kt:154)
	at kotlinx.coroutines.CancellableContinuationImpl.dispatchResume(CancellableContinuationImpl.kt:470)
	at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$kotlinx_coroutines_core(CancellableContinuationImpl.kt:504)
	at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$kotlinx_coroutines_core$default(CancellableContinuationImpl.kt:493)
	at kotlinx.coroutines.CancellableContinuationImpl.resumeUndispatched(CancellableContinuationImpl.kt:596)
	at kotlinx.coroutines.test.CancellableContinuationRunnable.run(TestDispatcher.kt:60)
	at kotlinx.coroutines.test.TestDispatcher.processEvent$kotlinx_coroutines_test(TestDispatcher.kt:24)
	at kotlinx.coroutines.test.TestCoroutineScheduler.runCurrent(TestCoroutineScheduler.kt:132)
	at androidx.compose.ui.test.AbstractMainTestClock$advanceScheduler$1.invoke(AbstractMainTestClock.jvm.kt:68)
	at androidx.compose.ui.test.AbstractMainTestClock$advanceScheduler$1.invoke(AbstractMainTestClock.jvm.kt:64)
	at androidx.compose.ui.test.AndroidSynchronization_androidKt.runOnUiThread(AndroidSynchronization.android.kt:35)
	at androidx.compose.ui.test.MainTestClockImpl$1.invoke(MainTestClockImpl.android.kt:26)
	at androidx.compose.ui.test.MainTestClockImpl$1.invoke(MainTestClockImpl.android.kt:26)
	at androidx.compose.ui.test.AbstractMainTestClock.advanceScheduler(AbstractMainTestClock.jvm.kt:64)
	at androidx.compose.ui.test.AbstractMainTestClock.advanceTimeByFrame(AbstractMainTestClock.jvm.kt:36)
	at androidx.compose.ui.test.ComposeIdlingResource.isIdleNow(ComposeIdlingResource.android.kt:77)
	at androidx.compose.ui.test.RobolectricIdlingStrategy$runUntilIdle$1.invoke(RobolectricIdlingStrategy.android.kt:87)
	at androidx.compose.ui.test.RobolectricIdlingStrategy$runUntilIdle$1.invoke(RobolectricIdlingStrategy.android.kt:65)
	at androidx.compose.ui.test.AndroidSynchronization_androidKt.runOnUiThread(AndroidSynchronization.android.kt:35)
	at androidx.compose.ui.test.RobolectricIdlingStrategy.runUntilIdle(RobolectricIdlingStrategy.android.kt:65)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment.waitForIdle(ComposeUiTest.android.kt:385)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment.access$waitForIdle(ComposeUiTest.android.kt:237)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$AndroidComposeUiTestImpl.waitForIdle(ComposeUiTest.android.kt:484)
	at com.alexvanyo.composelife.roborazzishowkasescreenshottest.BaseRoborazziTest.previewScreenshotTest$lambda$3(BaseRoborazziTest.kt:138)
	at androidx.compose.ui.test.ComposeUiTest_androidKt$runAndroidComposeUiTest$1.invoke(ComposeUiTest.android.kt:114)
	at androidx.compose.ui.test.ComposeUiTest_androidKt$runAndroidComposeUiTest$1.invoke(ComposeUiTest.android.kt:112)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$AndroidComposeUiTestImpl.withDisposableContent(ComposeUiTest.android.kt:585)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$runTest$1$1$1$1$1$1.invoke(ComposeUiTest.android.kt:372)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment.withComposeIdlingResource(ComposeUiTest.android.kt:441)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment.access$withComposeIdlingResource(ComposeUiTest.android.kt:237)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$runTest$1$1$1$1$1.invoke(ComposeUiTest.android.kt:371)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment.withWindowRecomposer(ComposeUiTest.android.kt:415)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment.access$withWindowRecomposer(ComposeUiTest.android.kt:237)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$runTest$1$1$1$1.invoke(ComposeUiTest.android.kt:370)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment.withTestCoroutines(ComposeUiTest.android.kt:428)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment.access$withTestCoroutines(ComposeUiTest.android.kt:237)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$runTest$1$1$1.invoke(ComposeUiTest.android.kt:369)
	at androidx.compose.ui.test.IdlingStrategy.withStrategy(IdlingStrategy.android.kt:55)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$runTest$1$1.invoke(ComposeUiTest.android.kt:368)
	at androidx.compose.ui.test.IdlingResourceRegistry.withRegistry(IdlingResourceRegistry.jvm.kt:146)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$runTest$1.invoke(ComposeUiTest.android.kt:367)
	at androidx.compose.ui.test.ComposeRootRegistry.withRegistry(ComposeRootRegistry.android.kt:137)
	at androidx.compose.ui.test.AndroidComposeUiTestEnvironment.runTest(ComposeUiTest.android.kt:366)
	at androidx.compose.ui.test.ComposeUiTest_androidKt.runAndroidComposeUiTest(ComposeUiTest.android.kt:112)
	at androidx.compose.ui.test.ComposeUiTest_androidKt.runComposeUiTest(ComposeUiTest.android.kt:53)
	at androidx.compose.ui.test.ComposeUiTest_androidKt.runComposeUiTest$default(ComposeUiTest.android.kt:52)
	at com.alexvanyo.composelife.roborazzishowkasescreenshottest.BaseRoborazziTest.previewScreenshotTest(BaseRoborazziTest.kt:94)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at com.google.testing.junit.testparameterinjector.PluggableTestRunner$ContextMethodRule$1.evaluate(PluggableTestRunner.java:414)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.robolectric.internal.SandboxTestRunner$2.lambda$evaluate$2(SandboxTestRunner.java:285)
	at org.robolectric.internal.bytecode.Sandbox.lambda$runOnMainThread$0(Sandbox.java:104)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.lang.NullPointerException: EGL_NO_SURFACE must not be null
	at androidx.graphics.opengl.egl.EGLManager.<init>(EGLManager.kt:40)
	at androidx.graphics.opengl.GLThread.obtainEGLManager(GLThread.kt:210)
	at androidx.graphics.opengl.GLThread.start$lambda$1$lambda$0(GLThread.kt:57)
	at android.os.Handler.handleCallback(Handler.java:958)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at android.os.Looper.loopOnce(Looper.java:205)
	at android.os.Looper.loop(Looper.java:294)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at org.robolectric.shadows.ShadowPausedLooper$LooperReflector$$Reflector47.loop(Unknown Source)
	at org.robolectric.shadows.ShadowPausedLooper.loop(ShadowPausedLooper.java:472)
	at android.os.Looper.loop(Looper.java)
	at android.os.HandlerThread.run(HandlerThread.java:67)

To view more test analytics, go to the Test Analytics Dashboard
📢 Thoughts on this report? Let us know!

@alexvanyo alexvanyo changed the title Replace GLSurfaceview with GLRenderer and AndroidExternalSurface Replace GLSurfaceView with GLRenderer and AndroidExternalSurface Aug 12, 2024
@alexvanyo alexvanyo added the android Specific to Android label Sep 23, 2024
@alexvanyo alexvanyo force-pushed the av/glrenderer branch 4 times, most recently from c90337b to 8f008ea Compare September 25, 2024 02:00
@alexvanyo alexvanyo force-pushed the av/glrenderer branch 4 times, most recently from d9b4c26 to 4aa578b Compare October 10, 2024 17:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
android Specific to Android
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Replace AndroidView wrapping GLSurfaceView with AndroidExternalSurface and GLRenderer
1 participant