Skip to content

Delay in animation #3245

@olivermihaly

Description

@olivermihaly

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>

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions