Enable smooth CloudXR.js pacing - #6865
Conversation
Signed-off-by: Hougant Chen <hougantc@nvidia.com>
Greptile SummaryThe PR changes the CloudXR.js environment profile to use pose-synchronized conservative pacing while retaining uncapped rendering.
Confidence Score: 4/5The PR appears safe to merge, with a non-blocking documentation update needed so users can accurately understand the new CloudXR.js pacing behavior. The environment changes are internally consistent with the stated pacing goal, while the existing profile table and pose-wait explanation no longer match the shipped CloudXR.js configuration. Files Needing Attention: source/isaaclab_teleop/isaaclab_teleop/cloudxrjs-cloudxr.env and source/isaaclab_teleop/docs/isaac_teleop.rst Important Files Changed
Reviews (1): Last reviewed commit: "Enable smooth CloudXR.js pacing" | Re-trigger Greptile |
| NV_ENABLE_POSE_WAIT=1 | ||
| NV_ENABLE_CONSERVATIVE_PACING=1 | ||
| NV_SKIP_FRAME_ON_SPIKE=0 |
There was a problem hiding this comment.
CloudXR.js profile docs are stale
The profile now enables pose waiting and adds two pacing controls, but the existing configuration table and explanation still describe pose waiting as disabled for every profile. This leaves users with obsolete guidance when interpreting or troubleshooting the new pacing behavior.
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
There was a problem hiding this comment.
Isaac Lab Review Bot
The CloudXR.js profile now enables pose waiting and conservative pacing while disabling spike-based frame skipping. The configuration change is coherent, but the touched isaaclab_teleop package is missing its required changelog fragment.
- Design and architecture: This is a configuration-only change to the shipped CloudXR.js runtime profile, with no new dependencies or changes to module boundaries. The three pacing flags form a consistent profile-level behavior change.
- API: No Python API, exports, or CLI surfaces change. However, the packaged environment profile changes user-visible runtime behavior for CloudXR.js users and therefore must be recorded in the package changelog.
- Implementation: The added variables follow the existing
NV_*andKEY=VALUEconventions. Before merge, add a patch changelog fragment undersource/isaaclab_teleop/changelog.d/with aFixedentry describing the pacing correction, as required for every touched package.
Minor fixes needed. Posted 1 actionable finding inline.
Automated review; human maintainers own approval decisions.
| NV_DEVICE_PROFILE=auto-webrtc | ||
| NV_CXR_ENABLE_PUSH_DEVICES=0 | ||
| NV_ENABLE_POSE_WAIT=0 | ||
| NV_ENABLE_POSE_WAIT=1 |
There was a problem hiding this comment.
🟡 Warning · Implementation — Missing changelog fragment for isaaclab_teleop
Repository policy requires one changelog fragment per touched package under source/<pkg>/changelog.d/. This PR changes user-visible CloudXR.js runtime pacing behavior in isaaclab_teleop but adds no fragment, so the nightly changelog compilation and patch bump will omit it. Add source/isaaclab_teleop/changelog.d/<slug>.rst with a Fixed entry describing the pacing change; .skip is reserved for CI/docs/test-only changes.
Description
Enables pose-synchronized conservative pacing for the CloudXR.js profile.
The existing profile explicitly disables pose waiting. With a faster simulation thread, this can produce uneven server-frame cadence that appears as judder in the headset. This change enables pose waiting and conservative pacing while disabling frame skipping after isolated timing spikes.
The profile remains uncapped and inherits the CloudXR runtime defaults for scheduling wait, the p80 pacing percentile, and the 20 ms maximum pose-wait duration. No new dependencies are required.
Interactive testing with a 90 Hz headset felt materially smoother than the existing profile and a fixed-45-FPS configuration.
Type of change
Testing
env_isaaclab/bin/python -m pytest source/isaaclab_teleop/test/test_cloudxr_lifecycle.py— 22 passed.pre-commit run --files source/isaaclab_teleop/isaaclab_teleop/cloudxrjs-cloudxr.env— passed.Screenshots
Not applicable.
Checklist
source/<pkg>/changelog.d/CONTRIBUTORS.md