Я создал простое расширение Chrome, которое вычисляет процент использования ЦП в определенный момент времени, а также нагрузку между определенным временным диапазоном на основе информации, доступной через chrome .system. ЦПУ. В настоящее время я установил на странице HTML кнопку, которая при нажатии вызывает мой фон. Сценарий js через обмен сообщениями из contentScript моего расширения. js.
'use strict';
chrome.runtime.onInstalled.addListener(function() {
chrome.storage.sync.set({previousCpuInfo: {used: null, available: null, timestamp: false}});
});
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
chrome.storage.sync.get('previousCpuInfo', function(storageData)
{
chrome.system.cpu.getInfo(function(cpuInfo) {
var sumOfUsed = 0;
var sumOfAvailable = 0;
for (var i = 0; i < cpuInfo.numOfProcessors; i++)
{
var usage = cpuInfo.processors[i].usage;
sumOfUsed = sumOfUsed + usage.kernel + usage.user;
sumOfAvailable += usage.total;
}
var currentCpuUsage = Math.floor(sumOfUsed / sumOfAvailable * 100);
chrome.storage.sync.set({previousCpuInfo: {used: sumOfUsed, available: sumOfAvailable, timestamp: Date.now()}});
//Return a response. If the previous call was not within 5 seconds, and if not there was either no previous call or the previous call is from a different session.
if ( !storageData.previousCpuInfo.timestamp || (Date.now() - storageData.previousCpuInfo.timestamp) > 5000 ) sendResponse({currentCpuUsage: currentCpuUsage, loadBetweenCalls: false});
else sendResponse({currentCpuUsage: currentCpuUsage, loadBetweenCalls: Math.floor((sumOfUsed - storageData.previousCpuInfo.used) / (sumOfAvailable - storageData.previousCpuInfo.available) * 100)});
});
return true; //Required for async requests.
});
return true; //Required for async requests.
});
- Пример вывод по первому щелчку:
{currentCpuUsage: 12, loadBetweenCalls: false}
- Пример вывода через 3 секунды (без запуска энергоемких процессов):
{currentCpuUsage: 12, loadBetweenCalls: 4}
К сожалению, currentCpuUsage постоянно выводит 12 в моей системе даже когда я нагружаю свой процессор, в то время как loadBetweenCalls якобы работает. Это приводит к моему вопросу - неправильно ли я вычисляю текущее использование процессора?