OLD | NEW |
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 return; |
23 if (loop) | 23 |
24 loop->PostTask(FROM_HERE, NewRunnableMethod(this, | 24 ChromeThread::PostTask( |
25 &CrosPowerLibrary::InitOnBackgroundThread)); | 25 ChromeThread::FILE, FROM_HERE, |
26 } | 26 NewRunnableMethod(this, &CrosPowerLibrary::InitOnBackgroundThread)); |
27 } | 27 } |
28 | 28 |
29 CrosPowerLibrary::~CrosPowerLibrary() { | 29 CrosPowerLibrary::~CrosPowerLibrary() { |
30 if (CrosLibrary::loaded()) { | 30 if (CrosLibrary::loaded()) { |
31 // FILE thread is already gone by the time we get to this destructor. | 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. | 32 // So it's ok to just make the disconnect call on the main thread. |
33 chromeos::DisconnectPowerStatus(power_status_connection_); | 33 chromeos::DisconnectPowerStatus(power_status_connection_); |
34 } | 34 } |
35 } | 35 } |
36 | 36 |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 } | 84 } |
85 | 85 |
86 void CrosPowerLibrary::InitOnBackgroundThread() { | 86 void CrosPowerLibrary::InitOnBackgroundThread() { |
87 power_status_connection_ = chromeos::MonitorPowerStatus( | 87 power_status_connection_ = chromeos::MonitorPowerStatus( |
88 &PowerStatusChangedHandler, this); | 88 &PowerStatusChangedHandler, this); |
89 } | 89 } |
90 | 90 |
91 void CrosPowerLibrary::UpdatePowerStatus(const chromeos::PowerStatus& status) { | 91 void CrosPowerLibrary::UpdatePowerStatus(const chromeos::PowerStatus& status) { |
92 // Make sure we run on UI thread. | 92 // Make sure we run on UI thread. |
93 if (!ChromeThread::CurrentlyOn(ChromeThread::UI)) { | 93 if (!ChromeThread::CurrentlyOn(ChromeThread::UI)) { |
94 MessageLoop* loop = ChromeThread::GetMessageLoop(ChromeThread::UI); | 94 ChromeThread::PostTask( |
95 if (loop) | 95 ChromeThread::UI, FROM_HERE, |
96 loop->PostTask(FROM_HERE, NewRunnableMethod(this, | 96 NewRunnableMethod(this, &CrosPowerLibrary::UpdatePowerStatus, status)); |
97 &CrosPowerLibrary::UpdatePowerStatus, status)); | |
98 return; | 97 return; |
99 } | 98 } |
100 | 99 |
101 DLOG(INFO) << "Power" << | 100 DLOG(INFO) << "Power" << |
102 " lpo=" << status.line_power_on << | 101 " lpo=" << status.line_power_on << |
103 " sta=" << status.battery_state << | 102 " sta=" << status.battery_state << |
104 " per=" << status.battery_percentage << | 103 " per=" << status.battery_percentage << |
105 " tte=" << status.battery_time_to_empty << | 104 " tte=" << status.battery_time_to_empty << |
106 " ttf=" << status.battery_time_to_full; | 105 " ttf=" << status.battery_time_to_full; |
107 status_ = status; | 106 status_ = status; |
108 FOR_EACH_OBSERVER(Observer, observers_, PowerChanged(this)); | 107 FOR_EACH_OBSERVER(Observer, observers_, PowerChanged(this)); |
109 } | 108 } |
OLD | NEW |