bevy/crates
James Liu 11c544c29a Remove redundant table and sparse set component IDs from Archetype (#4927)
# Objective
Archetype is a deceptively large type in memory. It stores metadata about which components are in which storage in multiple locations, which is only used when creating new Archetypes while moving entities.

## Solution
Remove the redundant `Box<[ComponentId]>`s and iterate over the sparse set of component metadata instead. Reduces Archetype's size by 4 usizes (32 bytes on 64-bit systems), as well as the additional allocations for holding these slices.

It'd seem like there's a downside that the origin archetype has it's component metadata iterated over twice when creating a new archetype, but this change also removes the extra `Vec<ArchetypeComponentId>` allocations when creating a new archetype which may amortize out to a net gain here. This change likely negatively impacts creating new archetypes with a large number of components, but that's a cost mitigated by the fact that these archetypal relationships are cached in Edges and is incurred only once for each edge created.

## Additional Context
There are several other in-flight PRs that shrink Archetype:

 - #4800 merges the entities and rows Vecs together (shaves off 24 bytes per archetype) 
 - #4809 removes unique_components and moves it to it's own dedicated storage (shaves off 72 bytes per archetype)

---

## Changelog
Changed: `Archetype::table_components` and `Archetype::sparse_set_components` return iterators instead of slices. `Archetype::new` requires iterators instead of parallel slices/vecs.

## Migration Guide
Do I still need to do this? I really hope people were not relying on the public facing APIs changed here.
2022-11-15 21:39:21 +00:00
..
bevy_animation Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_app Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_asset Derive clone and debug for AssetPlugin (#6583) 2022-11-14 23:08:26 +00:00
bevy_audio Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_core Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_core_pipeline Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_derive Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_diagnostic Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_dylib Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_dynamic_plugin Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_ecs Remove redundant table and sparse set component IDs from Archetype (#4927) 2022-11-15 21:39:21 +00:00
bevy_ecs_compile_fail_tests Fix trybuild tests broken by rust 1.65 (#6457) 2022-11-03 15:09:27 +00:00
bevy_encase_derive Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_gilrs Bump gilrs version to 0.10 (#6558) 2022-11-15 20:31:17 +00:00
bevy_gltf Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_hierarchy bevy_scene: Add missing registration for SmallVec<[Entity; 8]> (#6578) 2022-11-14 23:08:23 +00:00
bevy_input Correct docs for ButtonSettingsError to read 0.0..=1.0 (#6570) 2022-11-12 22:59:49 +00:00
bevy_internal add span to winit event handler (#6612) 2022-11-14 23:08:31 +00:00
bevy_log Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_macro_utils Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_math Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_mikktspace Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_pbr Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_ptr Add safe constructors for untyped pointers Ptr and PtrMut (#6539) 2022-11-14 22:53:50 +00:00
bevy_reflect Add safe constructors for untyped pointers Ptr and PtrMut (#6539) 2022-11-14 22:53:50 +00:00
bevy_render Shrink ComputedVisibility (#6305) 2022-11-14 23:34:52 +00:00
bevy_scene [Fixes #6030] Bevy scene optional serde (#6076) 2022-11-14 23:08:22 +00:00
bevy_sprite Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_tasks Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_text Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_time Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_transform Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_ui Make function Size::new const for bevy_ui widgets (#6602) 2022-11-14 23:08:29 +00:00
bevy_utils Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_window Make WindowId::primary() const (#6582) 2022-11-14 23:08:24 +00:00
bevy_winit add span to winit event handler (#6612) 2022-11-14 23:08:31 +00:00