bevy/crates
Aevyrie 831ecf030c
TaskPool: Prefer task completion over executing new tasks (#18009)
# Objective

- Systems that use the task pool, either explicitly or implicitly using
parallel queries, will often end up executing tasks from different
systems.
- This can cause random tasks to block the main or render schedule at
random, adding frame variance and increasing frame times when CPU bound.
- This profile is a common occurrence on `main`.
`propagate_parent_transforms` takes more than twice as long as it
should, blocking the main schedule for that time, because it uses `task
pool.scope`, which has decided to execute tasks from the render schedule
on the main schedule.

![image](https://github.com/user-attachments/assets/c363be40-82ce-451e-ba29-3eb4ee367e0b)


## Solution

- In task pool scope execution, prefer to check if the current task is
complete instead of ticking the executor to find new work.

## Testing

- Ran the scene viewer with tracy to look for images like the one in the
objective section.
- Things look much, much better, and I could not find any occurrences: 

![image](https://github.com/user-attachments/assets/18b79394-1a7c-49c1-820a-f5207e81bbac)

![image](https://github.com/user-attachments/assets/e7d4831d-66c3-41c1-ae2c-a624724c9965)
2025-02-26 00:08:36 +00:00
..
bevy_a11y Automatically enable portable-atomic when required (#17570) 2025-02-24 20:52:46 +00:00
bevy_animation Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
bevy_app Automatically enable portable-atomic when required (#17570) 2025-02-24 20:52:46 +00:00
bevy_asset Make adding a subasset label return a result for if there is a duplicate label. (#18013) 2025-02-24 21:51:40 +00:00
bevy_audio Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
bevy_color Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
bevy_core_pipeline Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
bevy_derive Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
bevy_dev_tools Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
bevy_diagnostic Automatically enable portable-atomic when required (#17570) 2025-02-24 20:52:46 +00:00
bevy_dylib Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
bevy_ecs Deduplicate register_inherited_required_components (#16519) 2025-02-25 23:59:58 +00:00
bevy_encase_derive Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
bevy_gilrs Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
bevy_gizmos Incorporate OIT into MeshPipelineKey used by the LineGizmoPipeline (#17946) 2025-02-24 21:31:54 +00:00
bevy_gltf Load each glTF skin at most once. (#18026) 2025-02-25 01:27:29 +00:00
bevy_image Load and convert RGB8 dds textures (#12952) 2025-02-24 20:45:56 +00:00
bevy_input Automatically enable portable-atomic when required (#17570) 2025-02-24 20:52:46 +00:00
bevy_input_focus Automatically enable portable-atomic when required (#17570) 2025-02-24 20:52:46 +00:00
bevy_internal Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
bevy_log Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
bevy_macro_utils Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
bevy_math Add core Error to InvalidDirectionError (#17820) 2025-02-24 21:04:22 +00:00
bevy_mesh Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
bevy_mikktspace Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
bevy_pbr Cache opaque deferred entities so we don't have to continuously re-queue them. (#18007) 2025-02-24 21:44:24 +00:00
bevy_picking Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
bevy_platform_support Automatically enable portable-atomic when required (#17570) 2025-02-24 20:52:46 +00:00
bevy_ptr Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
bevy_reflect Automatically enable portable-atomic when required (#17570) 2025-02-24 20:52:46 +00:00
bevy_remote Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
bevy_render Cache opaque deferred entities so we don't have to continuously re-queue them. (#18007) 2025-02-24 21:44:24 +00:00
bevy_scene Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
bevy_sprite Add uv_transform to ColorMaterial (#17879) 2025-02-24 21:17:26 +00:00
bevy_state Automatically enable portable-atomic when required (#17570) 2025-02-24 20:52:46 +00:00
bevy_tasks TaskPool: Prefer task completion over executing new tasks (#18009) 2025-02-26 00:08:36 +00:00
bevy_text Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
bevy_time Automatically enable portable-atomic when required (#17570) 2025-02-24 20:52:46 +00:00
bevy_transform Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
bevy_ui Remove camera from UiBatch (#17663) 2025-02-24 20:55:30 +00:00
bevy_utils Automatically enable portable-atomic when required (#17570) 2025-02-24 20:52:46 +00:00
bevy_window Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
bevy_winit Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00