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

Side by Side Diff: chrome/browser/chromeos/cros_power_library.cc

Issue 339013: cros: doing dbus stuff on the file thread==disaster. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 1 month 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
« no previous file with comments | « chrome/browser/chromeos/cros_power_library.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/cros_power_library.h" 5 #include "chrome/browser/chromeos/cros_power_library.h"
6 6
7 #include "base/message_loop.h" 7 #include "base/message_loop.h"
8 #include "base/string_util.h" 8 #include "base/string_util.h"
9 #include "chrome/browser/chrome_thread.h" 9 #include "chrome/browser/chrome_thread.h"
10 #include "chrome/browser/chromeos/cros_library.h" 10 #include "chrome/browser/chromeos/cros_library.h"
11 11
12 // Allows InvokeLater without adding refcounting. This class is a Singleton and 12 // Allows InvokeLater without adding refcounting. This class is a Singleton and
13 // won't be deleted until it's last InvokeLater is run. 13 // won't be deleted until it's last InvokeLater is run.
14 template <> 14 template <>
15 struct RunnableMethodTraits<CrosPowerLibrary> { 15 struct RunnableMethodTraits<CrosPowerLibrary> {
16 void RetainCallee(CrosPowerLibrary* obj) {} 16 void RetainCallee(CrosPowerLibrary* obj) {}
17 void ReleaseCallee(CrosPowerLibrary* obj) {} 17 void ReleaseCallee(CrosPowerLibrary* obj) {}
18 }; 18 };
19 19
20 CrosPowerLibrary::CrosPowerLibrary() : status_(chromeos::PowerStatus()) { 20 CrosPowerLibrary::CrosPowerLibrary() : status_(chromeos::PowerStatus()) {
21 if (CrosLibrary::loaded()) { 21 if (CrosLibrary::loaded()) {
22 MessageLoop* loop = ChromeThread::GetMessageLoop(ChromeThread::FILE); 22 Init();
23 if (loop)
24 loop->PostTask(FROM_HERE, NewRunnableMethod(this,
25 &CrosPowerLibrary::InitOnBackgroundThread));
26 } 23 }
27 } 24 }
28 25
29 CrosPowerLibrary::~CrosPowerLibrary() { 26 CrosPowerLibrary::~CrosPowerLibrary() {
30 if (CrosLibrary::loaded()) { 27 if (CrosLibrary::loaded()) {
31 // FILE thread is already gone by the time we get to this destructor.
32 // So it's ok to just make the disconnect call on the main thread.
33 chromeos::DisconnectPowerStatus(power_status_connection_); 28 chromeos::DisconnectPowerStatus(power_status_connection_);
34 } 29 }
35 } 30 }
36 31
37 // static 32 // static
38 CrosPowerLibrary* CrosPowerLibrary::Get() { 33 CrosPowerLibrary* CrosPowerLibrary::Get() {
39 return Singleton<CrosPowerLibrary>::get(); 34 return Singleton<CrosPowerLibrary>::get();
40 } 35 }
41 36
42 // static 37 // static
(...skipping 30 matching lines...) Expand all
73 return base::TimeDelta::FromSeconds(status_.battery_time_to_full); 68 return base::TimeDelta::FromSeconds(status_.battery_time_to_full);
74 } 69 }
75 70
76 // static 71 // static
77 void CrosPowerLibrary::PowerStatusChangedHandler(void* object, 72 void CrosPowerLibrary::PowerStatusChangedHandler(void* object,
78 const chromeos::PowerStatus& status) { 73 const chromeos::PowerStatus& status) {
79 CrosPowerLibrary* power = static_cast<CrosPowerLibrary*>(object); 74 CrosPowerLibrary* power = static_cast<CrosPowerLibrary*>(object);
80 power->UpdatePowerStatus(status); 75 power->UpdatePowerStatus(status);
81 } 76 }
82 77
83 void CrosPowerLibrary::InitOnBackgroundThread() { 78 void CrosPowerLibrary::Init() {
84 power_status_connection_ = chromeos::MonitorPowerStatus( 79 power_status_connection_ = chromeos::MonitorPowerStatus(
85 &PowerStatusChangedHandler, this); 80 &PowerStatusChangedHandler, this);
86 } 81 }
87 82
88 void CrosPowerLibrary::UpdatePowerStatus(const chromeos::PowerStatus& status) { 83 void CrosPowerLibrary::UpdatePowerStatus(const chromeos::PowerStatus& status) {
89 // Make sure we run on UI thread. 84 // Make sure we run on UI thread.
90 if (!ChromeThread::CurrentlyOn(ChromeThread::UI)) { 85 if (!ChromeThread::CurrentlyOn(ChromeThread::UI)) {
91 MessageLoop* loop = ChromeThread::GetMessageLoop(ChromeThread::UI); 86 MessageLoop* loop = ChromeThread::GetMessageLoop(ChromeThread::UI);
92 if (loop) 87 if (loop)
93 loop->PostTask(FROM_HERE, NewRunnableMethod(this, 88 loop->PostTask(FROM_HERE, NewRunnableMethod(this,
94 &CrosPowerLibrary::UpdatePowerStatus, status)); 89 &CrosPowerLibrary::UpdatePowerStatus, status));
95 return; 90 return;
96 } 91 }
97 92
98 DLOG(INFO) << "Power" << 93 DLOG(INFO) << "Power" <<
99 " lpo=" << status.line_power_on << 94 " lpo=" << status.line_power_on <<
100 " sta=" << status.battery_state << 95 " sta=" << status.battery_state <<
101 " per=" << status.battery_percentage << 96 " per=" << status.battery_percentage <<
102 " tte=" << status.battery_time_to_empty << 97 " tte=" << status.battery_time_to_empty <<
103 " ttf=" << status.battery_time_to_full; 98 " ttf=" << status.battery_time_to_full;
104 status_ = status; 99 status_ = status;
105 FOR_EACH_OBSERVER(Observer, observers_, PowerChanged(this)); 100 FOR_EACH_OBSERVER(Observer, observers_, PowerChanged(this));
106 } 101 }
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/cros_power_library.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698