Urgent.News

What's breaking now, across thousands of outlets.

Tech

Profiling VR Performance on Target Hardware: Measure Before You Optimize

To find out why a VR build drops frames, measure it on the target headset first, work out whether you are missing the frame budget at all, then classify the bottleneck as CPU, GPU, memory or thermal before changing anything. Change one thing at a time, re-measure, and finish by turning the result into a regression check. This article walks through that workflow. Its examples come from Meta Quest…

To troubleshoot a VR build that drops frames, measure its performance on the target headset first. Identify whether the bottleneck is CPU, GPU, memory or thermal before making any changes. Implement changes one at a time, re-measure and create a regression check. This workflow is based on Meta Quest documentation due to its extensive tooling guidance.

The method is applicable to any standalone headset, but the numbers may vary depending on the specific device. VR is more demanding than flat-screen apps. Missing a frame in a VR app can disrupt immersion and cause discomfort, so platforms impose strict requirements. On Quest, Meta's store mandates a rendering rate of at least 60 fps and an allowed refresh rate ranging from 72 to 120 Hz, with some rates unavailable on certain devices.

The refresh rate determines your per-frame time budget, which ranges from 13.9 ms at 72 Hz to 8.3 ms at 120 Hz. Two key points to note are that Meta advises requesting a higher refresh rate only if the app can sustain it, and that a smooth 72 Hz is preferable to a 90 Hz experience with inconsistent frame drops. Additionally, a scene that passes a thirty-second test may fail during a 20-minute session.

Standalone Quest headsets have limited thermal and memory resources, whereas tethered setups depend on the PC's hardware and the connection to the headset. Always profile the build on the actual hardware, not the editor, as editor numbers won't translate to the device. Establish a consistent measurement protocol that includes profiling a development build, using a repeatable scenario, running long enough to cover thermal behavior, capturing both cold starts and sustained sessions, and reporting percentiles and worst cases rather than just averages.

Meta's Performance Analyzer and Perfetto tooling provide the necessary metrics. Start by checking if you're missing the budget. Calculate your refresh rate budget, then capture frame times and analyze the pattern. Consistent overruns typically indicate steady-state costs such as excessive geometry or expensive shaders, while isolated spikes suggest hitches like garbage collection, streaming, or loading.

CPU-bound or GPU-bound? Determine this before taking any action, as the remedies differ. If performance hardly changes when rendering nothing, the app is likely CPU-bound; if it improves significantly, it's likely GPU-bound. Meta's Showdown write-up explains that a high CPU level with low GPU utilization points to a CPU-bound app, while maxed GPU utilization at 100% indicates a GPU-bound app.

A caveat from Meta's guide is that the render-nothing test includes some CPU-side work as vertex-bound work, so treat the result as a strong hint rather than a definitive answer. If CPU-bound, identify whether the main thread or the render thread is the bottleneck. Common causes include scripts and physics on the main thread, animation cost, and the cost of submitting draw calls on the render thread.

Use traces to confirm these hypotheses. If GPU-bound, distinguish between vertex-heavy and fragment-heavy problems. Simplify complex geometry and reduce draw calls to address vertex-bound issues, while focusing on shading cost, overdraw, and render resolution for fragment-bound problems. Lastly, monitor memory and thermal states.

Even with good frame times, a build nearing memory limits or overheating over a prolonged session may fail later. Verify peak memory against the device's limit and repeat the capture to ensure stability.

Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.

Read the original at dev.to →

More in Tech

A Repeatable Map to 3D Pipeline for Site Context (and Where Each Tool Fits)

I needed site context for a 220 acre warehouse district study, and I wanted a pipeline I could rerun on the next site without relearning five interfaces.

  • Five-step pipeline developed for repeatable site context creation
  • Each tool in pipeline has specific role, none produces final model
  • Initial steps should be done cheaply and thoroughly checked

Building a Document Pipeline for Visa Applications: Lessons from Handling Certified Translations Programmatically

Most engineers never think about document workflows until they (or a teammate on a relocation package) have to deal with one personally.

  • Treat visa application process as engineering problem, not checklist
  • Model document state machine with states: REQUESTED, ISSUED, APOSTILLEPENDING, etc.
  • Include fields like doctype, applicantid, sourcelang, targetlang in minimal schema

Your API Works. But Is It Actually Reliable?

Building a REST API is easy. Building one that handles things going wrong? That's where it gets interesting. When I first started working with APIs, I mostly cared about one thing: Does the endpoint…

  • Utilize appropriate HTTP status codes for clear communication
  • Validate user input to prevent database corruption
  • Implement custom error handling to maintain API stability

More from Monday 2 November →