Fixed
Status Update
Comments
lp...@google.com <lp...@google.com> #2
Nader, I'm happy to look into implementing this if you can give me some pointers as to what makes sense here / where we need to make changes!
nj...@google.com <nj...@google.com> #3
Thanks Louis, would you be interested in taking a look after we had our conversation a week or so ago?
ap...@google.com <ap...@google.com> #4
Project: platform/frameworks/support
Branch: androidx-main
commit 6c1a8e7c8fc516fd8aeae0b90ef6cb5fe8aab8ab
Author: Louis Pullen-Freilich <lpf@google.com>
Date: Tue Apr 23 20:25:15 2024
Adds support for observing Shape#createOutline in graphics layers
This means that state reads inside createOutline will cause invalidations, allowing for more performant animations of a component's shape.
Also changes Shape from Immutable to Stable to represent this contract, and removes equals() and hashcode() implementations from Outline.Generic, since comparing paths can be misleading if two outlines use the same path, as the path may have changed since the outline was rendered previously.
Bug: b/326070216
Test: OutlineTest
Test: ClipDrawTest
Relnote: "Adds support for mutable shape implementations. Shape#createOutline is now observed inside graphics layers, so reading state values inside will cause invalidations when the state changes, allowing for more performant shape animations."
Change-Id: Id1629c24f02d882ba0de5e3e82fbc1284accc3ea
M compose/ui/ui-graphics/api/current.txt
M compose/ui/ui-graphics/api/restricted_current.txt
M compose/ui/ui-graphics/src/androidInstrumentedTest/kotlin/androidx/compose/ui/graphics/OutlineTest.kt
M compose/ui/ui-graphics/src/androidInstrumentedTest/kotlin/androidx/compose/ui/graphics/layer/AndroidGraphicsLayerTest.kt
M compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Outline.kt
M compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Shape.kt
M compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt
M compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/draw/ClipDrawTest.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/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/GraphicsLayerOwnerLayer.android.kt
M compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/OutlineResolver.android.kt
M compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/RenderNodeLayer.android.kt
M compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/ViewLayer.android.kt
M compose/ui/ui/src/androidUnitTest/kotlin/androidx/compose/ui/node/LayoutNodeTest.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/NodeCoordinator.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/OwnedLayer.kt
M compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/SkiaLayerTest.kt
D compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/OutlineCache.skiko.kt
M compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/SkiaLayer.skiko.kt
https://android-review.googlesource.com/3056582
Branch: androidx-main
commit 6c1a8e7c8fc516fd8aeae0b90ef6cb5fe8aab8ab
Author: Louis Pullen-Freilich <lpf@google.com>
Date: Tue Apr 23 20:25:15 2024
Adds support for observing Shape#createOutline in graphics layers
This means that state reads inside createOutline will cause invalidations, allowing for more performant animations of a component's shape.
Also changes Shape from Immutable to Stable to represent this contract, and removes equals() and hashcode() implementations from Outline.Generic, since comparing paths can be misleading if two outlines use the same path, as the path may have changed since the outline was rendered previously.
Bug:
Test: OutlineTest
Test: ClipDrawTest
Relnote: "Adds support for mutable shape implementations. Shape#createOutline is now observed inside graphics layers, so reading state values inside will cause invalidations when the state changes, allowing for more performant shape animations."
Change-Id: Id1629c24f02d882ba0de5e3e82fbc1284accc3ea
M compose/ui/ui-graphics/api/current.txt
M compose/ui/ui-graphics/api/restricted_current.txt
M compose/ui/ui-graphics/src/androidInstrumentedTest/kotlin/androidx/compose/ui/graphics/OutlineTest.kt
M compose/ui/ui-graphics/src/androidInstrumentedTest/kotlin/androidx/compose/ui/graphics/layer/AndroidGraphicsLayerTest.kt
M compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Outline.kt
M compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Shape.kt
M compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt
M compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/draw/ClipDrawTest.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/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/GraphicsLayerOwnerLayer.android.kt
M compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/OutlineResolver.android.kt
M compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/RenderNodeLayer.android.kt
M compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/ViewLayer.android.kt
M compose/ui/ui/src/androidUnitTest/kotlin/androidx/compose/ui/node/LayoutNodeTest.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/NodeCoordinator.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/OwnedLayer.kt
M compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/SkiaLayerTest.kt
D compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/OutlineCache.skiko.kt
M compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/SkiaLayer.skiko.kt
lp...@google.com <lp...@google.com> #5
Working on CLs to update border / background, filing bugs for other places that need updating / tests to be written.
ap...@google.com <ap...@google.com> #6
Project: platform/frameworks/support
Branch: androidx-main
commit 2322852111d65e0f10a1a1ec5674807c3eac9334
Author: Louis Pullen-Freilich <lpf@google.com>
Date: Mon Apr 29 18:58:43 2024
Adds support for mutable shapes in Modifier.background
We recently landed support for shapes to be mutable / observable, so callers of createOutline now need to observe state reads inside createOutline.
Bug: b/326070216
Test: BackgroundTest
Change-Id: Id94fdd7bf92f2df7e825bb58a6af0974d6cd0bd3
M compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/BackgroundTest.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Background.kt
M compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/TraverseModifierDemo.kt
https://android-review.googlesource.com/3065423
Branch: androidx-main
commit 2322852111d65e0f10a1a1ec5674807c3eac9334
Author: Louis Pullen-Freilich <lpf@google.com>
Date: Mon Apr 29 18:58:43 2024
Adds support for mutable shapes in Modifier.background
We recently landed support for shapes to be mutable / observable, so callers of createOutline now need to observe state reads inside createOutline.
Bug:
Test: BackgroundTest
Change-Id: Id94fdd7bf92f2df7e825bb58a6af0974d6cd0bd3
M compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/BackgroundTest.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Background.kt
M compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/TraverseModifierDemo.kt
ap...@google.com <ap...@google.com> #7
Project: platform/frameworks/support
Branch: androidx-main
commit 0a2d0511e593a900ad5184438b55e7898434053e
Author: Louis Pullen-Freilich <lpf@google.com>
Date: Mon Apr 29 21:18:13 2024
Adds tests to Modifier.border for changing shape / mutable shapes
This currently works because we create the outline inside an observable draw scope, so adding tests to ensure that this behavior remains part of the contract, now that shapes can be mutable / observable.
Bug: b/326070216
Test: BorderTest
Change-Id: I863df052e31efc1b09a1abc4ab43954238ea8ea1
M compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/BorderTest.kt
https://android-review.googlesource.com/3065842
Branch: androidx-main
commit 0a2d0511e593a900ad5184438b55e7898434053e
Author: Louis Pullen-Freilich <lpf@google.com>
Date: Mon Apr 29 21:18:13 2024
Adds tests to Modifier.border for changing shape / mutable shapes
This currently works because we create the outline inside an observable draw scope, so adding tests to ensure that this behavior remains part of the contract, now that shapes can be mutable / observable.
Bug:
Test: BorderTest
Change-Id: I863df052e31efc1b09a1abc4ab43954238ea8ea1
M compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/BorderTest.kt
lp...@google.com <lp...@google.com> #8
Filed separate bugs to track manual usages of createOutline outside of our core APIs, none of these should be high traffic / block ongoing work here though.
pr...@google.com <pr...@google.com> #9
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.compose.foundation:foundation:1.7.0-beta01
androidx.compose.foundation:foundation-android:1.7.0-beta01
androidx.compose.foundation:foundation-desktop:1.7.0-beta01
androidx.compose.ui:ui:1.7.0-beta01
androidx.compose.ui:ui-android:1.7.0-beta01
androidx.compose.ui:ui-desktop:1.7.0-beta01
Description
We would like to have support for Compose
Shapes
that can have a mutableOutline
that can change as a result of a morphing shape.At this time, we are forced to provide a new
Shape
with the component API, which means a lot more recompositions.This sample WIP CL has some changes that Andrey provided before as a quick solution (specifically, the changes around the
OutlineResolver
,RenderNodeLayer
,GraphicsLayerScope
, andNodeCoordinator
).Optionally, we can perhaps consider a more targeted solution towards a specific type of shape.