Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Merged by Bors] - Reduce internal system order ambiguities, and add an example explaining them #7383

Closed

Conversation

alice-i-cecile
Copy link
Member

@alice-i-cecile alice-i-cecile commented Jan 27, 2023

Objective

  • Bevy should not have any "internal" execution order ambiguities. These clutter the output of user-facing error reporting, and can result in nasty, nondetermistic, very difficult to solve bugs.
  • Verifying this currently involves repeated non-trivial manual work.

Solution

  • add an example to quickly check this
  • [ ] ensure that this example panics if there are any unresolved ambiguities
  • [ ] run the example in CI 😈

There's one tricky ambiguity left, between UI and animation. I don't have the tools to fix this without system set configuration, so the remaining work is going to be left to #7267 or another PR after that.

2023-01-27T18:38:42.989405Z  INFO bevy_ecs::schedule::ambiguity_detection: Execution order ambiguities detected, you might want to add an explicit dependency relation between some of these systems:
 * Parallel systems:
 -- "bevy_animation::animation_player" and "bevy_ui::flex::flex_node_system"
    conflicts: ["bevy_transform::components::transform::Transform"]

Changelog

Resolved internal execution order ambiguities for:

  1. Transform propagation (ignored, we need smarter filter checking).
  2. Gamepad processing (fixed).
  3. bevy_winit's window handling (fixed).
  4. Cascaded shadow maps and perspectives (fixed).

Also fixed a desynchronized state bug that could occur when the Window component is removed and then added to the same entity in a single frame.

@alice-i-cecile alice-i-cecile added A-ECS Entities, components, systems, and events C-Testing A change that impacts how we test Bevy or how users test their apps A-Build-System Related to build systems or continuous integration labels Jan 27, 2023
@alice-i-cecile alice-i-cecile marked this pull request as ready for review January 27, 2023 18:48
crates/bevy_winit/src/lib.rs Outdated Show resolved Hide resolved
@alice-i-cecile alice-i-cecile added C-Bug An unexpected or incorrect behavior A-Windowing Platform-agnostic interface layer to run your app in labels Jan 27, 2023
@JoJoJet JoJoJet added the S-Ready-For-Final-Review This PR has been approved by the community. It's ready for a maintainer to consider merging it label Jan 28, 2023
Cargo.toml Outdated Show resolved Hide resolved
@alice-i-cecile alice-i-cecile changed the title Add and verify internal_ambiguities example Reduce internal system order ambiguities, and add an example explaining them Jan 29, 2023
@alice-i-cecile alice-i-cecile added the C-Examples An addition or correction to our examples label Jan 29, 2023
examples/ecs/nondeterministic_system_order.rs Outdated Show resolved Hide resolved
examples/ecs/nondeterministic_system_order.rs Outdated Show resolved Hide resolved
examples/ecs/nondeterministic_system_order.rs Outdated Show resolved Hide resolved
@alice-i-cecile
Copy link
Member Author

alice-i-cecile commented Jan 29, 2023

This should be mergeable now. I decided to use AppExit: it bypasses the linked bug, but also makes for a better learning tool.

Copy link
Contributor

@jdm jdm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The example makes sense to me!

Copy link

@Austreelis Austreelis left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I only reviewed the example, I think it's clear enough 😃 I just have a small phrasing suggestion but feel free to skip it if it just adds noise.

examples/ecs/nondeterministic_system_order.rs Outdated Show resolved Hide resolved
examples/ecs/nondeterministic_system_order.rs Outdated Show resolved Hide resolved
Co-authored-by: Austreelis <dev@austreelis.net>
Copy link
Member

@JoJoJet JoJoJet left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Excellent example as usual. I'm always a fan of source code that reads like a blog post.

@alice-i-cecile alice-i-cecile added the S-Ready-For-Final-Review This PR has been approved by the community. It's ready for a maintainer to consider merging it label Jan 31, 2023
@alice-i-cecile
Copy link
Member Author

May I please have one fiinal LGTM for the last round of changes before I merge? I'd rather like to unblock the stageless migration ambiguity fixing.

Copy link
Contributor

@sixfold-origami sixfold-origami left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@alice-i-cecile
Copy link
Member Author

bors r+

bors bot pushed a commit that referenced this pull request Jan 31, 2023
…ng them (#7383)

# Objective

- Bevy should not have any "internal" execution order ambiguities. These clutter the output of user-facing error reporting, and can result in nasty, nondetermistic, very difficult to solve bugs.
- Verifying this currently involves repeated non-trivial manual work. 

## Solution

- [x] add an example to quickly check this
- ~~[ ] ensure that this example panics if there are any unresolved ambiguities~~
- ~~[ ] run the example in CI 😈~~

There's one tricky ambiguity left, between UI and animation. I don't have the tools to fix this without system set configuration, so the remaining work is going to be left to #7267 or another PR after that.

```
2023-01-27T18:38:42.989405Z  INFO bevy_ecs::schedule::ambiguity_detection: Execution order ambiguities detected, you might want to add an explicit dependency relation between some of these systems:
 * Parallel systems:
 -- "bevy_animation::animation_player" and "bevy_ui::flex::flex_node_system"
    conflicts: ["bevy_transform::components::transform::Transform"]
  ```

## Changelog

Resolved internal execution order ambiguities for:
1. Transform propagation (ignored, we need smarter filter checking).
2. Gamepad processing (fixed).
3. bevy_winit's window handling (fixed).
4. Cascaded shadow maps and perspectives (fixed).

Also fixed a desynchronized state bug that could occur when the `Window` component is removed and then added to the same entity in a single frame.
@bors bors bot changed the title Reduce internal system order ambiguities, and add an example explaining them [Merged by Bors] - Reduce internal system order ambiguities, and add an example explaining them Jan 31, 2023
@bors bors bot closed this Jan 31, 2023
ItsDoot pushed a commit to ItsDoot/bevy that referenced this pull request Feb 1, 2023
…ng them (bevyengine#7383)

# Objective

- Bevy should not have any "internal" execution order ambiguities. These clutter the output of user-facing error reporting, and can result in nasty, nondetermistic, very difficult to solve bugs.
- Verifying this currently involves repeated non-trivial manual work. 

## Solution

- [x] add an example to quickly check this
- ~~[ ] ensure that this example panics if there are any unresolved ambiguities~~
- ~~[ ] run the example in CI 😈~~

There's one tricky ambiguity left, between UI and animation. I don't have the tools to fix this without system set configuration, so the remaining work is going to be left to bevyengine#7267 or another PR after that.

```
2023-01-27T18:38:42.989405Z  INFO bevy_ecs::schedule::ambiguity_detection: Execution order ambiguities detected, you might want to add an explicit dependency relation between some of these systems:
 * Parallel systems:
 -- "bevy_animation::animation_player" and "bevy_ui::flex::flex_node_system"
    conflicts: ["bevy_transform::components::transform::Transform"]
  ```

## Changelog

Resolved internal execution order ambiguities for:
1. Transform propagation (ignored, we need smarter filter checking).
2. Gamepad processing (fixed).
3. bevy_winit's window handling (fixed).
4. Cascaded shadow maps and perspectives (fixed).

Also fixed a desynchronized state bug that could occur when the `Window` component is removed and then added to the same entity in a single frame.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-Build-System Related to build systems or continuous integration A-ECS Entities, components, systems, and events A-Windowing Platform-agnostic interface layer to run your app in C-Bug An unexpected or incorrect behavior C-Examples An addition or correction to our examples C-Testing A change that impacts how we test Bevy or how users test their apps S-Ready-For-Final-Review This PR has been approved by the community. It's ready for a maintainer to consider merging it
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

8 participants