Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 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 "chromeos/dbus/dbus_thread_manager.h" | |
| 6 #include "chromeos/dbus/power_manager/power_supply_properties.pb.h" | |
| 7 #include "chromeos/power/power_data_collector.h" | |
| 8 #include "content/public/browser/browser_thread.h" | |
|
stevenjb
2013/12/11 20:54:37
We shouldn't use BrowserThread in src/chromeos, b
Siva Chandra
2013/12/11 21:30:56
Removed.
| |
| 9 | |
| 10 namespace chromeos { | |
| 11 | |
| 12 // The global PowerDataCollector instance. | |
| 13 static PowerDataCollector* power_data_collector; | |
| 14 | |
| 15 // Sequence name for callback sequenced tasks which accumulate power supply | |
| 16 // snapshots. See PowerDataCollector::PowerChanged below. | |
| 17 const char kPowerSupplySnapshotSequence[] = | |
| 18 "power_data_collector__power_supply_snapshot_sequence"; | |
| 19 | |
| 20 PowerDataCollector::PowerDataCollector(const bool testing) | |
| 21 : testing_(testing) { | |
| 22 AddRef(); | |
| 23 | |
| 24 if (!testing) { | |
| 25 DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this); | |
| 26 } | |
| 27 } | |
| 28 | |
| 29 void PowerDataCollector::ShutdownInstance() { | |
| 30 if (!testing_) { | |
| 31 DBusThreadManager *dbus_manager = DBusThreadManager::Get(); | |
| 32 | |
| 33 // Destroy the power data collector before the DBusThreadManager. | |
| 34 CHECK(dbus_manager); | |
| 35 | |
| 36 dbus_manager->GetPowerManagerClient()->RemoveObserver(this); | |
| 37 } | |
| 38 | |
| 39 Release(); | |
| 40 } | |
| 41 | |
| 42 void PowerDataCollector::PowerChanged( | |
| 43 const power_manager::PowerSupplyProperties& prop) { | |
| 44 PowerSupplySnapshot snapshot = { | |
| 45 base::TimeTicks::Now(), | |
| 46 prop.external_power() != | |
| 47 power_manager::PowerSupplyProperties::DISCONNECTED, | |
| 48 prop.battery_percent()}; | |
|
stevenjb
2013/12/11 20:54:37
} on new line
Siva Chandra
2013/12/11 21:30:56
Done.
| |
| 49 | |
| 50 content::BrowserThread::PostBlockingPoolSequencedTask( | |
| 51 kPowerSupplySnapshotSequence, | |
| 52 FROM_HERE, | |
| 53 base::Bind( | |
| 54 &PowerDataCollector::AppendPowerSupplySnapshot, this, snapshot)); | |
|
stevenjb
2013/12/11 20:54:37
It should be safe to do this immediately, no need
Siva Chandra
2013/12/11 21:30:56
Done.
| |
| 55 } | |
| 56 | |
| 57 void PowerDataCollector::AppendPowerSupplySnapshot( | |
| 58 const PowerDataCollector::PowerSupplySnapshot& snapshot) { | |
| 59 base::AutoLock auto_lock(power_supply_lock_); | |
| 60 power_supply_.push_back(snapshot); | |
| 61 } | |
| 62 | |
| 63 void PowerDataCollector::Initialize() { | |
| 64 // Check that power data collector is initialized only after the | |
| 65 // DBusThreadManager is initialized. | |
| 66 CHECK(DBusThreadManager::Get()); | |
| 67 | |
| 68 // Do no allow intializing twice. | |
| 69 CHECK(power_data_collector == NULL); | |
| 70 | |
| 71 power_data_collector = new PowerDataCollector(false); | |
| 72 } | |
| 73 | |
| 74 void PowerDataCollector::InitializeTesting() { | |
| 75 power_data_collector = new PowerDataCollector(true); | |
| 76 } | |
| 77 | |
| 78 PowerDataCollector *PowerDataCollector::Get() { | |
| 79 CHECK(power_data_collector); | |
| 80 | |
| 81 return power_data_collector; | |
| 82 } | |
| 83 | |
| 84 void PowerDataCollector::Shutdown() { | |
| 85 // Shutdown only if initialized. | |
| 86 CHECK(power_data_collector); | |
| 87 | |
| 88 power_data_collector->ShutdownInstance(); | |
| 89 | |
| 90 // NULL it to protect from improper usage after shutdown. | |
| 91 power_data_collector = NULL; | |
| 92 } | |
| 93 | |
| 94 void PowerDataCollector::LockPowerSupplyData(void) { | |
| 95 power_data_collector->power_supply_lock_.Acquire(); | |
| 96 } | |
| 97 | |
| 98 void PowerDataCollector::UnlockPowerSupplyData(void) { | |
| 99 power_data_collector->power_supply_lock_.Release(); | |
| 100 } | |
| 101 | |
| 102 std::vector<PowerDataCollector::PowerSupplySnapshot> | |
| 103 &PowerDataCollector::GetPowerSupplyData() { | |
| 104 // Do not allow calling this method after shutdown or before initialization. | |
| 105 CHECK(power_data_collector); | |
| 106 | |
| 107 return power_data_collector->power_supply_; | |
| 108 } | |
| 109 | |
| 110 } // namespace chromeos | |
| OLD | NEW |