Index: cc/scheduler/scheduler.cc |
diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc |
index 5b15a5a60f990de3f088e76bf89f5d903f41cd6b..88c27c103e33fe2d85302772a302663515a5715c 100644 |
--- a/cc/scheduler/scheduler.cc |
+++ b/cc/scheduler/scheduler.cc |
@@ -73,6 +73,7 @@ Scheduler::Scheduler( |
const SchedulerSettings& scheduler_settings, |
int layer_tree_host_id, |
const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, |
+ base::PowerMonitor* power_monitor, |
SchedulerFrameSourcesConstructor* frame_sources_constructor) |
: frame_source_(), |
primary_frame_source_(NULL), |
@@ -84,6 +85,7 @@ Scheduler::Scheduler( |
client_(client), |
layer_tree_host_id_(layer_tree_host_id), |
task_runner_(task_runner), |
+ power_monitor_(power_monitor), |
begin_retro_frame_posted_(false), |
state_machine_(scheduler_settings), |
inside_process_scheduled_actions_(false), |
@@ -117,9 +119,12 @@ Scheduler::Scheduler( |
background_frame_source_ = |
frame_sources_constructor->ConstructBackgroundFrameSource(this); |
frame_source_->AddSource(background_frame_source_); |
+ |
+ SetupPowerMonitoring(); |
} |
Scheduler::~Scheduler() { |
+ TeardownPowerMonitoring(); |
} |
base::TimeTicks Scheduler::Now() const { |
@@ -131,6 +136,27 @@ base::TimeTicks Scheduler::Now() const { |
return now; |
} |
+void Scheduler::SetupPowerMonitoring() { |
+ if (settings_.disable_hi_res_timer_tasks_on_battery) { |
+ DCHECK(power_monitor_); |
+ power_monitor_->AddObserver(this); |
+ state_machine_.SetImplLatencyTakesPriorityOnBattery( |
+ power_monitor_->IsOnBatteryPower()); |
+ } |
+} |
+ |
+void Scheduler::TeardownPowerMonitoring() { |
+ if (settings_.disable_hi_res_timer_tasks_on_battery) { |
+ DCHECK(power_monitor_); |
+ power_monitor_->RemoveObserver(this); |
+ } |
+} |
+ |
+void Scheduler::OnPowerStateChange(bool on_battery_power) { |
+ DCHECK(settings_.disable_hi_res_timer_tasks_on_battery); |
+ state_machine_.SetImplLatencyTakesPriorityOnBattery(on_battery_power); |
+} |
+ |
void Scheduler::CommitVSyncParameters(base::TimeTicks timebase, |
base::TimeDelta interval) { |
// TODO(brianderson): We should not be receiving 0 intervals. |