1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/power_monitor/power_monitor.h" 6a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/power_monitor/power_monitor_source.h" 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace base { 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)static PowerMonitor* g_power_monitor = NULL; 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 12a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)PowerMonitor::PowerMonitor(scoped_ptr<PowerMonitorSource> source) 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : observers_(new ObserverListThreadSafe<PowerObserver>()), 14a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) source_(source.Pass()) { 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(!g_power_monitor); 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) g_power_monitor = this; 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)PowerMonitor::~PowerMonitor() { 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(this, g_power_monitor); 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) g_power_monitor = NULL; 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)PowerMonitor* PowerMonitor::Get() { 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return g_power_monitor; 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void PowerMonitor::AddObserver(PowerObserver* obs) { 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) observers_->AddObserver(obs); 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void PowerMonitor::RemoveObserver(PowerObserver* obs) { 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) observers_->RemoveObserver(obs); 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 37a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)PowerMonitorSource* PowerMonitor::Source() { 38a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return source_.get(); 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 41a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)bool PowerMonitor::IsOnBatteryPower() { 42a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return source_->IsOnBatteryPower(); 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 45a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void PowerMonitor::NotifyPowerStateChange(bool battery_in_use) { 46a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) DVLOG(1) << "PowerStateChange: " << (battery_in_use ? "On" : "Off") 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) << " battery"; 48a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) observers_->Notify(&PowerObserver::OnPowerStateChange, battery_in_use); 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void PowerMonitor::NotifySuspend() { 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DVLOG(1) << "Power Suspending"; 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) observers_->Notify(&PowerObserver::OnSuspend); 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void PowerMonitor::NotifyResume() { 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DVLOG(1) << "Power Resuming"; 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) observers_->Notify(&PowerObserver::OnResume); 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace base 62