-
Notifications
You must be signed in to change notification settings - Fork 530
Description
Description
I have an animated circular progress component () inside a rendering multiple users’ progress circles. When the progress prop changes rapidly (e.g., pressing a button quickly), the animation does not update immediately — it ignores some updates, causing a significant delay before the chart visually updates. This behavior was smooth and immediate on Skia 1.5 but appears delayed/skipped on Skia 2.1.1.
The console logs value changed immediately on progress updates.
The component's visual animation updates only after a noticeable delay, ignoring rapid value changes.
Fast repeated presses cause the animation to lag behind the actual progress value.
Behavior was not present in Skia 1.5 (animations updated immediately, albeit less smoothly).
Expected behavior:
The chart animation should immediately start transitioning to the new value without skipping or delay.
Rapid value changes should update the animation smoothly and responsively, with no perceptible lag.
Additional context:
Animations work smoothly but only start after a delay, especially when values change rapidly.
When I remove the Chart ( just a test component that listens to the progress ) it logged the values immediately.
Expo sdk 53
React Native Skia Version
2.1.1
React Native Version
0.79.5
Using New Architecture
- Enabled
Steps to Reproduce
Create a React Native app using React Native Skia 2.1.1 and Reanimated 3.x.
Render a component containing multiple animated Skia components (e.g., circular progress indicators).
Add a button that rapidly updates the animation values when pressed repeatedly.
Observe that rapid press-and-release actions cause the Skia components to ignore some updates, resulting in delayed or skipped animations.
Snack, Code Example, Screenshot, or Link to Repository
<Canvas style={{ width: size, height: size, position: 'absolute', top: 0, left: 0, transform: [{ rotate: '90deg' }] }}>
{usersData.map((user, index) => {
if (user.username === localUser.username) {
console.log('value changed', progress);
return (
<Chart
key={index}
index={index}
count={usersData.length}
value={progress / 100}
onAnimationComplete={onAnimationComplete}
size={size}
color={Colors.pinkPrimary}
/>
);
}
return (
<Chart
key={index}
index={index}
count={usersData.length}
value={user.submitPercentage / 100}
size={size}
/>
);
})}
</Canvas>