Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 5 additions & 15 deletions arsceneview/src/main/java/io/github/sceneview/ar/ARSceneView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import androidx.activity.ComponentActivity
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.coroutineScope
import com.google.android.filament.Engine
import com.google.android.filament.IndirectLight
import com.google.android.filament.MaterialInstance
Expand Down Expand Up @@ -45,9 +44,7 @@ import io.github.sceneview.model.Model
import io.github.sceneview.model.ModelInstance
import io.github.sceneview.node.LightNode
import io.github.sceneview.node.Node
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.util.concurrent.Executors

/**
* A SurfaceView that integrates with ARCore and renders a scene
Expand Down Expand Up @@ -565,8 +562,6 @@ open class ARSceneView @JvmOverloads constructor(

override fun destroy() {
if (!isDestroyed) {
destroyARCore()
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You use LifeCycleObserver as the main place to call ArCore lifecycle functions
And you don't need to call it here again
I didn't find any side cases


defaultCameraNode?.destroy()
defaultCameraStream?.destroy()

Expand All @@ -577,14 +572,6 @@ open class ARSceneView @JvmOverloads constructor(
super.destroy()
}

fun destroyARCore() {
Copy link
Contributor Author

@Antiglobalist Antiglobalist Mar 7, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is no reasons to place public function cuz it's internal behavior
Same as all others lifecycle calls

val scope = lifecycle?.coroutineScope ?: CoroutineScope(Dispatchers.IO)
Copy link
Contributor Author

@Antiglobalist Antiglobalist Mar 7, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As I wrote in issue - Coroutines is not fit tool to execute background operation a specialty on Destroy callback

scope.launch(Dispatchers.IO) {
// destroy should be called off the main thread since it hangs for many seconds
arCore.destroy()
}
}

class DefaultARCameraNode(engine: Engine) : ARCameraNode(engine) {
init {
// Set the exposure on the camera, this exposure follows the sunny f/16 rule
Expand All @@ -608,7 +595,10 @@ open class ARSceneView @JvmOverloads constructor(
}

override fun onDestroy(owner: LifecycleOwner) {
destroyARCore()
Executors.newSingleThreadExecutor().execute {
// destroy should be called off the main thread since it hangs for many seconds
arCore.destroy()
}
}
}

Expand Down