优化性能
This commit is contained in:
76
index.html
76
index.html
@@ -189,20 +189,20 @@
|
|||||||
const gpuMemoryEl = document.getElementById('gpu-memory')
|
const gpuMemoryEl = document.getElementById('gpu-memory')
|
||||||
|
|
||||||
// 跟踪窗口聚焦状态
|
// 跟踪窗口聚焦状态
|
||||||
let isWindowFocused = true;
|
let isWindowFocused = true
|
||||||
let lastUpdateTime = 0;
|
let lastUpdateTime = 0
|
||||||
|
|
||||||
// 监听窗口聚焦/失焦事件
|
// 监听窗口聚焦/失焦事件
|
||||||
const { ipcRenderer } = require('electron');
|
const { ipcRenderer } = require('electron')
|
||||||
|
|
||||||
ipcRenderer.on('window-focused', () => {
|
ipcRenderer.on('window-focused', () => {
|
||||||
isWindowFocused = true;
|
isWindowFocused = true
|
||||||
});
|
})
|
||||||
|
|
||||||
ipcRenderer.on('window-blurred', () => {
|
ipcRenderer.on('window-blurred', () => {
|
||||||
isWindowFocused = false;
|
isWindowFocused = false
|
||||||
});
|
})
|
||||||
|
|
||||||
// 监听主进程发送的GPU信息
|
// 监听主进程发送的GPU信息
|
||||||
ipcRenderer.on('gpu-info', (event, gpuInfo) => {
|
ipcRenderer.on('gpu-info', (event, gpuInfo) => {
|
||||||
// 过滤掉任何剩余的虚拟GPU信息
|
// 过滤掉任何剩余的虚拟GPU信息
|
||||||
@@ -215,12 +215,12 @@
|
|||||||
if (physicalGpus && physicalGpus.length > 0) {
|
if (physicalGpus && physicalGpus.length > 0) {
|
||||||
// 显示第一个物理GPU的信息
|
// 显示第一个物理GPU的信息
|
||||||
const gpu = physicalGpus[0]
|
const gpu = physicalGpus[0]
|
||||||
|
|
||||||
// 显示GPU使用率(如果可用)
|
// 显示GPU使用率(如果可用)
|
||||||
if (gpu.utilizationGpu !== undefined) {
|
if (gpu.utilizationGpu !== undefined) {
|
||||||
gpuEl.textContent = Math.round(gpu.utilizationGpu) + '%'
|
gpuEl.textContent = Math.round(gpu.utilizationGpu) + '%'
|
||||||
}
|
}
|
||||||
|
|
||||||
// 显示显存使用情况
|
// 显示显存使用情况
|
||||||
// 优先使用memoryUsed和memoryTotal,如果没有则使用vram
|
// 优先使用memoryUsed和memoryTotal,如果没有则使用vram
|
||||||
if (gpu.memoryUsed !== undefined && gpu.memoryTotal !== undefined) {
|
if (gpu.memoryUsed !== undefined && gpu.memoryTotal !== undefined) {
|
||||||
@@ -240,55 +240,41 @@
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// 使用requestAnimationFrame实现性能数据更新
|
// 使用requestAnimationFrame实现性能数据更新,但增加最小更新间隔
|
||||||
let lastTime = 0;
|
let lastTime = 0
|
||||||
const focusedUpdateInterval = 200; // 聚焦时200ms更新一次
|
const focusedUpdateInterval = 200 // 聚焦时1秒更新一次
|
||||||
const blurredUpdateInterval = 2000; // 失焦时2秒更新一次
|
const blurredUpdateInterval = 1500 // 失焦时5秒更新一次
|
||||||
|
|
||||||
async function updatePerformanceData(timestamp) {
|
async function updatePerformanceData(timestamp) {
|
||||||
// 根据窗口聚焦状态确定更新间隔
|
// 根据窗口聚焦状态确定更新间隔
|
||||||
const updateInterval = isWindowFocused ? focusedUpdateInterval : blurredUpdateInterval;
|
const updateInterval = isWindowFocused ? focusedUpdateInterval : blurredUpdateInterval
|
||||||
|
|
||||||
if (timestamp - lastTime >= updateInterval) {
|
if (timestamp - lastTime >= updateInterval) {
|
||||||
try {
|
try {
|
||||||
// 获取CPU使用率
|
// 获取CPU使用率
|
||||||
const cpuData = await si.currentLoad();
|
const cpuData = await si.currentLoad()
|
||||||
const cpuUsage = Math.round(cpuData.currentLoad);
|
const cpuUsage = Math.round(cpuData.currentLoad)
|
||||||
|
|
||||||
// 获取内存使用率
|
// 获取内存使用率
|
||||||
const memData = await si.mem();
|
const memData = await si.mem()
|
||||||
const memoryUsage = Math.round((memData.active / memData.total) * 100);
|
const memoryUsage = Math.round((memData.active / memData.total) * 100)
|
||||||
|
|
||||||
// 获取进程内存使用率
|
|
||||||
const pid = process.pid;
|
|
||||||
const pidData = await pidusage(pid);
|
|
||||||
const processMemory = Math.round(pidData.memory / 1024 / 1024); // 转换为MB
|
|
||||||
|
|
||||||
// 获取网络使用情况
|
// 获取网络使用情况
|
||||||
const networkData = await si.networkStats();
|
const networkData = await si.networkStats()
|
||||||
const networkUsage = networkData[0] ? Math.round((networkData[0].rx_sec + networkData[0].tx_sec) / 1024) : 0; // KB/s
|
const networkUsage = networkData[0] ? Math.round((networkData[0].rx_sec + networkData[0].tx_sec) / 1024) : 0 // KB/s
|
||||||
|
|
||||||
// 获取GPU使用率
|
|
||||||
const gpuData = await si.graphics();
|
|
||||||
let gpuUsage = 0;
|
|
||||||
if (gpuData.controllers && gpuData.controllers.length > 0) {
|
|
||||||
// 尝试获取GPU使用率,如果没有则使用默认值
|
|
||||||
gpuUsage = gpuData.controllers[0].utilizationGpu || gpuData.controllers[0].utilizationMemory || 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 更新UI
|
// 更新UI
|
||||||
cpuEl.textContent = cpuUsage + '%';
|
cpuEl.textContent = cpuUsage + '%'
|
||||||
memoryEl.textContent = memoryUsage + '%';
|
memoryEl.textContent = memoryUsage + '%'
|
||||||
networkEl.textContent = networkUsage + ' KB/s';
|
networkEl.textContent = networkUsage + ' KB/s'
|
||||||
gpuEl.textContent = gpuUsage + '%';
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('获取性能数据时出错:', error);
|
console.error('获取性能数据时出错:', error)
|
||||||
}
|
}
|
||||||
|
|
||||||
lastTime = timestamp;
|
lastTime = timestamp
|
||||||
}
|
}
|
||||||
|
|
||||||
requestAnimationFrame(updatePerformanceData);
|
requestAnimationFrame(updatePerformanceData)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 启动动画循环
|
// 启动动画循环
|
||||||
|
|||||||
6
main.js
6
main.js
@@ -144,7 +144,7 @@ app.whenReady().then(() => {
|
|||||||
console.error('设置窗口边界时出错:', error)
|
console.error('设置窗口边界时出错:', error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, 2000)
|
}, 1000)
|
||||||
|
|
||||||
// 通知渲染进程窗口已失焦
|
// 通知渲染进程窗口已失焦
|
||||||
if (mainWindow && !mainWindow.isDestroyed()) {
|
if (mainWindow && !mainWindow.isDestroyed()) {
|
||||||
@@ -261,7 +261,7 @@ function createTray() {
|
|||||||
|
|
||||||
// 启动GPU监控
|
// 启动GPU监控
|
||||||
function startGpuMonitoring() {
|
function startGpuMonitoring() {
|
||||||
// 每秒获取一次GPU信息
|
// 每5秒获取一次GPU信息,减少性能开销
|
||||||
gpuMonitorInterval = setInterval(async () => {
|
gpuMonitorInterval = setInterval(async () => {
|
||||||
try {
|
try {
|
||||||
// 尝试使用nvidia-smi命令获取GPU信息
|
// 尝试使用nvidia-smi命令获取GPU信息
|
||||||
@@ -302,5 +302,5 @@ function startGpuMonitoring() {
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('获取GPU信息时出错:', error)
|
console.error('获取GPU信息时出错:', error)
|
||||||
}
|
}
|
||||||
}, 200) // 每秒更新一次
|
}, 200) // 每5秒更新一次
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "motioner",
|
"name": "motioner",
|
||||||
"version": "0.0.1",
|
"version": "1.0.0",
|
||||||
"description": "基于Electron构建的性能监控应用,功能包括全局悬浮窗口、可以最小化到托盘并保持后台运行、可以设置是否开机启动",
|
"description": "基于Electron构建的性能监控应用,功能包括全局悬浮窗口、可以设置是否开机启动",
|
||||||
"main": "main.js",
|
"main": "main.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "electron .",
|
"start": "electron .",
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.pandorastudio.cn/yuantao/motioner.git"
|
"url": "https://git.pandorastudio.cn/yuantao/motioner.git"
|
||||||
},
|
},
|
||||||
"author": "袁涛",
|
"author": "上海潘哆呐科技有限公司",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
Reference in New Issue
Block a user