Fixed
Status Update
Comments
an...@google.com <an...@google.com> #2
Project: platform/frameworks/support
Branch: androidx-main
commit 755b3f1f06c682b37c39b7bf3b80bccb638b642d
Author: Nader Jawad <njawad@google.com>
Date: Mon Feb 12 23:43:23 2024
GraphicsLayer API Part 4/N
Relnote: "Update Compose framework to expose a
GraphicsContext composition local alongside
updating Owner, DelegateableNode and drawWithCache
Modifier implementations to expose access to the
GraphicsContext for scoped access that will automatically
cleanup GraphicsLayer instances when Modifiers are torn
down."
Bug: 288494724
Test: Ran AndroidGraphicsLayerTest
Change-Id: I64a2f6a2e156f9305fe32ac2a6f9be2b61f7f0ed
M compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/drawscope/DrawScope.kt
M compose/ui/ui-unit/api/current.txt
M compose/ui/ui-unit/api/restricted_current.txt
M compose/ui/ui-unit/src/androidUnitTest/kotlin/androidx/compose/ui/unit/IntSizeTest.kt
M compose/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/IntSize.kt
M compose/ui/ui/api/current.txt
M compose/ui/ui/api/restricted_current.txt
M compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/draw/DrawModifierTest.kt
M compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/input/pointer/HitPathTrackerTest.kt
M compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/input/pointer/PointerInputEventProcessorTest.kt
M compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/layout/Helpers.kt
M compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/node/NodeChainTester.kt
M compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt
M compose/ui/ui/src/androidUnitTest/kotlin/androidx/compose/ui/node/LayoutNodeTest.kt
M compose/ui/ui/src/androidUnitTest/kotlin/androidx/compose/ui/node/ModifierLocalConsumerEntityTest.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draw/DrawModifier.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/GraphicsLayerScope.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/DelegatableNode.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/Owner.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/platform/CompositionLocals.kt
M compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/SkiaBasedOwner.skiko.kt
https://android-review.googlesource.com/2960247
Branch: androidx-main
commit 755b3f1f06c682b37c39b7bf3b80bccb638b642d
Author: Nader Jawad <njawad@google.com>
Date: Mon Feb 12 23:43:23 2024
GraphicsLayer API Part 4/N
Relnote: "Update Compose framework to expose a
GraphicsContext composition local alongside
updating Owner, DelegateableNode and drawWithCache
Modifier implementations to expose access to the
GraphicsContext for scoped access that will automatically
cleanup GraphicsLayer instances when Modifiers are torn
down."
Bug: 288494724
Test: Ran AndroidGraphicsLayerTest
Change-Id: I64a2f6a2e156f9305fe32ac2a6f9be2b61f7f0ed
M compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/drawscope/DrawScope.kt
M compose/ui/ui-unit/api/current.txt
M compose/ui/ui-unit/api/restricted_current.txt
M compose/ui/ui-unit/src/androidUnitTest/kotlin/androidx/compose/ui/unit/IntSizeTest.kt
M compose/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/IntSize.kt
M compose/ui/ui/api/current.txt
M compose/ui/ui/api/restricted_current.txt
M compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/draw/DrawModifierTest.kt
M compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/input/pointer/HitPathTrackerTest.kt
M compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/input/pointer/PointerInputEventProcessorTest.kt
M compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/layout/Helpers.kt
M compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/node/NodeChainTester.kt
M compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt
M compose/ui/ui/src/androidUnitTest/kotlin/androidx/compose/ui/node/LayoutNodeTest.kt
M compose/ui/ui/src/androidUnitTest/kotlin/androidx/compose/ui/node/ModifierLocalConsumerEntityTest.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draw/DrawModifier.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/GraphicsLayerScope.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/DelegatableNode.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/Owner.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/platform/CompositionLocals.kt
M compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/SkiaBasedOwner.skiko.kt
sh...@google.com <sh...@google.com>
sh...@google.com <sh...@google.com> #3
Project: platform/frameworks/support
Branch: androidx-main
commit 88951ea1f54623398ffdac8a24e35db3fbfeeb8a
Author: Nader Jawad <njawad@google.com>
Date: Mon Feb 12 22:54:56 2024
GraphicsLayer API Part 3/N
Relnote: "Introduce GraphicsContext function constructor
to create a factory to create GraphicsLayer instances"
Created GraphicsLayerV29 as the RenderNode backed
GraphicsLayer for Android
Bug: 288494724
Test: Added AndroidGraphicsLayerTest
Change-Id: Ib98d6b140fab3d857f74faa4fa227927e1625bed
M compose/ui/ui-graphics/api/current.txt
M compose/ui/ui-graphics/api/restricted_current.txt
A compose/ui/ui-graphics/src/androidInstrumentedTest/kotlin/androidx/compose/ui/graphics/layer/AndroidGraphicsLayerTest.kt
A compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidGraphicsContext.android.kt
M compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/layer/AndroidGraphicsLayer.android.kt
A compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/layer/GraphicsLayerV29.android.kt
https://android-review.googlesource.com/2960246
Branch: androidx-main
commit 88951ea1f54623398ffdac8a24e35db3fbfeeb8a
Author: Nader Jawad <njawad@google.com>
Date: Mon Feb 12 22:54:56 2024
GraphicsLayer API Part 3/N
Relnote: "Introduce GraphicsContext function constructor
to create a factory to create GraphicsLayer instances"
Created GraphicsLayerV29 as the RenderNode backed
GraphicsLayer for Android
Bug: 288494724
Test: Added AndroidGraphicsLayerTest
Change-Id: Ib98d6b140fab3d857f74faa4fa227927e1625bed
M compose/ui/ui-graphics/api/current.txt
M compose/ui/ui-graphics/api/restricted_current.txt
A compose/ui/ui-graphics/src/androidInstrumentedTest/kotlin/androidx/compose/ui/graphics/layer/AndroidGraphicsLayerTest.kt
A compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidGraphicsContext.android.kt
M compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/layer/AndroidGraphicsLayer.android.kt
A compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/layer/GraphicsLayerV29.android.kt
ap...@google.com <ap...@google.com> #4
Project: platform/frameworks/support
Branch: androidx-main
commit 25e6f1b21e6136f816097bd0b7e395d81cbaaaa6
Author: Nader Jawad <njawad@google.com>
Date: Tue Mar 05 14:16:52 2024
GraphicsLayer API Part 5/N
Introduce LayerManager as an internal
mechanism for persisting of GraphicsLayer
displaylists by invoking a placeholder render
with empty content within the layer in order
to increment the internal ref count of RenderNode
instances within HWUI.
Bug: 288494724
Test: Ran AndroidGraphicsLayerTest
Change-Id: I52203a1bca59ea024cb7dfa665994a7ccc573756
M compose/ui/ui-graphics/src/androidInstrumentedTest/kotlin/androidx/compose/ui/graphics/layer/AndroidGraphicsLayerTest.kt
M compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidGraphicsContext.android.kt
M compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/layer/AndroidGraphicsLayer.android.kt
A compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/layer/LayerManager.android.kt
M compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/draw/DrawModifierTest.kt
https://android-review.googlesource.com/2961822
Branch: androidx-main
commit 25e6f1b21e6136f816097bd0b7e395d81cbaaaa6
Author: Nader Jawad <njawad@google.com>
Date: Tue Mar 05 14:16:52 2024
GraphicsLayer API Part 5/N
Introduce LayerManager as an internal
mechanism for persisting of GraphicsLayer
displaylists by invoking a placeholder render
with empty content within the layer in order
to increment the internal ref count of RenderNode
instances within HWUI.
Bug: 288494724
Test: Ran AndroidGraphicsLayerTest
Change-Id: I52203a1bca59ea024cb7dfa665994a7ccc573756
M compose/ui/ui-graphics/src/androidInstrumentedTest/kotlin/androidx/compose/ui/graphics/layer/AndroidGraphicsLayerTest.kt
M compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidGraphicsContext.android.kt
M compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/layer/AndroidGraphicsLayer.android.kt
A compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/layer/LayerManager.android.kt
M compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/draw/DrawModifierTest.kt
ap...@google.com <ap...@google.com> #5
Project: platform/frameworks/support
Branch: androidx-main
commit 55240af3dcdb65f46679c8840f9b6148034bc7e0
Author: Nader Jawad <njawad@google.com>
Date: Mon Feb 12 22:13:31 2024
GraphicsLayer API Part 2/N
Relnote: "Exposed GraphicsLayer API
to provide developer defined flexibility
in capturing drawing commands that can be
used to draw elsewhere and also apply
different visual effects to the end result."
Introduced AndroidGraphicsLayer actual
implementation with interface definition
to abstract away differences between different
Android API levels.
Added placeholder Desktop GraphicsLayer implementation
to be completed in a subsequent CL.
Bug: 288494724
Test: Added with Android GraphicsLayer implementation
Change-Id: I802452c9375fc6949ed85fb65d77173456893907
M compose/ui/ui-graphics/api/current.txt
M compose/ui/ui-graphics/api/restricted_current.txt
A compose/ui/ui-graphics/samples/src/main/java/androidx/compose/ui/graphics/samples/GraphicsLayerSamples.kt
A compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/layer/AndroidGraphicsLayer.android.kt
M compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/GraphicsContext.kt
M compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/drawscope/DrawScope.kt
A compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/layer/CompositingStrategy.kt
M compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/layer/GraphicsLayer.kt
A compose/ui/ui-graphics/src/desktopMain/kotlin/androidx/compose/ui/graphics/layer/GraphicsLayer.desktop.kt
https://android-review.googlesource.com/2960245
Branch: androidx-main
commit 55240af3dcdb65f46679c8840f9b6148034bc7e0
Author: Nader Jawad <njawad@google.com>
Date: Mon Feb 12 22:13:31 2024
GraphicsLayer API Part 2/N
Relnote: "Exposed GraphicsLayer API
to provide developer defined flexibility
in capturing drawing commands that can be
used to draw elsewhere and also apply
different visual effects to the end result."
Introduced AndroidGraphicsLayer actual
implementation with interface definition
to abstract away differences between different
Android API levels.
Added placeholder Desktop GraphicsLayer implementation
to be completed in a subsequent CL.
Bug: 288494724
Test: Added with Android GraphicsLayer implementation
Change-Id: I802452c9375fc6949ed85fb65d77173456893907
M compose/ui/ui-graphics/api/current.txt
M compose/ui/ui-graphics/api/restricted_current.txt
A compose/ui/ui-graphics/samples/src/main/java/androidx/compose/ui/graphics/samples/GraphicsLayerSamples.kt
A compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/layer/AndroidGraphicsLayer.android.kt
M compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/GraphicsContext.kt
M compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/drawscope/DrawScope.kt
A compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/layer/CompositingStrategy.kt
M compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/layer/GraphicsLayer.kt
A compose/ui/ui-graphics/src/desktopMain/kotlin/androidx/compose/ui/graphics/layer/GraphicsLayer.desktop.kt
Description
Basically what happens is when you have some postponed loading like asynchronously loading the image inside an item of AdapterList and you scroll sometimes it crashes and you there is no workaround.
It is not stable reproducible but I come up with a simple repro app(and you can see the logs here as well):
What happens as I understand:
In PointerInputEventProcessor you first collect all PointerInputFilters which were hit(for example in our case is and AdapterList itself and the clickable item inside it)
Then inside AdapterList onDrag callback we synchronously subcompose which means that the AdapterList's item could recompose and apply a new modifier(for example update the background color).
And then we execute dispatchChanges on a modifier which was already detached.
We just discussed it during the sync, but seems like the simplest workaround is to add inside Node.dispatchChanges() something like
if (!pointerInputFilter.isAttached) {
return false
}