mirror of
https://gitcode.com/GitHub_Trending/ji/jitsi-meet.git
synced 2025-12-30 11:22:31 +00:00
Some middleware functions are declared as async. This wraps next(action) in Promise which will delay the execution of actions and also dispatch will return the its result always as a Promise.
58 lines
1.8 KiB
TypeScript
58 lines
1.8 KiB
TypeScript
import { AnyAction } from 'redux';
|
|
|
|
import MiddlewareRegistry from '../redux/MiddlewareRegistry';
|
|
import { inIframe } from '../util/iframeUtils';
|
|
|
|
import { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from './actionTypes';
|
|
import logger from './logger';
|
|
|
|
|
|
/**
|
|
* Experimental feature to monitor CPU pressure.
|
|
*/
|
|
let pressureObserver: typeof window.PressureObserver;
|
|
|
|
/**
|
|
* Middleware which intercepts app actions to handle changes to the related state.
|
|
*
|
|
* @param {Store} store - The redux store.
|
|
* @returns {Function}
|
|
*/
|
|
MiddlewareRegistry.register(() => (next: Function) => (action: AnyAction) => {
|
|
|
|
switch (action.type) {
|
|
case APP_WILL_MOUNT: {
|
|
// Disable it inside an iframe until Google fixes the origin trial for 3rd party sources:
|
|
// https://bugs.chromium.org/p/chromium/issues/detail?id=1504167
|
|
if (!inIframe() && 'PressureObserver' in globalThis) {
|
|
pressureObserver = new window.PressureObserver(
|
|
(records: typeof window.PressureRecord) => {
|
|
logger.info('Compute pressure state changed:', JSON.stringify(records));
|
|
if (typeof APP !== 'undefined') {
|
|
APP.API.notifyComputePressureChanged(records);
|
|
}
|
|
},
|
|
{ sampleRate: 1 }
|
|
);
|
|
|
|
try {
|
|
pressureObserver
|
|
.observe('cpu')
|
|
.catch((e: any) => logger.error('CPU pressure observer failed to start', e));
|
|
} catch (e: any) {
|
|
logger.error('CPU pressure observer failed to start', e);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case APP_WILL_UNMOUNT: {
|
|
if (pressureObserver) {
|
|
pressureObserver.unobserve('cpu');
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
return next(action);
|
|
});
|