pascal-maker's picture
Upload folder using huggingface_hub
92189dd verified
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {EnableStatsRequest} from '@/common/components/video/VideoWorkerTypes';
import stylex from '@stylexjs/stylex';
import {useEffect, useMemo, useRef, useState} from 'react';
import {useLocation} from 'react-router-dom';
import useVideo from '../../common/components/video/editor/useVideo';
import {
GetMemoryStatsRequest,
GetStatsCanvasRequest,
MemoryStatsResponse,
SetStatsCanvasResponse,
} from './Stats';
const styles = stylex.create({
container: {
position: 'fixed',
top: 0,
left: 0,
width: '100%',
overflowX: 'auto',
display: 'flex',
flexDirection: 'row',
cursor: 'pointer',
opacity: 0.9,
zIndex: 10000,
},
});
const URL_PARAM = 'monitors';
export default function StatsView() {
const {search} = useLocation();
const video = useVideo();
const containerRef = useRef<HTMLDivElement | null>(null);
const [isWrapped, setIsWrapped] = useState<boolean>(false);
const isEnabled = useMemo(() => {
const urlSearchParams = new URLSearchParams(search);
return (
urlSearchParams.has(URL_PARAM) &&
['true', ''].includes(urlSearchParams.get('monitors') ?? '')
);
}, [search]);
useEffect(() => {
if (!isEnabled) {
return;
}
const worker = video?.getWorker_ONLY_USE_WITH_CAUTION();
// Enable stats for video worker
worker?.postMessage({
action: 'enableStats',
} as EnableStatsRequest);
function onMessage(
event: MessageEvent<GetStatsCanvasRequest | GetMemoryStatsRequest>,
) {
if (event.data.action === 'getStatsCanvas') {
// Add stats canvas and hand control over to worker
const canvas = document.createElement('canvas');
canvas.width = event.data.width * window.devicePixelRatio;
canvas.height = event.data.height * window.devicePixelRatio;
canvas.style.width = `${event.data.width}px`;
canvas.style.height = `${event.data.height}px`;
containerRef.current?.appendChild(canvas);
const offscreenCanvas = canvas.transferControlToOffscreen();
worker?.postMessage(
{
action: 'setStatsCanvas',
id: event.data.id,
canvas: offscreenCanvas,
devicePixelRatio: window.devicePixelRatio,
} as SetStatsCanvasResponse,
{
transfer: [offscreenCanvas],
},
);
} else if (event.data.action === 'getMemoryStats') {
// @ts-expect-error performance.memory might not exist
const memory = performance.memory ?? {
jsHeapSizeLimit: 0,
totalJSHeapSize: 0,
usedJSHeapSize: 0,
};
worker?.postMessage({
action: 'memoryStats',
id: event.data.id,
jsHeapSizeLimit: memory.jsHeapSizeLimit,
totalJSHeapSize: memory.totalJSHeapSize,
usedJSHeapSize: memory.usedJSHeapSize,
} as MemoryStatsResponse);
}
}
worker?.addEventListener('message', onMessage);
return () => {
worker?.removeEventListener('message', onMessage);
};
}, [video, isEnabled]);
function handleClick() {
setIsWrapped(w => !w);
}
if (!isEnabled) {
return null;
}
return (
<div
ref={containerRef}
{...stylex.props(styles.container)}
style={{flexWrap: isWrapped ? 'wrap' : 'unset'}}
onDoubleClick={handleClick}
/>
);
}