Analytics: Break Down Your Client CPU Time By Category

Hi Creators,

Today, we’re launching the Client CPU time chart on the Performance page of Creator Analytics. Now, you can see where your CPU time is going on your players’ devices so you can pinpoint what’s making frames expensive and fix it faster.

What’s New

Client CPU time is the average time (in milliseconds) your game spends doing work on the client each frame. When this number increases, players feel it as lower frame rates, hitches, and stutters. Rendering and CPU load both impact client frame rates, so it’s important to keep CPU load low. Even with efficient rendering, 60 fps is only possible if your total CPU time is below 16ms.

You’ll find a Category dropdown on the Client CPU time chart. It works at two levels:

General Categories

With Total selected, the chart stacks the five top-level categories so you can see their relative cost at a glance:

  • Scripts: Your Luau code running each frame (RunService events, garbage collection, and so on)
  • Networking: Replication, packet processing, and bandwidth work
  • Physics: The simulation step, assemblies, and networked physics
  • Animation: Animation, humanoid, and IK stepping
  • Miscellaneous: UI layout, TweenService, navigation, and other engine work

Sub-Categories

Select a single category (for example, Scripts) from the dropdown to drill into its sub-categories.

Like the rest of the Performance page, the chart shows the minute-by-minute average over your selected period, and you can filter and break down by platform, operating system and memory group.

How to Use This to Improve Your Game

  1. Notice the symptom: You ship your update. A few hours later, you see your client frame rate dip and your client CPU time climb. In this example, the average jumps from to ~26 ms per frame.

  1. Find the category: The stacked view makes it obvious that the increase isn’t spread evenly. The Scripts band covers most of the increase in time, while others stay flat. Switch the Category dropdown to Scripts. You see that one band dominates the spike: RunService.Heartbeat roughly triples after the update.

  1. Take action: You go to Studio, open the MicroProfiler, and look for scripts taking up a lot of time during Heartbeat updates each frame. You discover that the new enemy system you added is running an expensive pathfinding calculation every frame instead of every few seconds. You add a throttle and redeploy.

  2. Confirm the fix: After you redeploy, the Scripts band settles back down and your total Client CPU time returns to baseline. Create alerts to get notified when CPU times spikes again.

What’s Next

CPU time data is available starting from June 17, 2026 and it’s sampled from your clients so you might see spikes. We will increase data sampling in the next 2 weeks and you will see your graphs smoothing out. We’re also working on adding client memory categories next. Please let us know if you have any questions or feedback!

100 Likes

This topic was automatically opened after 10 minutes.

Very nice. Keep it up with these updates regarding developers abilities to see performance issues more clearly!

6 Likes

any plans on breaking down client script activity by module?

Nowadays it is rare for people to be using individual localscripts for all their different systems, instead opting for a single loader, meaning everything is bundled into that one loader script rather than showing individual usage.

this makes it harder to work on client CPU reduction

27 Likes

yes this would be great pls roblox thanks!

3 Likes

you should add a GPU time aswell

11 Likes

Yesssss, I need that for yesterday!!!

3 Likes

this is really great for debugging, one thing i’m really interested in though is an api for MCPs and the assistant to access the current studio experience’s analytics, because the biggest problem with majority of these perf analytics is that people that need them don’t understand them

4 Likes

If that ever becomes the case, then assistant usage would definitely go up !! Would be the only use case for some..

2 Likes

по моему сильно не хватает статистики котороя показывает какая видео карта и процесор стоит у игрока как в стиме это сделали

4 Likes

This is great! This is something we needed for a very long time to help debug client performance!

3 Likes

When using ‘explore’ on these the category dropdown goes missing? Only shows in the overview of all the other charts.

1 Like

You can use the filter by menu to pick the category and then apply breakdown by subcategory option.

1 Like

My concern is less about the feature request and more about normalizing the statement that a single loader is “how people develop nowadays.”

That describes one architectural preference, not a requirement or best practice. Plenty of performant projects don’t centralize execution behind a single bootstrapper.

I’d support module-level profiling because it benefits all architectures, not because I think loader-based architectures should become the expected default.