Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(758)

Unified Diff: base/timer/hi_res_timer_manager_win.cc

Issue 2951413003: Add UMA for High Resolution Timer Usage (Closed)
Patch Set: Removed NaCl changes Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/timer/hi_res_timer_manager_unittest.cc ('k') | content/gpu/gpu_main.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/timer/hi_res_timer_manager_win.cc
diff --git a/base/timer/hi_res_timer_manager_win.cc b/base/timer/hi_res_timer_manager_win.cc
index 692f72b4e594481897bf022e256d51bb65b1f1b9..5474373e1bd935129bde3c1dcf11a6d132205d8e 100644
--- a/base/timer/hi_res_timer_manager_win.cc
+++ b/base/timer/hi_res_timer_manager_win.cc
@@ -4,21 +4,44 @@
#include "base/timer/hi_res_timer_manager.h"
+#include <algorithm>
+
+#include "base/atomicops.h"
+#include "base/metrics/histogram_macros.h"
#include "base/power_monitor/power_monitor.h"
+#include "base/task_scheduler/post_task.h"
#include "base/time/time.h"
namespace base {
+namespace {
+
+constexpr TimeDelta kUsageSampleInterval = TimeDelta::FromMinutes(10);
+
+void ReportHighResolutionTimerUsage() {
+ UMA_HISTOGRAM_PERCENTAGE("Windows.HighResolutionTimerUsage",
+ Time::GetHighResolutionTimerUsage());
+ // Reset usage for the next interval.
+ Time::ResetHighResolutionTimerUsage();
+}
+
+} // namespace
+
HighResolutionTimerManager::HighResolutionTimerManager()
: hi_res_clock_available_(false) {
- base::PowerMonitor* power_monitor = base::PowerMonitor::Get();
+ PowerMonitor* power_monitor = PowerMonitor::Get();
DCHECK(power_monitor != NULL);
power_monitor->AddObserver(this);
UseHiResClock(!power_monitor->IsOnBatteryPower());
+
+ // Start polling the high resolution timer usage.
+ Time::ResetHighResolutionTimerUsage();
+ timer_.Start(FROM_HERE, kUsageSampleInterval,
+ Bind(&ReportHighResolutionTimerUsage));
}
HighResolutionTimerManager::~HighResolutionTimerManager() {
- base::PowerMonitor::Get()->RemoveObserver(this);
+ PowerMonitor::Get()->RemoveObserver(this);
UseHiResClock(false);
}
@@ -26,11 +49,22 @@ void HighResolutionTimerManager::OnPowerStateChange(bool on_battery_power) {
UseHiResClock(!on_battery_power);
}
+void HighResolutionTimerManager::OnSuspend() {
+ // Stop polling the usage to avoid including the standby time.
+ timer_.Stop();
+}
+
+void HighResolutionTimerManager::OnResume() {
+ // Resume polling the usage.
+ Time::ResetHighResolutionTimerUsage();
+ timer_.Reset();
+}
+
void HighResolutionTimerManager::UseHiResClock(bool use) {
if (use == hi_res_clock_available_)
return;
hi_res_clock_available_ = use;
- base::Time::EnableHighResolutionTimer(use);
+ Time::EnableHighResolutionTimer(use);
}
} // namespace base
« no previous file with comments | « base/timer/hi_res_timer_manager_unittest.cc ('k') | content/gpu/gpu_main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698