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

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

Powered by Google App Engine
This is Rietveld 408576698