diff --git a/src/main.ts b/src/main.ts index 45ee49628..9fdef2b98 100644 --- a/src/main.ts +++ b/src/main.ts @@ -13,9 +13,12 @@ import { enableSharedArrayBufferSupport, handleDockIconHideOnAutoLaunch, handleUpdates, + logSystemInfo, } from './utils/main'; import { initSentry } from './services/sentry'; import { setupLogging } from './utils/logging'; +import { isDev } from './utils/common'; +import { setupMainProcessStatsLogger } from './utils/processStats'; let mainWindow: BrowserWindow; @@ -42,7 +45,7 @@ setupMainHotReload(); setupNextElectronServe(); -setupLogging(); +setupLogging(isDev); const gotTheLock = app.requestSingleInstanceLock(); if (!gotTheLock) { @@ -65,6 +68,8 @@ if (!gotTheLock) { // initialization and is ready to create browser windows. // Some APIs can only be used after this event occurs. app.on('ready', async () => { + logSystemInfo(); + setupMainProcessStatsLogger(); initSentry(); mainWindow = await createWindow(); const tray = setupTrayItem(mainWindow); diff --git a/src/preload.ts b/src/preload.ts index d51f20e92..504a3016e 100644 --- a/src/preload.ts +++ b/src/preload.ts @@ -50,10 +50,12 @@ import { fixHotReloadNext12 } from './utils/preload'; import { isFolder, getDirFiles } from './api/fs'; import { convertHEIC } from './api/heicConvert'; import { setupLogging } from './utils/logging'; +import { setupRendererProcessStatsLogger } from './utils/processStats'; import { runFFmpegCmd } from './api/ffmpeg'; fixHotReloadNext12(); setupLogging(); +setupRendererProcessStatsLogger(); const windowObject: any = window; diff --git a/src/services/appUpdater.ts b/src/services/appUpdater.ts index 90b4dd113..7200c91f1 100644 --- a/src/services/appUpdater.ts +++ b/src/services/appUpdater.ts @@ -8,6 +8,7 @@ import { getSkipAppVersion, setSkipAppVersion } from './userPreference'; import fetch from 'node-fetch'; import { isPlatformMac } from '../utils/main'; import { logErrorSentry } from './sentry'; +import ElectronLog from 'electron-log'; const FIVE_MIN_IN_MICROSECOND = 5 * 60 * 1000; @@ -83,6 +84,7 @@ export async function checkForUpdateAndNotify(mainWindow: BrowserWindow) { } export function updateAndRestart() { + ElectronLog.log('user quit the app'); setIsAppQuitting(true); autoUpdater.quitAndInstall(); } diff --git a/src/utils/logging.ts b/src/utils/logging.ts index 9c69e3c47..664dea1d5 100644 --- a/src/utils/logging.ts +++ b/src/utils/logging.ts @@ -1,10 +1,12 @@ import log from 'electron-log'; import { LOG_FILENAME, MAX_LOG_SIZE } from '../config'; -export function setupLogging() { +export function setupLogging(isDev?: boolean) { log.transports.file.fileName = LOG_FILENAME; log.transports.file.maxSize = MAX_LOG_SIZE; - log.transports.console.level = false; + if (!isDev) { + log.transports.console.level = false; + } log.transports.file.format = '[{y}-{m}-{d}T{h}:{i}:{s}{z}] [{level}]{scope} {text}'; } diff --git a/src/utils/main.ts b/src/utils/main.ts index e814a2f09..2b68d65a5 100644 --- a/src/utils/main.ts +++ b/src/utils/main.ts @@ -12,6 +12,8 @@ import { checkForUpdateAndNotify, setupAutoUpdater, } from '../services/appUpdater'; +import ElectronLog from 'electron-log'; +import os from 'os'; export function handleUpdates(mainWindow: BrowserWindow) { if (!isDev) { @@ -102,3 +104,10 @@ export async function handleDockIconHideOnAutoLaunch() { export function enableSharedArrayBufferSupport() { app.commandLine.appendSwitch('enable-features', 'SharedArrayBuffer'); } + +export function logSystemInfo() { + const systemVersion = process.getSystemVersion(); + const osName = process.platform; + const osRelease = os.release(); + ElectronLog.info({ osName, osRelease, systemVersion }); +} diff --git a/src/utils/menu.ts b/src/utils/menu.ts index ad10b1ec8..0d46bb649 100644 --- a/src/utils/menu.ts +++ b/src/utils/menu.ts @@ -12,6 +12,7 @@ import { import { setIsAppQuitting } from '../main'; import autoLauncher from '../services/autoLauncher'; import { isPlatformMac } from './main'; +import ElectronLog from 'electron-log'; export function buildContextMenu( mainWindow: BrowserWindow, @@ -76,6 +77,7 @@ export function buildContextMenu( { label: 'Quit ente', click: function () { + ElectronLog.log('user quit the app'); setIsAppQuitting(true); app.quit(); }, diff --git a/src/utils/processStats.ts b/src/utils/processStats.ts new file mode 100644 index 000000000..2b8d8f054 --- /dev/null +++ b/src/utils/processStats.ts @@ -0,0 +1,39 @@ +import ElectronLog from 'electron-log'; +import { webFrame } from 'electron/renderer'; + +const FIVE_MINUTES_IN_MICROSECONDS = 30 * 1000; + +async function logMainProcessStats() { + const systemMemoryInfo = process.getSystemMemoryInfo(); + const cpuUsage = process.getCPUUsage(); + const processMemoryInfo = await process.getProcessMemoryInfo(); + const heapStatistics = process.getHeapStatistics(); + + ElectronLog.log('main process stats', { + systemMemoryInfo, + cpuUsage, + processMemoryInfo, + heapStatistics, + }); +} + +async function logRendererProcessStats() { + const blinkMemoryInfo = process.getBlinkMemoryInfo(); + const heapStatistics = process.getHeapStatistics(); + const processMemoryInfo = process.getProcessMemoryInfo(); + const webFrameResourceUsage = webFrame.getResourceUsage(); + ElectronLog.log('renderer process stats', { + blinkMemoryInfo, + heapStatistics, + processMemoryInfo, + webFrameResourceUsage, + }); +} + +export function setupMainProcessStatsLogger() { + setInterval(logMainProcessStats, FIVE_MINUTES_IN_MICROSECONDS); +} + +export function setupRendererProcessStatsLogger() { + setInterval(logRendererProcessStats, FIVE_MINUTES_IN_MICROSECONDS); +}