Introduce IPC for querying CPU usage of a renderer process.
Currently a renderer process samples the CPU usage itself, which produces incorrect results if the process is sandboxed.
This CL moves CPU usage sampling to the browser process (render_process_host) and
allows the renderer process to query the CPU usage via IPC.
BUG=105611
TEST=
Review URL: http://codereview.chromium.org/8692014
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@112436 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
index da4ab7b1..6b9933a7 100644
--- a/content/renderer/render_thread_impl.cc
+++ b/content/renderer/render_thread_impl.cc
@@ -16,7 +16,6 @@
#include "base/metrics/field_trial.h"
#include "base/metrics/histogram.h"
#include "base/metrics/stats_table.h"
-#include "base/process_util.h"
#include "base/shared_memory.h"
#include "base/task.h"
#include "base/threading/thread_local.h"
@@ -194,14 +193,6 @@
hidden_widget_count_ = 0;
idle_notification_delay_in_ms_ = kInitialIdleHandlerDelayMs;
idle_notifications_to_skip_ = 0;
- base::ProcessHandle handle = base::GetCurrentProcessHandle();
-#if defined(OS_MACOSX)
- process_metrics_.reset(base::ProcessMetrics::CreateProcessMetrics(handle,
- NULL));
-#else
- process_metrics_.reset(base::ProcessMetrics::CreateProcessMetrics(handle));
-#endif
- process_metrics_->GetCPUUsage(); // Initialize CPU usage counters.
task_factory_.reset(new ScopedRunnableMethodFactory<RenderThreadImpl>(this));
appcache_dispatcher_.reset(new AppCacheDispatcher(Get()));
@@ -622,18 +613,17 @@
if (new_delay_ms >= kLongIdleHandlerDelayMs)
new_delay_ms = kShortIdleHandlerDelayMs;
- // Sample the CPU usage on each timer event, so that it is more accurate.
- double cpu_usage = process_metrics_->GetCPUUsage();
-
if (idle_notifications_to_skip_ > 0) {
idle_notifications_to_skip_--;
- } else if (cpu_usage < kIdleCPUUsageThresholdInPercents) {
- if (v8::V8::IdleNotification()) {
+ } else {
+ int cpu_usage;
+ Send(new ViewHostMsg_GetCPUUsage(&cpu_usage));
+ if (cpu_usage < kIdleCPUUsageThresholdInPercents &&
+ v8::V8::IdleNotification()) {
// V8 finished collecting garbage.
new_delay_ms = kLongIdleHandlerDelayMs;
}
}
-
ScheduleIdleHandler(new_delay_ms);
}