Finding Performance Hotspots with SimplePerf on Meta Quest

Brian McNameeBlog Hero Image
We’ve found that SimplePerf, a powerful native CPU profiler, is useful for optimizing VR app performance. SimplePerf is the Android implementation of Linux’s Perf tool, and it’s available today on Meta Quest devices.
Unlike the other commonly-used Android profiler Perfetto, SimplePerf doesn’t require source code modifications and can be used to profile any debuggable app. This makes it easier to discover performance hotspots in your app, as it allows you to inspect the performance of your whole app without needing to insert markers throughout your source code.

How It Works

SimplePerf is a sampling profiler, which means you give it a set of events to record and a frequency in which to write out “samples” of them. At each interval, your app will be interrupted and a sample will be recorded with the location in the source code it occurred. SimplePerf uses symbols from your app to associate samples with source code. There are many types of software and hardware events that you can record.
By default, SimplePerf records the “cpu-cycles” event. This is useful for determining the amount of time it takes to execute parts of your app by counting all elapsed CPU cycles. Recording with this event should expose the longest and most frequently called functions in your app. The longer running a function is, the more likely it will be interrupted by a sample. You may find that the “cpu-cycles” event is enough for most investigations, but there are other events that you can use in conjunction with it that may help determine the cause of slow code. The “cache-misses” event counts CPU data cache misses. The more cache misses incurred by a function, the more likely it will show up in a report. Other similar counter events like “instructions” and “page-faults” can be recorded to correlate slow functions with those specific events.

SimplePerf Use Cases

SimplePerf isn’t best suited for all performance investigations. For example, SimplePerf won’t easily be able to help you find the cause of frame spikes because it isn’t good at revealing code that’s occasionally slow. All SimplePerf can do is report back the amount of samples it recorded for a given function, so if you have a function “foo” that executes 1,000 times and is slow only one of those times, all SimplePerf can tell you is that it recorded N samples for calls to foo. In situations like this, a tracing profiler like Perfetto will be more useful.
There’s also a chance that some functions may not appear in a report because they occur between samples. You can increase the likelihood of sampling fast functions by increasing the frequency of samples, but increasing the samples also increases the overhead incurred by your app. You may need to tweak the frequency for each event to achieve a good balance between overhead and accuracy.
SimplePerf is a great way to get a broad view of the performance of your app without needing to mark up your code first. The ability to sample a variety of hardware and software events not only makes it easier to find where your app is slow, but also why. You can learn more about using SimplePerf on Meta Quest by reading our documentation.
Optimization
Perfetto
Quest
Did you find this page helpful?
Explore more
GDC 2026 Highlights: What's Next on Meta Horizon OS
Catch up on GDC 2026: where VR is headed, what's new in Meta Horizon OS, and the tools and Store updates helping developers ship faster.
All, Apps, Design, GDC, Games, Quest, Unity, Unreal
The State of VR at GDC 2026: Building a Sustainable Future
Explore the state of VR from GDC 2026: stronger app discovery, growing Meta Quest usage, more $1M+ titles, and much more.
All, Design, Games, Hand tracking, Optimization, Quest, Unity, Unreal
Faster Builds, Smarter Discovery, and the LiveOps Playbook: What to Know After GDC Day 2
Explore Day 2 at GDC 2026: tools to speed up builds, optimize Store discovery, and learn LiveOps strategies from Gorilla Tag.
All, Apps, Design, GDC, Games, Optimization, Quest, Unity, Unreal

Get the latest updates from Meta Horizon.

Get access to highlights and announcements delivered to your inbox.