Skip to content

Cache cateogires set operation results - #7280

Open
speed2CZ wants to merge 2 commits into
FAForever:developfrom
speed2CZ:cache/categories
Open

Cache cateogires set operation results#7280
speed2CZ wants to merge 2 commits into
FAForever:developfrom
speed2CZ:cache/categories

Conversation

@speed2CZ

@speed2CZ speed2CZ commented Sep 4, 2026

Copy link
Copy Markdown
Member

Description of the proposed changes

The global categories table for entity categories allow set operations using add, sub, mul metamethods

By default each operation returns a new object with the result, so that:
categories.LAND * categories.MOBILE ~= categories.LAND * categories.MOBILE

We can hook those meta methods and cache the results, significantly reducing object de/allocations.

Testing done on the proposed changes

1h long mission test resuls:

  • total lookups: 915 724
  • hits: 907 963
  • misses: 7 761
    99.15% hitrate
    Average cache size ~195 entries

The test also indicated that the inner table of the cache should be pre-allocated with 4-hash size which will cover ~95% cases, significantly reducing the need of cache tables resizing.

Additional context

Ive checked if its worth caching on the UI and its probably not. UI Lua doesnt operate with categories nearly as much, with usually only few, if any, operations per tick. Also there were more misses than hits, nothing even comparable to the sim results.

Our code is already pre-computing the categories sets only once and storing them in local variables in a lot of places. This change improves the situation with the cases where it's not yet covered or where the sets are dynamic. (and also all the unoptimized mods)

Checklist

@speed2CZ
speed2CZ requested review from 4z0t, BlackYps and lL1l1 September 4, 2026 14:24
@speed2CZ speed2CZ added area: code style code refactoring area: sim Area that is affected by the Simulation of the Game labels Sep 4, 2026
@coderabbitai

coderabbitai Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

Next included review available in 39 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 2 included reviews currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Team

Run ID: 06f7c187-4e8c-44fe-86d0-cc2eb3073dbf

📥 Commits

Reviewing files that changed from the base of the PR and between b81d120 and 7569587.

📒 Files selected for processing (3)
  • changelog/snippets/other.7280.md
  • lua/simInit.lua
  • lua/system/categories.lua

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: code style code refactoring area: sim Area that is affected by the Simulation of the Game

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant