Skip to content

Fix per-node memory regression caused by Grid styles - #2018

Open
intergalacticspacehighway wants to merge 2 commits into
react:mainfrom
intergalacticspacehighway:grid-style-size
Open

Fix per-node memory regression caused by Grid styles#2018
intergalacticspacehighway wants to merge 2 commits into
react:mainfrom
intergalacticspacehighway:grid-style-size

Conversation

@intergalacticspacehighway

@intergalacticspacehighway intergalacticspacehighway commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Why

Currently, grid style properties are stored in yoga style (gridTemplateRows_, gridAutoColumns_ etc). These properties increase the size of style object from 152 bytes to 280 bytes (84% increase). The cost is added even when a node is not a grid container or a grid item.

How

Move grid style properties behind a pointer that is lazily allocated, on the first grid property set. A node that doesn't use grid only adds the cost of this pointer (8 bytes). So style now costs 160 bytes (5% increase). The public API remains unchanged.

Tests

A test is added to catch the style size regression and tests/GridStyleTest.cpp includes additional cases to assert unset style, copy and move behaviour.

@meta-cla meta-cla Bot added the CLA Signed label Sep 2, 2026
Style is held by value in every node. An empty std::vector still costs its
three pointers, so the four grid track lists take 96 bytes even on a node
with no tracks. Grid style now sits behind one pointer which stays null
until a grid property is set.

sizeof(Style): 280 -> 160.
@intergalacticspacehighway
intergalacticspacehighway marked this pull request as ready for review September 2, 2026 03:47
@facebook-github-tools facebook-github-tools Bot added the Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team. label Sep 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant