commit
d3896cb91a
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "ente",
|
"name": "ente",
|
||||||
"productName": "ente",
|
"productName": "ente",
|
||||||
"version": "1.6.17-alpha.5",
|
"version": "1.6.17",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "Desktop client for ente.io",
|
"description": "Desktop client for ente.io",
|
||||||
"main": "app/main.js",
|
"main": "app/main.js",
|
||||||
|
@ -68,7 +68,7 @@
|
||||||
"start": "concurrently \"yarn start-main\" \"yarn start-renderer\"",
|
"start": "concurrently \"yarn start-main\" \"yarn start-renderer\"",
|
||||||
"build-renderer": "cd ui && yarn install && yarn build && cd ..",
|
"build-renderer": "cd ui && yarn install && yarn build && cd ..",
|
||||||
"build": "yarn build-renderer && yarn build-main",
|
"build": "yarn build-renderer && yarn build-main",
|
||||||
"test-release": "yarn build && electron-builder --config.compression=store"
|
"test-release": "cross-env IS_TEST_RELEASE=true yarn build && electron-builder --config.compression=store"
|
||||||
},
|
},
|
||||||
"author": "ente <code@ente.io>",
|
"author": "ente <code@ente.io>",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
@ -83,6 +83,7 @@
|
||||||
"@typescript-eslint/eslint-plugin": "^5.28.0",
|
"@typescript-eslint/eslint-plugin": "^5.28.0",
|
||||||
"@typescript-eslint/parser": "^5.28.0",
|
"@typescript-eslint/parser": "^5.28.0",
|
||||||
"concurrently": "^7.0.0",
|
"concurrently": "^7.0.0",
|
||||||
|
"cross-env": "^7.0.3",
|
||||||
"electron": "^21.2.2",
|
"electron": "^21.2.2",
|
||||||
"electron-builder": "^23.0.3",
|
"electron-builder": "^23.0.3",
|
||||||
"electron-builder-notarize": "^1.2.0",
|
"electron-builder-notarize": "^1.2.0",
|
||||||
|
|
|
@ -51,7 +51,10 @@ import { fixHotReloadNext12 } from './utils/preload';
|
||||||
import { isFolder, getDirFiles } from './api/fs';
|
import { isFolder, getDirFiles } from './api/fs';
|
||||||
import { convertHEIC, generateImageThumbnail } from './api/imageProcessor';
|
import { convertHEIC, generateImageThumbnail } from './api/imageProcessor';
|
||||||
import { setupLogging } from './utils/logging';
|
import { setupLogging } from './utils/logging';
|
||||||
import { setupRendererProcessStatsLogger } from './utils/processStats';
|
import {
|
||||||
|
setupRendererProcessStatsLogger,
|
||||||
|
logRendererProcessMemoryUsage,
|
||||||
|
} from './utils/processStats';
|
||||||
import { runFFmpegCmd } from './api/ffmpeg';
|
import { runFFmpegCmd } from './api/ffmpeg';
|
||||||
|
|
||||||
fixHotReloadNext12();
|
fixHotReloadNext12();
|
||||||
|
@ -107,4 +110,5 @@ windowObject['ElectronAPIs'] = {
|
||||||
runFFmpegCmd,
|
runFFmpegCmd,
|
||||||
muteUpdateNotification,
|
muteUpdateNotification,
|
||||||
generateImageThumbnail,
|
generateImageThumbnail,
|
||||||
|
logRendererProcessMemoryUsage,
|
||||||
};
|
};
|
||||||
|
|
|
@ -5,9 +5,9 @@ const LOGGING_INTERVAL_IN_MICROSECONDS = 30 * 1000; // 30 seconds
|
||||||
|
|
||||||
const SPIKE_DETECTION_INTERVAL_IN_MICROSECONDS = 1 * 1000; // 1 seconds
|
const SPIKE_DETECTION_INTERVAL_IN_MICROSECONDS = 1 * 1000; // 1 seconds
|
||||||
|
|
||||||
const MAIN_MEMORY_USAGE_DIFF_IN_KILOBYTES_CONSIDERED_AS_SPIKE = 10 * 1024; // 10 MB
|
const MAIN_MEMORY_USAGE_DIFF_IN_KILOBYTES_CONSIDERED_AS_SPIKE = 50 * 1024; // 50 MB
|
||||||
|
|
||||||
const HIGH_MAIN_MEMORY_USAGE_THRESHOLD_IN_KILOBYTES = 100 * 1024; // 100 MB
|
const HIGH_MAIN_MEMORY_USAGE_THRESHOLD_IN_KILOBYTES = 200 * 1024; // 200 MB
|
||||||
|
|
||||||
const RENDERER_MEMORY_USAGE_DIFF_IN_KILOBYTES_CONSIDERED_AS_SPIKE = 200 * 1024; // 200 MB
|
const RENDERER_MEMORY_USAGE_DIFF_IN_KILOBYTES_CONSIDERED_AS_SPIKE = 200 * 1024; // 200 MB
|
||||||
|
|
||||||
|
@ -40,15 +40,15 @@ let mainProcessUsingHighMemory = false;
|
||||||
async function logSpikeMainMemoryUsage() {
|
async function logSpikeMainMemoryUsage() {
|
||||||
const processMemoryInfo = await process.getProcessMemoryInfo();
|
const processMemoryInfo = await process.getProcessMemoryInfo();
|
||||||
const currentMemoryUsage = Math.max(
|
const currentMemoryUsage = Math.max(
|
||||||
processMemoryInfo.residentSet,
|
processMemoryInfo.residentSet ?? 0,
|
||||||
processMemoryInfo.private
|
processMemoryInfo.private
|
||||||
);
|
);
|
||||||
const previewMemoryUsage = Math.max(
|
const previousMemoryUsage = Math.max(
|
||||||
previousMainProcessMemoryInfo.private,
|
previousMainProcessMemoryInfo.residentSet ?? 0,
|
||||||
previousMainProcessMemoryInfo.residentSet
|
previousMainProcessMemoryInfo.private
|
||||||
);
|
);
|
||||||
const isSpiking =
|
const isSpiking =
|
||||||
currentMemoryUsage - previewMemoryUsage >=
|
currentMemoryUsage - previousMemoryUsage >=
|
||||||
MAIN_MEMORY_USAGE_DIFF_IN_KILOBYTES_CONSIDERED_AS_SPIKE;
|
MAIN_MEMORY_USAGE_DIFF_IN_KILOBYTES_CONSIDERED_AS_SPIKE;
|
||||||
|
|
||||||
const isHighMemoryUsage =
|
const isHighMemoryUsage =
|
||||||
|
@ -92,15 +92,16 @@ let rendererUsingHighMemory = false;
|
||||||
async function logSpikeRendererMemoryUsage() {
|
async function logSpikeRendererMemoryUsage() {
|
||||||
const processMemoryInfo = await process.getProcessMemoryInfo();
|
const processMemoryInfo = await process.getProcessMemoryInfo();
|
||||||
const currentMemoryUsage = Math.max(
|
const currentMemoryUsage = Math.max(
|
||||||
processMemoryInfo.residentSet,
|
processMemoryInfo.residentSet ?? 0,
|
||||||
processMemoryInfo.private
|
processMemoryInfo.private
|
||||||
);
|
);
|
||||||
const previewMemoryUsage = Math.max(
|
|
||||||
|
const previousMemoryUsage = Math.max(
|
||||||
previousRendererProcessMemoryInfo.private,
|
previousRendererProcessMemoryInfo.private,
|
||||||
previousRendererProcessMemoryInfo.residentSet
|
previousRendererProcessMemoryInfo.residentSet ?? 0
|
||||||
);
|
);
|
||||||
const isSpiking =
|
const isSpiking =
|
||||||
currentMemoryUsage - previewMemoryUsage >=
|
currentMemoryUsage - previousMemoryUsage >=
|
||||||
RENDERER_MEMORY_USAGE_DIFF_IN_KILOBYTES_CONSIDERED_AS_SPIKE;
|
RENDERER_MEMORY_USAGE_DIFF_IN_KILOBYTES_CONSIDERED_AS_SPIKE;
|
||||||
|
|
||||||
const isHighMemoryUsage =
|
const isHighMemoryUsage =
|
||||||
|
@ -168,6 +169,19 @@ export function setupRendererProcessStatsLogger() {
|
||||||
setInterval(logRendererProcessStats, LOGGING_INTERVAL_IN_MICROSECONDS);
|
setInterval(logRendererProcessStats, LOGGING_INTERVAL_IN_MICROSECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function logRendererProcessMemoryUsage(message: string) {
|
||||||
|
const processMemoryInfo = await process.getProcessMemoryInfo();
|
||||||
|
const processMemory = Math.max(
|
||||||
|
processMemoryInfo.private,
|
||||||
|
processMemoryInfo.residentSet ?? 0
|
||||||
|
);
|
||||||
|
ElectronLog.log(
|
||||||
|
'renderer ProcessMemory',
|
||||||
|
message,
|
||||||
|
convertBytesToHumanReadable(processMemory * 1024)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
const getNormalizedProcessMemoryInfo = async (
|
const getNormalizedProcessMemoryInfo = async (
|
||||||
processMemoryInfo: Electron.ProcessMemoryInfo
|
processMemoryInfo: Electron.ProcessMemoryInfo
|
||||||
) => {
|
) => {
|
||||||
|
|
2
ui
2
ui
|
@ -1 +1 @@
|
||||||
Subproject commit f4f1de08eb8556d598d75b79a4473a1f02e8165b
|
Subproject commit 3a37be3e4f4c6372a6ffd1ec53b588e6a93649f0
|
|
@ -1199,6 +1199,13 @@ crc@^3.8.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
buffer "^5.1.0"
|
buffer "^5.1.0"
|
||||||
|
|
||||||
|
cross-env@^7.0.3:
|
||||||
|
version "7.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf"
|
||||||
|
integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==
|
||||||
|
dependencies:
|
||||||
|
cross-spawn "^7.0.1"
|
||||||
|
|
||||||
cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
|
cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
|
||||||
version "7.0.3"
|
version "7.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
|
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
|
||||||
|
|
Loading…
Reference in a new issue