Расчет текущего использования процессора с использованием chrome .system.cpu - PullRequest
2 голосов
/ 18 марта 2020

Я создал простое расширение 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 якобы работает. Это приводит к моему вопросу - неправильно ли я вычисляю текущее использование процессора?

...