1 // 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.
5 #include "chromeos/power/power_data_collector.h"
7 #include "base/logging.h"
8 #include "chromeos/dbus/dbus_thread_manager.h"
9 #include "chromeos/dbus/power_manager/power_supply_properties.pb.h"
15 // The global PowerDataCollector instance.
16 PowerDataCollector* g_power_data_collector = NULL;
20 const int PowerDataCollector::kSampleTimeLimitSec = 24 * 60 * 60;
23 void PowerDataCollector::Initialize() {
24 // Check that power data collector is initialized only after the
25 // DBusThreadManager is initialized.
26 CHECK(DBusThreadManager::Get());
27 CHECK(g_power_data_collector == NULL);
28 g_power_data_collector = new PowerDataCollector();
32 void PowerDataCollector::Shutdown() {
33 // Shutdown only if initialized.
34 CHECK(g_power_data_collector);
35 delete g_power_data_collector;
36 g_power_data_collector = NULL;
40 PowerDataCollector* PowerDataCollector::Get() {
41 CHECK(g_power_data_collector);
42 return g_power_data_collector;
45 void PowerDataCollector::PowerChanged(
46 const power_manager::PowerSupplyProperties& prop) {
47 PowerSupplySnapshot snapshot;
48 snapshot.time = base::TimeTicks::Now();
49 snapshot.external_power = (prop.external_power() !=
50 power_manager::PowerSupplyProperties::DISCONNECTED);
51 snapshot.battery_percent = prop.battery_percent();
52 snapshot.battery_discharge_rate = prop.battery_discharge_rate();
53 AddSnapshot(snapshot);
56 PowerDataCollector::PowerDataCollector() {
57 DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this);
60 PowerDataCollector::~PowerDataCollector() {
61 DBusThreadManager* dbus_manager = DBusThreadManager::Get();
63 dbus_manager->GetPowerManagerClient()->RemoveObserver(this);
66 void PowerDataCollector::AddSnapshot(const PowerSupplySnapshot& snapshot) {
67 while (!power_supply_data_.empty()) {
68 const PowerSupplySnapshot& first = power_supply_data_.front();
69 if (snapshot.time - first.time >
70 base::TimeDelta::FromSeconds(kSampleTimeLimitSec)) {
71 power_supply_data_.pop_front();
76 power_supply_data_.push_back(snapshot);
79 PowerDataCollector::PowerSupplySnapshot::PowerSupplySnapshot()
80 : time(base::TimeTicks::Now()),
81 external_power(false),
83 battery_discharge_rate(0.0) {
86 } // namespace chromeos