You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

middleware.ts 1.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { AnyAction } from 'redux';
  2. import MiddlewareRegistry from '../../base/redux/MiddlewareRegistry';
  3. import { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from './actionTypes';
  4. import logger from './logger';
  5. /**
  6. * Experimental feature to monitor CPU pressure.
  7. */
  8. let pressureObserver: typeof window.PressureObserver;
  9. /**
  10. * Middleware which intercepts app actions to handle changes to the related state.
  11. *
  12. * @param {Store} store - The redux store.
  13. * @returns {Function}
  14. */
  15. MiddlewareRegistry.register(() => (next: Function) => async (action: AnyAction) => {
  16. switch (action.type) {
  17. case APP_WILL_MOUNT: {
  18. if ('PressureObserver' in globalThis) {
  19. pressureObserver = new window.PressureObserver(
  20. (records: typeof window.PressureRecord) => {
  21. logger.info('Compute pressure state changed:', JSON.stringify(records));
  22. if (typeof APP !== 'undefined') {
  23. APP.API.notifyComputePressureChanged(records);
  24. }
  25. },
  26. { sampleRate: 1 }
  27. );
  28. try {
  29. pressureObserver
  30. .observe('cpu')
  31. .catch((e: any) => logger.error('CPU pressure observer failed to start', e));
  32. } catch (e: any) {
  33. logger.error('CPU pressure observer failed to start', e);
  34. }
  35. }
  36. break;
  37. }
  38. case APP_WILL_UNMOUNT: {
  39. if (pressureObserver) {
  40. pressureObserver.unobserve('cpu');
  41. }
  42. break;
  43. }
  44. }
  45. return next(action);
  46. });