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