OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 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 | 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 "chromeos/dbus/fake_power_manager_client.h" | 5 #include "chromeos/dbus/fake_power_manager_client.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/time/time.h" | 9 #include "base/time/time.h" |
| 10 #include "components/device_event_log/device_event_log.h" |
10 | 11 |
11 namespace chromeos { | 12 namespace chromeos { |
12 | 13 |
13 FakePowerManagerClient::FakePowerManagerClient() | 14 FakePowerManagerClient::FakePowerManagerClient() |
14 : num_request_restart_calls_(0), | 15 : is_charging_(false), |
| 16 is_calculating_(false), |
| 17 battery_percentage_(50), |
| 18 power_source_(0), |
| 19 num_request_restart_calls_(0), |
15 num_request_shutdown_calls_(0), | 20 num_request_shutdown_calls_(0), |
16 num_set_policy_calls_(0), | 21 num_set_policy_calls_(0), |
17 num_set_is_projecting_calls_(0), | 22 num_set_is_projecting_calls_(0), |
18 num_pending_suspend_readiness_callbacks_(0), | 23 num_pending_suspend_readiness_callbacks_(0), |
19 is_projecting_(false) { | 24 is_projecting_(false), |
| 25 weak_ptr_factory_(this) { |
20 } | 26 } |
21 | 27 |
22 FakePowerManagerClient::~FakePowerManagerClient() { | 28 FakePowerManagerClient::~FakePowerManagerClient() { |
23 } | 29 } |
24 | 30 |
25 void FakePowerManagerClient::Init(dbus::Bus* bus) { | 31 void FakePowerManagerClient::Init(dbus::Bus* bus) { |
| 32 UpdatePowerStatus(); |
26 } | 33 } |
27 | 34 |
28 void FakePowerManagerClient::AddObserver(Observer* observer) { | 35 void FakePowerManagerClient::AddObserver(Observer* observer) { |
29 observers_.AddObserver(observer); | 36 observers_.AddObserver(observer); |
30 } | 37 } |
31 | 38 |
32 void FakePowerManagerClient::RemoveObserver(Observer* observer) { | 39 void FakePowerManagerClient::RemoveObserver(Observer* observer) { |
33 observers_.RemoveObserver(observer); | 40 observers_.RemoveObserver(observer); |
34 } | 41 } |
35 | 42 |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 FOR_EACH_OBSERVER(Observer, observers_, DarkSuspendImminent()); | 129 FOR_EACH_OBSERVER(Observer, observers_, DarkSuspendImminent()); |
123 } | 130 } |
124 | 131 |
125 void FakePowerManagerClient::SendPowerButtonEvent( | 132 void FakePowerManagerClient::SendPowerButtonEvent( |
126 bool down, | 133 bool down, |
127 const base::TimeTicks& timestamp) { | 134 const base::TimeTicks& timestamp) { |
128 FOR_EACH_OBSERVER(Observer, observers_, | 135 FOR_EACH_OBSERVER(Observer, observers_, |
129 PowerButtonEventReceived(down, timestamp)); | 136 PowerButtonEventReceived(down, timestamp)); |
130 } | 137 } |
131 | 138 |
| 139 void FakePowerManagerClient::UpdateBatteryPercentage(int percentage) { |
| 140 battery_percentage_ = percentage; |
| 141 UpdatePowerStatus(); |
| 142 } |
| 143 |
| 144 void FakePowerManagerClient::UpdateBatteryFullTimeToEmpty(int time_in_hours) { |
| 145 hours_to_empty_full_battery = time_in_hours * 60 * 60; |
| 146 UpdatePowerStatus(); |
| 147 } |
| 148 |
| 149 void FakePowerManagerClient::UpdateExternalPower(int power_source) { |
| 150 power_source_ = power_source; |
| 151 FOR_EACH_OBSERVER(Observer, observers_, PowerChanged(props_)); |
| 152 } |
| 153 |
| 154 void FakePowerManagerClient::UpdateIsBatteryCharging(bool is_charging) { |
| 155 is_charging_ = is_charging; |
| 156 UpdatePowerStatus(); |
| 157 } |
| 158 |
| 159 void FakePowerManagerClient::UpdateIsCalculatingBatteryTime( |
| 160 bool is_calculating) { |
| 161 is_calculating_ = is_calculating; |
| 162 UpdatePowerStatus(); |
| 163 } |
| 164 |
| 165 void FakePowerManagerClient::UpdatePowerStatus() { |
| 166 int64 remaining_battery_time = |
| 167 std::max(1, battery_percentage_ * hours_to_empty_full_battery / 100); |
| 168 |
| 169 props_.Clear(); |
| 170 |
| 171 switch (power_source_) { |
| 172 case 0: |
| 173 // Say that the system is charging with AC connected or |
| 174 // discharging without any charger connected. |
| 175 props_.set_external_power( |
| 176 !is_charging_ |
| 177 ? power_manager::PowerSupplyProperties_ExternalPower_DISCONNECTED |
| 178 : power_manager::PowerSupplyProperties_ExternalPower_AC); |
| 179 break; |
| 180 case 1: |
| 181 // Say that the system is both charging and discharging on USB |
| 182 // (i.e. a low-power charger). |
| 183 props_.set_external_power( |
| 184 power_manager::PowerSupplyProperties_ExternalPower_USB); |
| 185 break; |
| 186 case 2: |
| 187 // Say that the system is both charging and discharging on AC. |
| 188 props_.set_external_power( |
| 189 power_manager::PowerSupplyProperties_ExternalPower_AC); |
| 190 break; |
| 191 default: |
| 192 NOTREACHED() << "Unhandled power source " << power_source_; |
| 193 } |
| 194 |
| 195 if (battery_percentage_ == 100 && is_charging_) { |
| 196 props_.set_battery_state( |
| 197 power_manager::PowerSupplyProperties_BatteryState_FULL); |
| 198 } else if (is_charging_) { |
| 199 props_.set_battery_state( |
| 200 power_manager::PowerSupplyProperties_BatteryState_CHARGING); |
| 201 props_.set_battery_time_to_full_sec( |
| 202 std::max(static_cast<int64>(1), |
| 203 hours_to_empty_full_battery - remaining_battery_time)); |
| 204 } else { |
| 205 props_.set_battery_state( |
| 206 power_manager::PowerSupplyProperties_BatteryState_DISCHARGING); |
| 207 props_.set_battery_time_to_empty_sec(remaining_battery_time); |
| 208 } |
| 209 |
| 210 props_.set_is_calculating_battery_time(is_calculating_); |
| 211 props_.set_battery_percent(battery_percentage_); |
| 212 |
| 213 FOR_EACH_OBSERVER(Observer, observers_, PowerChanged(props_)); |
| 214 } |
| 215 |
132 void FakePowerManagerClient::HandleSuspendReadiness() { | 216 void FakePowerManagerClient::HandleSuspendReadiness() { |
133 CHECK(num_pending_suspend_readiness_callbacks_ > 0); | 217 CHECK(num_pending_suspend_readiness_callbacks_ > 0); |
134 | 218 |
135 --num_pending_suspend_readiness_callbacks_; | 219 --num_pending_suspend_readiness_callbacks_; |
136 } | 220 } |
137 | 221 |
138 } // namespace chromeos | 222 } // namespace chromeos |
OLD | NEW |