Previously, the GPUI profiler allocates one CircularBuffer per thread, and `CircularBuffer<N>` always preallocates space for N entries. As a result it allocates ~20MB/thread, and on my machine about 33 threads are created at startup for a total of 600MB used. In this PR I change it to use a VecDeque that can gradually grow up to 20MB as data is written. At least in my experiments it seems that this caps overall usage at about 21MB perhaps because only one thread writes very much usage data. Since this is fixed overhead for everyone running Zed it seems like a worthwhile gain. This also folds duplicated code across platforms into the common gpui profiler. Before: <img width="4804" height="2192" alt="Image" src="https://github.com/user-attachments/assets/7060ee5b-ef80-49cb-b7be-de33e9a2e7a5" /> After: <img width="5052" height="1858" alt="image" src="https://github.com/user-attachments/assets/513494df-0974-4604-9796-15a12ef1c134" /> I got here from #35780 but I don't think this is tree-size related, it seems to be fixed overhead. Release Notes: - Improved: Significantly less memory used to record internal profiling information. --------- Co-authored-by: MrSubidubi <finn@zed.dev> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
6 files changedLine totals unavailable