mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-21 12:02:31 +01:00
No player-facing changes. Ports several PRs from tgstation, including: https://github.com/tgstation/tgstation/pull/66862 https://github.com/tgstation/tgstation/pull/80189 https://github.com/tgstation/tgstation/pull/90317 https://github.com/tgstation/tgstation/pull/91379 In addition, removes IntelliCode from the recommended extensions. This is deprecated, and we prefer not to force the replacement onto contributors. Contributors may individually choose to use this instead.
68 lines
1.8 KiB
TypeScript
68 lines
1.8 KiB
TypeScript
import { perf } from 'common/perf';
|
|
import { render } from 'inferno';
|
|
import { createLogger } from './logging';
|
|
|
|
const logger = createLogger('renderer');
|
|
|
|
let reactRoot: any;
|
|
let initialRender: string | boolean = true;
|
|
let suspended = false;
|
|
|
|
// These functions are used purely for profiling.
|
|
export const resumeRenderer = () => {
|
|
initialRender = initialRender || 'resumed';
|
|
suspended = false;
|
|
};
|
|
|
|
export const suspendRenderer = () => {
|
|
suspended = true;
|
|
};
|
|
|
|
type CreateRenderer = <T extends unknown[] = [unknown]>(
|
|
getVNode?: (...args: T) => any,
|
|
) => (...args: T) => void;
|
|
|
|
// prettier-ignore
|
|
export const createRenderer: CreateRenderer = (getVNode) => (...args) => {
|
|
perf.mark('render/start');
|
|
// Start rendering
|
|
if (!reactRoot) {
|
|
reactRoot = document.getElementById('react-root');
|
|
}
|
|
if (getVNode) {
|
|
render(getVNode(...args), reactRoot);
|
|
}
|
|
else {
|
|
render(args[0] as any, reactRoot);
|
|
}
|
|
perf.mark('render/finish');
|
|
if (suspended) {
|
|
return;
|
|
}
|
|
// Report rendering time
|
|
if (process.env.NODE_ENV !== 'production') {
|
|
if (initialRender === 'resumed') {
|
|
logger.log('rendered in',
|
|
perf.measure('render/start', 'render/finish'));
|
|
}
|
|
else if (initialRender) {
|
|
logger.debug('serving from:', location.href);
|
|
logger.debug('bundle entered in',
|
|
perf.measure('inception', 'init'));
|
|
logger.debug('initialized in',
|
|
perf.measure('init', 'render/start'));
|
|
logger.log('rendered in',
|
|
perf.measure('render/start', 'render/finish'));
|
|
logger.log('fully loaded in',
|
|
perf.measure('inception', 'render/finish'));
|
|
}
|
|
else {
|
|
logger.debug('rendered in',
|
|
perf.measure('render/start', 'render/finish'));
|
|
}
|
|
}
|
|
if (initialRender) {
|
|
initialRender = false;
|
|
}
|
|
};
|