mirror of
https://github.com/finos/SymphonyElectron.git
synced 2025-02-25 18:55:29 -06:00
Merge pull request #360 from KiranNiranjan/ELECTRON-445
Electron-445 (Added a new API to keep electron in sync with client app user meeting status)
This commit is contained in:
commit
0a5c5ab193
@ -20,7 +20,8 @@ const cmds = keyMirror({
|
|||||||
bringToFront: null,
|
bringToFront: null,
|
||||||
openScreenPickerWindow: null,
|
openScreenPickerWindow: null,
|
||||||
popupMenu: null,
|
popupMenu: null,
|
||||||
optimizeMemoryConsumption: null
|
optimizeMemoryConsumption: null,
|
||||||
|
setIsInMeeting: null
|
||||||
});
|
});
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
@ -17,6 +17,7 @@ const { bringToFront } = require('./bringToFront.js');
|
|||||||
const eventEmitter = require('./eventEmitter');
|
const eventEmitter = require('./eventEmitter');
|
||||||
const { isMac } = require('./utils/misc');
|
const { isMac } = require('./utils/misc');
|
||||||
const { openScreenPickerWindow } = require('./desktopCapturer');
|
const { openScreenPickerWindow } = require('./desktopCapturer');
|
||||||
|
const { optimizeMemory, setIsInMeeting } = require('./memoryMonitor');
|
||||||
|
|
||||||
const apiEnums = require('./enums/api.js');
|
const apiEnums = require('./enums/api.js');
|
||||||
const apiCmds = apiEnums.cmds;
|
const apiCmds = apiEnums.cmds;
|
||||||
@ -147,6 +148,16 @@ electron.ipcMain.on(apiName, (event, arg) => {
|
|||||||
windowMgr.getMenu().popup(browserWin, { x: 20, y: 15, async: true });
|
windowMgr.getMenu().popup(browserWin, { x: 20, y: 15, async: true });
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case apiCmds.optimizeMemoryConsumption:
|
||||||
|
if (typeof arg.memory === 'object' && typeof arg.cpuUsage === 'object' && typeof arg.memory.workingSetSize === 'number') {
|
||||||
|
optimizeMemory(arg.memory, arg.cpuUsage);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case apiCmds.setIsInMeeting:
|
||||||
|
if (typeof arg.isInMeeting === 'boolean') {
|
||||||
|
setIsInMeeting(arg.isInMeeting);
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,14 +2,16 @@
|
|||||||
|
|
||||||
const log = require('./log.js');
|
const log = require('./log.js');
|
||||||
const logLevels = require('./enums/logLevels.js');
|
const logLevels = require('./enums/logLevels.js');
|
||||||
const { getMainWindow } = require('./windowMgr');
|
const { getMainWindow, setIsAutoReload } = require('./windowMgr');
|
||||||
const systemIdleTime = require('@paulcbetts/system-idle-time');
|
const systemIdleTime = require('@paulcbetts/system-idle-time');
|
||||||
const { getConfigField } = require('./config');
|
const { getConfigField } = require('./config');
|
||||||
|
|
||||||
const maxMemory = 800;
|
const maxMemory = 800;
|
||||||
let maxIdleTime = 4 * 60 * 1000;
|
|
||||||
let reloadThreshold = 30 * 60 * 1000;
|
let maxIdleTime = 15 * 60 * 1000;
|
||||||
|
let reloadThreshold = 60 * 60 * 1000;
|
||||||
let reloadedTimeStamp;
|
let reloadedTimeStamp;
|
||||||
|
let isInMeeting = false;
|
||||||
|
|
||||||
// once a minute
|
// once a minute
|
||||||
setInterval(gatherMemory, 1000 * 60);
|
setInterval(gatherMemory, 1000 * 60);
|
||||||
@ -33,26 +35,47 @@ function gatherMemory() {
|
|||||||
* application to free up some memory consumption
|
* application to free up some memory consumption
|
||||||
*
|
*
|
||||||
* @param memoryInfo
|
* @param memoryInfo
|
||||||
|
* @param cpuUsage
|
||||||
*/
|
*/
|
||||||
function optimizeMemory(memoryInfo) {
|
function optimizeMemory(memoryInfo, cpuUsage) {
|
||||||
const memoryConsumed = (memoryInfo && memoryInfo.workingSetSize / 1024) || 0;
|
const memoryConsumed = (memoryInfo && memoryInfo.workingSetSize / 1024) || 0;
|
||||||
const canReload = (!reloadedTimeStamp || (new Date().getTime() - reloadedTimeStamp) > reloadThreshold);
|
const canReload = (!reloadedTimeStamp || (new Date().getTime() - reloadedTimeStamp) > reloadThreshold);
|
||||||
|
|
||||||
if (memoryConsumed > maxMemory && systemIdleTime.getIdleTime() > maxIdleTime && canReload) {
|
if (memoryConsumed > maxMemory
|
||||||
|
&& systemIdleTime.getIdleTime() > maxIdleTime
|
||||||
|
&& canReload
|
||||||
|
&& !isInMeeting
|
||||||
|
&& cpuUsage.percentCPUUsage < 1
|
||||||
|
) {
|
||||||
getConfigField('memoryRefresh')
|
getConfigField('memoryRefresh')
|
||||||
.then((enabled) => {
|
.then((enabled) => {
|
||||||
if (enabled) {
|
if (enabled) {
|
||||||
const mainWindow = getMainWindow();
|
const mainWindow = getMainWindow();
|
||||||
|
|
||||||
if (mainWindow && !mainWindow.isDestroyed()) {
|
if (mainWindow && !mainWindow.isDestroyed()) {
|
||||||
|
setIsAutoReload(true);
|
||||||
reloadedTimeStamp = new Date().getTime();
|
reloadedTimeStamp = new Date().getTime();
|
||||||
log.send(logLevels.INFO, 'Reloading the app to optimize memory usage');
|
log.send(logLevels.INFO, 'Reloading the app to optimize memory usage as' +
|
||||||
|
' memory consumption was ' + memoryConsumed +
|
||||||
|
' CPU usage percentage was ' + cpuUsage.percentCPUUsage +
|
||||||
|
' user activity tick was ' + systemIdleTime.getIdleTime() +
|
||||||
|
' user was in a meeting? ' + isInMeeting );
|
||||||
|
mainWindow.reload();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the current user meeting status
|
||||||
|
* @param meetingStatus - Whether user is in an active meeting
|
||||||
|
*/
|
||||||
|
function setIsInMeeting(meetingStatus) {
|
||||||
|
isInMeeting = meetingStatus;
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
optimizeMemory
|
optimizeMemory,
|
||||||
|
setIsInMeeting
|
||||||
};
|
};
|
@ -64,6 +64,24 @@ const throttledSetBadgeCount = throttle(1000, function(count) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const throttledSetIsInMeetingStatus = throttle(1000, function(isInMeeting) {
|
||||||
|
local.ipcRenderer.send(apiName, {
|
||||||
|
cmd: apiCmds.setIsInMeeting,
|
||||||
|
isInMeeting
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Gathers renderer process memory
|
||||||
|
setInterval(() => {
|
||||||
|
const memory = process.getProcessMemoryInfo();
|
||||||
|
const cpuUsage = process.getCPUUsage();
|
||||||
|
local.ipcRenderer.send(apiName, {
|
||||||
|
cmd: apiCmds.optimizeMemoryConsumption,
|
||||||
|
memory: memory,
|
||||||
|
cpuUsage: cpuUsage
|
||||||
|
});
|
||||||
|
}, 1000 * 60 * 15);
|
||||||
|
|
||||||
createAPI();
|
createAPI();
|
||||||
|
|
||||||
// creates API exposed from electron.
|
// creates API exposed from electron.
|
||||||
@ -277,6 +295,14 @@ function createAPI() {
|
|||||||
cmd: apiCmds.showNotificationSettings,
|
cmd: apiCmds.showNotificationSettings,
|
||||||
windowName: windowName
|
windowName: windowName
|
||||||
});
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets if the user is in an active meeting
|
||||||
|
* will be used to handle memory refresh functionality
|
||||||
|
*/
|
||||||
|
setIsInMeeting: function (isInMeeting) {
|
||||||
|
throttledSetIsInMeetingStatus(isInMeeting);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user