Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(101)

Side by Side Diff: chromeos/power/power_data_collector.cc

Issue 101963004: [chromeos] New PowerManagerClient observer to collect power data. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments in patch set 2 Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698