Skip to content

Enable smooth CloudXR.js pacing - #6865

Open
hougantc-nvda wants to merge 1 commit into
isaac-sim:developfrom
hougantc-nvda:agent/cloudxr-js-pacing
Open

Enable smooth CloudXR.js pacing#6865
hougantc-nvda wants to merge 1 commit into
isaac-sim:developfrom
hougantc-nvda:agent/cloudxr-js-pacing

Conversation

@hougantc-nvda

@hougantc-nvda hougantc-nvda commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

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

  • Bug fix (non-breaking change which fixes an issue)

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.
  • Interactive CloudXR.js headset test at 90 Hz — smoother than the existing and fixed-45-FPS profiles.

Screenshots

Not applicable.

Checklist

  • I have read and understood the contribution guidelines
  • I have run the pre-commit checks on the changed file
  • Documentation changes are not applicable to this environment-only fix
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective
  • I have added a changelog fragment under source/<pkg>/changelog.d/
  • My name already exists in CONTRIBUTORS.md

Signed-off-by: Hougant Chen <hougantc@nvidia.com>
@github-actions github-actions Bot added the isaac-lab Related to Isaac Lab team label Aug 3, 2026
@hougantc-nvda
hougantc-nvda marked this pull request as ready for review August 3, 2026 22:38
@hougantc-nvda
hougantc-nvda requested a review from a team August 3, 2026 22:38
@greptile-apps

greptile-apps Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

The PR changes the CloudXR.js environment profile to use pose-synchronized conservative pacing while retaining uncapped rendering.

  • Enables pose waiting for the CloudXR.js profile.
  • Enables conservative pacing.
  • Disables frame skipping after isolated timing spikes.

Confidence Score: 4/5

The 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

Filename Overview
source/isaaclab_teleop/isaaclab_teleop/cloudxrjs-cloudxr.env Updates three CloudXR pacing controls as intended, but leaves the documented profile settings and behavior obsolete.

Reviews (1): Last reviewed commit: "Enable smooth CloudXR.js pacing" | Re-trigger Greptile

Comment on lines +3 to +5
NV_ENABLE_POSE_WAIT=1
NV_ENABLE_CONSERVATIVE_PACING=1
NV_SKIP_FRAME_ON_SPIKE=0

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 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!

@isaaclab-review-bot isaaclab-review-bot Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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_* and KEY=VALUE conventions. Before merge, add a patch changelog fragment under source/isaaclab_teleop/changelog.d/ with a Fixed entry 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

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

isaac-lab Related to Isaac Lab team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant