Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion deps/cloudxr/.env.default
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
# CloudXR Docker Images and Configs
###########################################################
CXR_RUNTIME_SDK_VERSION=6.4.0
CXR_WEB_SDK_VERSION=6.3.0
CXR_WEB_SDK_VERSION=6.4.1-isaaccapture
Comment thread
gareth-morgan-nv marked this conversation as resolved.
CXR_HOST_VOLUME_PATH=$HOME/.cloudxr

###########################################################
Expand Down
32 changes: 16 additions & 16 deletions deps/cloudxr/webxr_client/helpers/react/CloudXRComponent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -74,23 +74,23 @@ const WARMUP_COMPLETE_LOG_PATTERN =
// override via the streamAttachTimeoutMs prop, not by lowering this default.
const STREAM_ATTACH_BASE_TIMEOUT_MS = 120000; // 2 minutes

// Debug log for each keep-alive "idle" frame the server sends while no OpenXR app is submitting
// frames. Not currently emitted by CloudXR.js: until a release that emits it is consumed, and the
// session logLevel includes Debug, none of the idle-frame handling below runs.
// Info log for each keep-alive "idle" frame the server sends while no OpenXR app is submitting
// frames. Emitted by CloudXR.js 6.4.1-isaaccapture and later; with an older SDK none of the
// idle-frame handling below runs.
const IDLE_FRAME_LOG_MESSAGE = 'Received idle frame';
// Idle frames are sent about every 250 ms; this long with none means real frames have started
// (or the stream stalled), so the warm-up watchdogs resume.
const IDLE_FRAMES_QUIET_MS = 1000;

// Defaults for the warmupBeginTimeoutMs/warmupEndTimeoutMs props below. 0 disables warm-up
// detection: a CloudXR runtime with no OpenXR app streams idle frames that count as warm-up
// frames, so a fixed deadline can tear down a healthy session that is only waiting for an app.
// Callers that want detection (e.g. tests) set the props. Neither deadline grows per reconnect
// attempt (see armWarmupBeginTimer/armWarmupEndTimer). Split into two because "no warm-up signal
// at all since attaching" and "warm-up started but never finishes" are different failure modes
// worth distinguishing in the synthetic error message.
const WARMUP_BEGIN_BASE_TIMEOUT_MS = 0; // disabled; first warm-up log since onStreamStarted
const WARMUP_END_BASE_TIMEOUT_MS = 0; // disabled; completion since warm-up began
// Defaults for the warmupBeginTimeoutMs/warmupEndTimeoutMs props below. Both shorter than
// STREAM_ATTACH_BASE_TIMEOUT_MS and, unlike it, neither grows per reconnect attempt (see
// armWarmupBeginTimer/armWarmupEndTimer): once the stream has attached at all, decoder warm-up
// is a fast, bounded startup step (server encoder priming), not something that legitimately
// takes longer on a slow network the way the initial attach can. Split into two deadlines
// because "no warm-up signal at all since attaching" and "warm-up started but never finishes"
// are different failure modes worth distinguishing in the synthetic error message.
const WARMUP_BEGIN_BASE_TIMEOUT_MS = 10000; // 10 seconds - first warm-up log since onStreamStarted
const WARMUP_END_BASE_TIMEOUT_MS = 30000; // 30 seconds - completion since warm-up began

// setTimeout's delay is stored as a 32-bit signed int internally; a value above this overflows
// and fires (almost) immediately instead of waiting - the opposite of what a long configured
Expand All @@ -115,7 +115,7 @@ export interface WarmupStatus {

/**
* Server keep-alive ("idle") frame status for the current connection attempt, derived from the
* SDK's 'Received idle frame' debug log (see IDLE_FRAME_LOG_MESSAGE). Idle frames mean the server
* SDK's 'Received idle frame' log (see IDLE_FRAME_LOG_MESSAGE). Idle frames mean the server
* is alive but no OpenXR app is submitting frames. Reset at the start of each connection attempt.
*/
export interface IdleStatus {
Expand Down Expand Up @@ -189,7 +189,7 @@ interface CloudXRComponentProps {
* message. Like warmupEndTimeoutMs, does NOT grow per reconnect attempt - warm-up is a fast,
* bounded server-side priming step once the stream has attached at all, not something that
* legitimately takes longer under retry the way the initial attach can. Defaults to
* WARMUP_BEGIN_BASE_TIMEOUT_MS (0, disabled). A value <= 0 disables this detection, as does
* WARMUP_BEGIN_BASE_TIMEOUT_MS (10 seconds). A value <= 0 disables this detection, as does
* warmupEndTimeoutMs <= 0.
*/
warmupBeginTimeoutMs?: number;
Expand All @@ -200,7 +200,7 @@ interface CloudXRComponentProps {
* the first warm-up log arrives and cleared by WARMUP_COMPLETE_LOG_PATTERN). See
* warmupBeginTimeoutMs's doc comment for why this is a separate deadline. Does NOT grow per
* reconnect attempt, for the same reason warmupBeginTimeoutMs doesn't. Defaults to
* WARMUP_END_BASE_TIMEOUT_MS (0, disabled). A value <= 0 disables this detection and
* WARMUP_END_BASE_TIMEOUT_MS (30 seconds). A value <= 0 disables this detection and
* warmupBeginTimeoutMs too (all warm-up detection); stream-attach detection is unaffected.
*/
warmupEndTimeoutMs?: number;
Expand Down Expand Up @@ -749,7 +749,7 @@ export default function CloudXRComponent({
telemetry: {
enabled: true,
appInfo: {
version: '6.3.0',
version: '6.4.1-isaaccapture',
product: applicationName,
},
},
Expand Down
4 changes: 2 additions & 2 deletions deps/cloudxr/webxr_client/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cloudxr-isaac-lab-teleop",
"version": "6.3.0",
"version": "6.4.1-isaaccapture",
"private": true,
"description": "NVIDIA Isaac Teleop Web Client",
"author": "NVIDIA Corporation",
Expand Down Expand Up @@ -54,7 +54,7 @@
]
},
"dependencies": {
"@nvidia/cloudxr": "file:../nvidia-cloudxr-6.3.0.tgz",
"@nvidia/cloudxr": "file:../nvidia-cloudxr-6.4.1-isaaccapture.tgz",
"@preact/signals-react": "^3.10.0",
"@react-three/drei": "^10.7.7",
"@react-three/fiber": "^9.6.0",
Expand Down
4 changes: 2 additions & 2 deletions deps/cloudxr/webxr_client/src/CloudXR2DUI.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -599,8 +599,8 @@ export class CloudXR2DUI {
reconnectMaxAttempts: 3,
reconnectDelayMs: 3000,
streamAttachTimeoutMs: 120000,
warmupBeginTimeoutMs: 0,
warmupEndTimeoutMs: 0,
warmupBeginTimeoutMs: 10000,
warmupEndTimeoutMs: 30000,
teleopPath: DEFAULT_TELEOP_PATH,
};
}
Expand Down
8 changes: 4 additions & 4 deletions deps/cloudxr/webxr_client/src/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -1570,7 +1570,7 @@ <h4 class="advanced-divider">Advanced settings</h4>

<div class="config-section">
<label for="cloudxrWarmupBeginTimeoutMs" class="input-label"
>Warm-up Begin Timeout (ms, default: 0 / disabled)</label
>Warm-up Begin Timeout (ms, default: 10000 / 10 seconds)</label
>
<input
id="cloudxrWarmupBeginTimeoutMs"
Expand All @@ -1580,7 +1580,7 @@ <h4 class="advanced-divider">Advanced settings</h4>
step="1000"
placeholder="Warm-up begin timeout in ms"
spellcheck="false"
value="0"
value="10000"
/>
<div class="config-text">
How long to wait, after the stream attaches, for the first sign that decoder
Expand All @@ -1592,7 +1592,7 @@ <h4 class="advanced-divider">Advanced settings</h4>

<div class="config-section">
<label for="cloudxrWarmupEndTimeoutMs" class="input-label"
>Warm-up End Timeout (ms, default: 0 / disabled)</label
>Warm-up End Timeout (ms, default: 30000 / 30 seconds)</label
>
<input
id="cloudxrWarmupEndTimeoutMs"
Expand All @@ -1602,7 +1602,7 @@ <h4 class="advanced-divider">Advanced settings</h4>
step="1000"
placeholder="Warm-up end timeout in ms"
spellcheck="false"
value="0"
value="30000"
/>
<div class="config-text">
How long to wait for decoder warm-up to finish once it has begun before treating
Expand Down
4 changes: 4 additions & 0 deletions deps/cloudxr/webxr_client/tests/mock/MockCloudXR.ts
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,10 @@ export class MockCloudXR implements CloudXR.Session {
throw new Error('MockCloudXR does not support sendServerMessage(); use a real session');
}

getDeveloperSettings(): CloudXR.DeveloperSettings {
throw new Error('MockCloudXR does not support getDeveloperSettings(); use a real session');
}

setMicEnabled(enabled: boolean): boolean {
if (this.sessionState !== CloudXR.SessionState.Connected) {
return false;
Expand Down
12 changes: 10 additions & 2 deletions deps/cloudxr/webxr_client/webpack.common.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,16 @@ try {
} catch {}
// Source of truth for the CloudXR SDK is deps/cloudxr/.env.default's
// CXR_WEB_SDK_VERSION (also controls which tarball `npm install`
// consumes); package.json.version is just a local-dev fallback.
const CLIENT_SDK_VERSION = process.env.SDK_VERSION || require('./package.json').version;
// consumes). Local builds that don't set SDK_VERSION report the installed SDK's own version;
// this package's version is not the SDK's.
function installedSdkVersion() {
try {
return require('@nvidia/cloudxr/package.json').version;
} catch {
return 'unknown';
}
}
const CLIENT_SDK_VERSION = process.env.SDK_VERSION || installedSdkVersion();
const CLIENT_GIT_REF =
process.env.CLIENT_GIT_REF || git('rev-parse --abbrev-ref HEAD') || 'unknown';
const CLIENT_GIT_SHA = (process.env.CLIENT_GIT_SHA || git('rev-parse HEAD') || 'unknown').slice(
Expand Down
Loading