fix: enforce first-frame timeout and nav labels
This commit is contained in:
@@ -64,9 +64,9 @@ export function useSceneController(sources: SceneControllerSources): SceneContro
|
||||
|
||||
const reconcile = async (): Promise<void> => {
|
||||
if (!mounted) return;
|
||||
const allowed = sources.policy.value.allowSceneRequest && sources.quality.value !== 'static';
|
||||
const requestedQuality = sources.quality.value;
|
||||
const canvas = sources.canvas.value;
|
||||
if (!allowed) {
|
||||
if (!sources.policy.value.allowSceneRequest || requestedQuality === 'static') {
|
||||
if (sources.policy.value.reason === 'visitor-pause' && controller !== null) {
|
||||
controller.pause();
|
||||
publish();
|
||||
@@ -105,25 +105,19 @@ export function useSceneController(sources: SceneControllerSources): SceneContro
|
||||
error.value = false;
|
||||
state.value = 'loading';
|
||||
try {
|
||||
if (TEST_BUILD && isTestFault('F1-scene-chunk')) {
|
||||
recordTestFaultEvent('scene-chunk-rejected');
|
||||
throw new Error('Injected scene chunk failure');
|
||||
}
|
||||
const { createProceduralSceneGeneration } = await import('@/scene/world/environment');
|
||||
if (
|
||||
abort.signal.aborted
|
||||
|| !mounted
|
||||
|| currentGeneration !== generation
|
||||
|| !sources.policy.value.allowSceneRequest
|
||||
|| sources.quality.value === 'static'
|
||||
|| sources.canvas.value !== canvas
|
||||
) return;
|
||||
|
||||
let next!: SceneController;
|
||||
next = createSceneController({
|
||||
canvas,
|
||||
quality: sources.quality.value,
|
||||
build: createProceduralSceneGeneration,
|
||||
quality: requestedQuality,
|
||||
build: async (context) => {
|
||||
if (TEST_BUILD && isTestFault('F1-scene-chunk')) {
|
||||
recordTestFaultEvent('scene-chunk-rejected');
|
||||
throw new Error('Injected scene chunk failure');
|
||||
}
|
||||
const { createProceduralSceneGeneration } = await import('@/scene/world/environment');
|
||||
if (context.signal.aborted) throw new DOMException('Scene build aborted', 'AbortError');
|
||||
return createProceduralSceneGeneration(context);
|
||||
},
|
||||
motionAllowed: () => sources.policy.value.allowSceneRequest,
|
||||
onFrameRendered: sources.sampleFrame,
|
||||
onStateChange: (nextState) => {
|
||||
@@ -145,16 +139,6 @@ export function useSceneController(sources: SceneControllerSources): SceneContro
|
||||
const kind = next.snapshot().state.kind;
|
||||
error.value = kind === 'static';
|
||||
publish();
|
||||
if (TEST_BUILD && isTestFault('F2-first-frame-timeout')) {
|
||||
window.setTimeout(() => {
|
||||
if (controller === next && next.snapshot().state.kind === 'running') {
|
||||
recordTestFaultEvent('first-frame-deadline');
|
||||
next.setStatic('first-frame-timeout');
|
||||
error.value = true;
|
||||
publish();
|
||||
}
|
||||
}, 5_000);
|
||||
}
|
||||
} catch {
|
||||
if (!abort.signal.aborted && currentGeneration === generation) {
|
||||
error.value = true;
|
||||
|
||||
Reference in New Issue
Block a user