Index: chrome/browser/extensions/api/system_info_cpu/cpu_info_provider.cc |
diff --git a/chrome/browser/extensions/api/system_info_cpu/cpu_info_provider.cc b/chrome/browser/extensions/api/system_info_cpu/cpu_info_provider.cc |
index fbe2e2e152c2eb8a02696abae9035762665c95dc..edc56fe2ff52f729d138d57ff5738797bc63963a 100644 |
--- a/chrome/browser/extensions/api/system_info_cpu/cpu_info_provider.cc |
+++ b/chrome/browser/extensions/api/system_info_cpu/cpu_info_provider.cc |
@@ -5,34 +5,14 @@ |
#include "chrome/browser/extensions/api/system_info_cpu/cpu_info_provider.h" |
#include "base/sys_info.h" |
-#include "chrome/common/chrome_notification_types.h" |
-#include "content/public/browser/browser_thread.h" |
-#include "content/public/browser/notification_details.h" |
-#include "content/public/browser/notification_service.h" |
-#include "content/public/browser/notification_source.h" |
-#include "content/public/browser/notification_types.h" |
namespace extensions { |
using api::system_info_cpu::CpuInfo; |
-using api::system_info_cpu::CpuUpdateInfo; |
-using content::BrowserThread; |
-// Default sampling interval is 1000ms. |
-const unsigned int kDefaultSamplingIntervalMs = 1000; |
+CpuInfoProvider::CpuInfoProvider() {} |
-CpuInfoProvider::CpuInfoProvider() |
- : is_sampling_started_(false), |
- sampling_timer_(NULL), |
- sampling_interval_(kDefaultSamplingIntervalMs) { |
- registrar_.Add(this, chrome::NOTIFICATION_APP_TERMINATING, |
- content::NotificationService::AllSources()); |
-} |
- |
-CpuInfoProvider::~CpuInfoProvider() { |
- DCHECK(sampling_timer_ == NULL); |
- registrar_.RemoveAll(); |
-} |
+CpuInfoProvider::~CpuInfoProvider() {} |
bool CpuInfoProvider::QueryInfo(CpuInfo* info) { |
if (info == NULL) |
@@ -44,100 +24,9 @@ bool CpuInfoProvider::QueryInfo(CpuInfo* info) { |
return true; |
} |
-void CpuInfoProvider::StartSampling(const SamplingCallback& callback) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- BrowserThread::PostTask( |
- BrowserThread::FILE, |
- FROM_HERE, |
- base::Bind(&CpuInfoProvider::StartSamplingOnFileThread, this, callback)); |
-} |
- |
-void CpuInfoProvider::StopSampling() { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- BrowserThread::PostTask( |
- BrowserThread::FILE, |
- FROM_HERE, |
- base::Bind(&CpuInfoProvider::StopSamplingOnFileThread, this)); |
-} |
- |
// static |
CpuInfoProvider* CpuInfoProvider::Get() { |
return CpuInfoProvider::GetInstance<CpuInfoProvider>(); |
} |
-void CpuInfoProvider::Observe( |
- int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) { |
- switch (type) { |
- case chrome::NOTIFICATION_APP_TERMINATING: |
- StopSampling(); |
- break; |
- default: |
- NOTREACHED(); |
- break; |
- } |
-} |
- |
-void CpuInfoProvider::StartSamplingOnFileThread( |
- const SamplingCallback& callback) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
- if (is_sampling_started_) |
- return; |
- |
- if (!QueryCpuTimePerProcessor(&baseline_cpu_time_)) |
- return; |
- |
- is_sampling_started_ = true; |
- callback_ = callback; |
- DCHECK(!sampling_timer_) << "The sampling timer has leaked. Did you forgot " |
- "to call StopSampling?"; |
- // Should be deleted on FILE thread. |
- sampling_timer_ = new base::RepeatingTimer<CpuInfoProvider>(); |
- sampling_timer_->Start(FROM_HERE, |
- base::TimeDelta::FromMilliseconds(sampling_interval_), |
- this, &CpuInfoProvider::DoSample); |
-} |
- |
-void CpuInfoProvider::StopSamplingOnFileThread() { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
- if (!is_sampling_started_) return; |
- delete sampling_timer_; |
- sampling_timer_ = NULL; |
- baseline_cpu_time_.clear(); |
- is_sampling_started_ = false; |
-} |
- |
-void CpuInfoProvider::DoSample() { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
- |
- std::vector<CpuTime> next_cpu_time; |
- if (!QueryCpuTimePerProcessor(&next_cpu_time)) |
- return; |
- |
- // Calculate the CPU usage information from the next_cpu_time and |
- // |baseline_cpu_time_|. |
- double total_usage = 0; |
- scoped_ptr<CpuUpdateInfo> info(new CpuUpdateInfo()); |
- for (size_t i = 0; i < next_cpu_time.size(); ++i) { |
- double total_time = |
- (next_cpu_time[i].user - baseline_cpu_time_[i].user) + |
- (next_cpu_time[i].kernel - baseline_cpu_time_[i].kernel) + |
- (next_cpu_time[i].idle - baseline_cpu_time_[i].idle); |
- double idle_time = next_cpu_time[i].idle - baseline_cpu_time_[i].idle; |
- |
- double usage = 0; |
- if (total_time != 0) |
- usage = (100 - idle_time * 100 / total_time); |
- info->usage_per_processor.push_back(usage); |
- total_usage += usage; |
- } |
- |
- info->average_usage = total_usage / next_cpu_time.size(); |
- if (!callback_.is_null()) |
- callback_.Run(info.Pass()); |
- // Use next_cpu_time as baseline_cpu_time_ for the next sampling cycle. |
- baseline_cpu_time_.swap(next_cpu_time); |
-} |
- |
} // namespace extensions |