MCPcopy Index your code
hub / github.com/NativeScript/SimDeck / useLiveStream

Function useLiveStream

packages/client/src/features/stream/useLiveStream.ts:110–537  ·  view source on GitHub ↗
({
  canvasElement,
  paused = false,
  remote = false,
  simulator,
  streamConfig,
  streamConfigApplyKey = 0,
  streamTransport = "auto",
}: UseLiveStreamOptions)

Source from the content-addressed store, hash-verified

108}
109
110export function useLiveStream({
111 canvasElement,
112 paused = false,
113 remote = false,
114 simulator,
115 streamConfig,
116 streamConfigApplyKey = 0,
117 streamTransport = "auto",
118}: UseLiveStreamOptions): UseLiveStreamResult {
119 const clientTelemetryIdRef = useRef("");
120 const workerClientRef = useRef<StreamWorkerClient | null>(null);
121 const latestDecodedFramesRef = useRef(0);
122 const latestFpsRef = useRef(0);
123 const latestRenderedFramesRef = useRef(0);
124 const latestStatsRef = useRef<StreamStats>(createEmptyStreamStats());
125 const latestStatusRef = useRef<StreamStatus>({ state: "idle" });
126 const retainedFrameRef = useRef(false);
127 const previousSimulatorUdidRef = useRef<string | undefined>(simulator?.udid);
128 const connectedStreamTargetKeyRef = useRef("");
129 const canvasVisibleRef = useRef(true);
130 const latestVisualArtifactRef = useRef<VisualArtifactSample | null>(null);
131 const latestVisualArtifactSampleCountRef = useRef(0);
132 const lastVisualArtifactSampleAtRef = useRef(0);
133 const pageFpsRef = useRef(0);
134 const [deviceNaturalSize, setDeviceNaturalSize] = useState<Size | null>(null);
135 const [stats, setStats] = useState<StreamStats>(createEmptyStreamStats);
136 const [status, setStatus] = useState<StreamStatus>({ state: "idle" });
137 const [error, setError] = useState("");
138 const [fps, setFps] = useState(0);
139 const [streamCanvasRevision, setStreamCanvasRevision] = useState(0);
140 const [runtimeInfo] = useState<StreamRuntimeInfo>(detectRuntimeInfo);
141
142 if (!clientTelemetryIdRef.current) {
143 clientTelemetryIdRef.current = createClientTelemetryId();
144 }
145
146 useEffect(() => {
147 let frameCount = 0;
148 let lastSampleAt = performance.now();
149 let rafId = 0;
150
151 const tick = () => {
152 frameCount += 1;
153 const now = performance.now();
154 const elapsedMs = now - lastSampleAt;
155 if (elapsedMs >= CLIENT_TELEMETRY_INTERVAL_MS) {
156 pageFpsRef.current = (frameCount * 1000) / elapsedMs;
157 frameCount = 0;
158 lastSampleAt = now;
159 }
160
161 rafId = window.requestAnimationFrame(tick);
162 };
163
164 rafId = window.requestAnimationFrame(tick);
165 return () => {
166 window.cancelAnimationFrame(rafId);
167 };

Callers 1

AppShellFunction · 0.90

Calls 15

createEmptyStreamStatsFunction · 0.90
buildStreamTargetFunction · 0.90
createClientTelemetryIdFunction · 0.85
postTelemetryFunction · 0.85
setIntervalMethod · 0.80
maxMethod · 0.80
addEventListenerMethod · 0.80
removeEventListenerMethod · 0.80
clearIntervalMethod · 0.80
attachCanvasMethod · 0.65

Tested by

no test coverage detected