mirror of
https://github.com/finos/SymphonyElectron.git
synced 2025-02-25 18:55:29 -06:00
Electron-445 - Verify user presence status before reloading the app
This commit is contained in:
committed by
kiranniranjan
parent
082575e22d
commit
a5f5556bd2
@@ -20,7 +20,8 @@ const cmds = keyMirror({
|
||||
bringToFront: null,
|
||||
openScreenPickerWindow: null,
|
||||
popupMenu: null,
|
||||
optimizeMemoryConsumption: null
|
||||
optimizeMemoryConsumption: null,
|
||||
setPresenceStatus: null
|
||||
});
|
||||
|
||||
module.exports = {
|
||||
|
||||
@@ -17,7 +17,7 @@ const { bringToFront } = require('./bringToFront.js');
|
||||
const eventEmitter = require('./eventEmitter');
|
||||
const { isMac } = require('./utils/misc');
|
||||
const { openScreenPickerWindow } = require('./desktopCapturer');
|
||||
const { optimizeMemory } = require('./memoryMonitor');
|
||||
const { optimizeMemory, setPresenceStatus } = require('./memoryMonitor');
|
||||
|
||||
const apiEnums = require('./enums/api.js');
|
||||
const apiCmds = apiEnums.cmds;
|
||||
@@ -153,6 +153,11 @@ electron.ipcMain.on(apiName, (event, arg) => {
|
||||
optimizeMemory(arg.memory);
|
||||
}
|
||||
break;
|
||||
case apiCmds.setPresenceStatus:
|
||||
if (typeof arg.status === 'string') {
|
||||
setPresenceStatus(arg.status);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ const maxMemory = 800;
|
||||
let maxIdleTime = 4 * 60 * 1000;
|
||||
let reloadThreshold = 30 * 60 * 1000;
|
||||
let reloadedTimeStamp;
|
||||
let userPresenceStatus;
|
||||
|
||||
// once a minute
|
||||
setInterval(gatherMemory, 1000 * 60);
|
||||
@@ -38,7 +39,7 @@ function optimizeMemory(memoryInfo) {
|
||||
const memoryConsumed = (memoryInfo && memoryInfo.workingSetSize / 1024) || 0;
|
||||
const canReload = (!reloadedTimeStamp || (new Date().getTime() - reloadedTimeStamp) > reloadThreshold);
|
||||
|
||||
if (memoryConsumed > maxMemory && systemIdleTime.getIdleTime() > maxIdleTime && canReload) {
|
||||
if (memoryConsumed > maxMemory && systemIdleTime.getIdleTime() > maxIdleTime && canReload && !isUserActive()) {
|
||||
getConfigField('memoryRefresh')
|
||||
.then((enabled) => {
|
||||
if (enabled) {
|
||||
@@ -47,14 +48,49 @@ function optimizeMemory(memoryInfo) {
|
||||
if (mainWindow && !mainWindow.isDestroyed()) {
|
||||
setIsAutoReload(true);
|
||||
reloadedTimeStamp = new Date().getTime();
|
||||
log.send(logLevels.INFO, 'Reloading the app to optimize memory usage');
|
||||
mainWindow.webContents.reload();
|
||||
log.send(logLevels.INFO, 'Reloading the app to optimize memory usage as' +
|
||||
' memory consumption was ' + memoryConsumed +
|
||||
' user activity tick was ' + systemIdleTime.getIdleTime() +
|
||||
' user presence status was ' + userPresenceStatus );
|
||||
mainWindow.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the user presence status to see
|
||||
* if the user is active
|
||||
* @return {boolean}
|
||||
*/
|
||||
function isUserActive() {
|
||||
|
||||
if (!userPresenceStatus) {
|
||||
return true
|
||||
}
|
||||
|
||||
switch (userPresenceStatus) {
|
||||
case 'AVAILABLE':
|
||||
case 'IN_A_MEETING':
|
||||
case 'ON_THE_PHONE':
|
||||
case 'OFFLINE':
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the current user presence status
|
||||
* @param status
|
||||
*/
|
||||
function setPresenceStatus(status) {
|
||||
userPresenceStatus = status;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
optimizeMemory
|
||||
optimizeMemory,
|
||||
setPresenceStatus
|
||||
};
|
||||
@@ -64,6 +64,13 @@ const throttledSetBadgeCount = throttle(1000, function(count) {
|
||||
});
|
||||
});
|
||||
|
||||
const throttledSetPresenceStatus = throttle(1000, function(status) {
|
||||
local.ipcRenderer.send(apiName, {
|
||||
cmd: apiCmds.setPresenceStatus,
|
||||
status: status
|
||||
});
|
||||
});
|
||||
|
||||
// Gathers renderer process memory
|
||||
setInterval(() => {
|
||||
const memory = process.getProcessMemoryInfo();
|
||||
@@ -286,6 +293,14 @@ function createAPI() {
|
||||
cmd: apiCmds.showNotificationSettings,
|
||||
windowName: windowName
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Sets user presence status
|
||||
* will be used to handle memory refresh functionality
|
||||
*/
|
||||
setPresenceStatus: function (status) {
|
||||
throttledSetPresenceStatus(status);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user