Electron-445 - Verify user presence status before reloading the app

This commit is contained in:
Kiran Niranjan
2018-05-04 16:08:09 +05:30
committed by kiranniranjan
parent 082575e22d
commit a5f5556bd2
4 changed files with 63 additions and 6 deletions

View File

@@ -20,7 +20,8 @@ const cmds = keyMirror({
bringToFront: null,
openScreenPickerWindow: null,
popupMenu: null,
optimizeMemoryConsumption: null
optimizeMemoryConsumption: null,
setPresenceStatus: null
});
module.exports = {

View File

@@ -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:
}

View File

@@ -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
};

View File

@@ -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);
}
};