Call SkiaLayerComponent.onComposeInvalidation()
only from the event dispatch thread
#1288
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently,
ComposeSceneMediator.onComposeInvalidation()
callsSkiaLayerComponent.onComposeInvalidation()
directly. However,ComposeSceneMediator.onComposeInvalidation()
is not guaranteed to be called from the event dispatch thread, whereasSkiaLayerComponent.onComposeInvalidation()
must be called from the event dispatch thread. When it's called from another thread, it throws an exception.RelNote: Fix crash when modifying Compose state from a non-UI thread.
Proposed Changes
Make
ComposeSceneMediator.onComposeInvalidation()
callSkiaLayerComponent.onComposeInvalidation()
on the event dispatch thread only.Testing
Test: Added a unit test, and also tested manually with the following:
Issues Fixed
Fixes: JetBrains/compose-multiplatform#4546