| 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/power_policy_controller.h" | 5 #include "chromeos/dbus/power_policy_controller.h" |
| 6 | 6 |
| 7 #include "base/format_macros.h" | 7 #include "base/format_macros.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
| 10 #include "base/stringprintf.h" | 10 #include "base/stringprintf.h" |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 case PowerPolicyController::ACTION_DO_NOTHING: | 51 case PowerPolicyController::ACTION_DO_NOTHING: |
| 52 return power_manager::PowerManagementPolicy_Action_DO_NOTHING; | 52 return power_manager::PowerManagementPolicy_Action_DO_NOTHING; |
| 53 default: | 53 default: |
| 54 NOTREACHED() << "Unhandled action " << action; | 54 NOTREACHED() << "Unhandled action " << action; |
| 55 return power_manager::PowerManagementPolicy_Action_DO_NOTHING; | 55 return power_manager::PowerManagementPolicy_Action_DO_NOTHING; |
| 56 } | 56 } |
| 57 } | 57 } |
| 58 | 58 |
| 59 } // namespace | 59 } // namespace |
| 60 | 60 |
| 61 const int PowerPolicyController::kScreenLockAfterOffDelayMs = 10000; // 10 sec. |
| 62 |
| 61 // -1 is interpreted as "unset" by powerd, resulting in powerd's default | 63 // -1 is interpreted as "unset" by powerd, resulting in powerd's default |
| 62 // delays being used instead. There are no similarly-interpreted values | 64 // delays being used instead. There are no similarly-interpreted values |
| 63 // for the other fields, unfortunately (but the constructor-assigned values | 65 // for the other fields, unfortunately (but the constructor-assigned values |
| 64 // will only reach powerd if Chrome messes up and forgets to override them | 66 // will only reach powerd if Chrome messes up and forgets to override them |
| 65 // with the pref-assigned values). | 67 // with the pref-assigned values). |
| 66 PowerPolicyController::PrefValues::PrefValues() | 68 PowerPolicyController::PrefValues::PrefValues() |
| 67 : ac_screen_dim_delay_ms(-1), | 69 : ac_screen_dim_delay_ms(-1), |
| 68 ac_screen_off_delay_ms(-1), | 70 ac_screen_off_delay_ms(-1), |
| 69 ac_screen_lock_delay_ms(-1), | 71 ac_screen_lock_delay_ms(-1), |
| 70 ac_idle_warning_delay_ms(-1), | 72 ac_idle_warning_delay_ms(-1), |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 140 prefs_policy_.Clear(); | 142 prefs_policy_.Clear(); |
| 141 | 143 |
| 142 power_manager::PowerManagementPolicy::Delays* delays = | 144 power_manager::PowerManagementPolicy::Delays* delays = |
| 143 prefs_policy_.mutable_ac_delays(); | 145 prefs_policy_.mutable_ac_delays(); |
| 144 delays->set_screen_dim_ms(values.ac_screen_dim_delay_ms); | 146 delays->set_screen_dim_ms(values.ac_screen_dim_delay_ms); |
| 145 delays->set_screen_off_ms(values.ac_screen_off_delay_ms); | 147 delays->set_screen_off_ms(values.ac_screen_off_delay_ms); |
| 146 delays->set_screen_lock_ms(values.ac_screen_lock_delay_ms); | 148 delays->set_screen_lock_ms(values.ac_screen_lock_delay_ms); |
| 147 delays->set_idle_warning_ms(values.ac_idle_warning_delay_ms); | 149 delays->set_idle_warning_ms(values.ac_idle_warning_delay_ms); |
| 148 delays->set_idle_ms(values.ac_idle_delay_ms); | 150 delays->set_idle_ms(values.ac_idle_delay_ms); |
| 149 | 151 |
| 150 // If screen-locking is enabled, ensure that the screen is locked when | 152 // If screen-locking is enabled, ensure that the screen is locked soon |
| 151 // it's turned off due to user inactivity. | 153 // after it's turned off due to user inactivity. |
| 154 int64 lock_ms = delays->screen_off_ms() + kScreenLockAfterOffDelayMs; |
| 152 if (values.enable_screen_lock && delays->screen_off_ms() > 0 && | 155 if (values.enable_screen_lock && delays->screen_off_ms() > 0 && |
| 153 (delays->screen_lock_ms() <= 0 || | 156 (delays->screen_lock_ms() <= 0 || lock_ms < delays->screen_lock_ms()) && |
| 154 delays->screen_off_ms() < delays->screen_lock_ms())) { | 157 lock_ms < delays->idle_ms()) |
| 155 delays->set_screen_lock_ms(delays->screen_off_ms()); | 158 delays->set_screen_lock_ms(lock_ms); |
| 156 } | |
| 157 | 159 |
| 158 delays = prefs_policy_.mutable_battery_delays(); | 160 delays = prefs_policy_.mutable_battery_delays(); |
| 159 delays->set_screen_dim_ms(values.battery_screen_dim_delay_ms); | 161 delays->set_screen_dim_ms(values.battery_screen_dim_delay_ms); |
| 160 delays->set_screen_off_ms(values.battery_screen_off_delay_ms); | 162 delays->set_screen_off_ms(values.battery_screen_off_delay_ms); |
| 161 delays->set_screen_lock_ms(values.battery_screen_lock_delay_ms); | 163 delays->set_screen_lock_ms(values.battery_screen_lock_delay_ms); |
| 162 delays->set_idle_warning_ms(values.battery_idle_warning_delay_ms); | 164 delays->set_idle_warning_ms(values.battery_idle_warning_delay_ms); |
| 163 delays->set_idle_ms(values.battery_idle_delay_ms); | 165 delays->set_idle_ms(values.battery_idle_delay_ms); |
| 166 |
| 167 lock_ms = delays->screen_off_ms() + kScreenLockAfterOffDelayMs; |
| 164 if (values.enable_screen_lock && delays->screen_off_ms() > 0 && | 168 if (values.enable_screen_lock && delays->screen_off_ms() > 0 && |
| 165 (delays->screen_lock_ms() <= 0 || | 169 (delays->screen_lock_ms() <= 0 || lock_ms < delays->screen_lock_ms()) && |
| 166 delays->screen_off_ms() < delays->screen_lock_ms())) { | 170 lock_ms < delays->idle_ms()) |
| 167 delays->set_screen_lock_ms(delays->screen_off_ms()); | 171 delays->set_screen_lock_ms(lock_ms); |
| 168 } | |
| 169 | 172 |
| 170 prefs_policy_.set_idle_action(GetProtoAction(values.idle_action)); | 173 prefs_policy_.set_idle_action(GetProtoAction(values.idle_action)); |
| 171 prefs_policy_.set_lid_closed_action(GetProtoAction(values.lid_closed_action)); | 174 prefs_policy_.set_lid_closed_action(GetProtoAction(values.lid_closed_action)); |
| 172 prefs_policy_.set_use_audio_activity(values.use_audio_activity); | 175 prefs_policy_.set_use_audio_activity(values.use_audio_activity); |
| 173 prefs_policy_.set_use_video_activity(values.use_video_activity); | 176 prefs_policy_.set_use_video_activity(values.use_video_activity); |
| 174 prefs_policy_.set_presentation_idle_delay_factor( | 177 prefs_policy_.set_presentation_idle_delay_factor( |
| 175 values.presentation_idle_delay_factor); | 178 values.presentation_idle_delay_factor); |
| 176 prefs_policy_.set_user_activity_screen_dim_delay_factor( | 179 prefs_policy_.set_user_activity_screen_dim_delay_factor( |
| 177 values.user_activity_screen_dim_delay_factor); | 180 values.user_activity_screen_dim_delay_factor); |
| 178 | 181 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 216 void PowerPolicyController::SendCurrentPolicy() { | 219 void PowerPolicyController::SendCurrentPolicy() { |
| 217 std::string reason; | 220 std::string reason; |
| 218 | 221 |
| 219 power_manager::PowerManagementPolicy policy = prefs_policy_; | 222 power_manager::PowerManagementPolicy policy = prefs_policy_; |
| 220 if (prefs_were_set_) | 223 if (prefs_were_set_) |
| 221 reason = "Prefs"; | 224 reason = "Prefs"; |
| 222 | 225 |
| 223 if (honor_screen_wake_locks_ && !screen_wake_locks_.empty()) { | 226 if (honor_screen_wake_locks_ && !screen_wake_locks_.empty()) { |
| 224 policy.mutable_ac_delays()->set_screen_dim_ms(0); | 227 policy.mutable_ac_delays()->set_screen_dim_ms(0); |
| 225 policy.mutable_ac_delays()->set_screen_off_ms(0); | 228 policy.mutable_ac_delays()->set_screen_off_ms(0); |
| 229 policy.mutable_ac_delays()->set_screen_lock_ms(0); |
| 226 policy.mutable_battery_delays()->set_screen_dim_ms(0); | 230 policy.mutable_battery_delays()->set_screen_dim_ms(0); |
| 227 policy.mutable_battery_delays()->set_screen_off_ms(0); | 231 policy.mutable_battery_delays()->set_screen_off_ms(0); |
| 232 policy.mutable_battery_delays()->set_screen_lock_ms(0); |
| 228 } | 233 } |
| 229 | 234 |
| 230 if ((!screen_wake_locks_.empty() || !system_wake_locks_.empty()) && | 235 if ((!screen_wake_locks_.empty() || !system_wake_locks_.empty()) && |
| 231 (!policy.has_idle_action() || policy.idle_action() == | 236 (!policy.has_idle_action() || policy.idle_action() == |
| 232 power_manager::PowerManagementPolicy_Action_SUSPEND)) { | 237 power_manager::PowerManagementPolicy_Action_SUSPEND)) { |
| 233 policy.set_idle_action( | 238 policy.set_idle_action( |
| 234 power_manager::PowerManagementPolicy_Action_DO_NOTHING); | 239 power_manager::PowerManagementPolicy_Action_DO_NOTHING); |
| 235 } | 240 } |
| 236 | 241 |
| 237 for (WakeLockMap::const_iterator it = screen_wake_locks_.begin(); | 242 for (WakeLockMap::const_iterator it = screen_wake_locks_.begin(); |
| 238 it != screen_wake_locks_.end(); ++it) { | 243 it != screen_wake_locks_.end(); ++it) { |
| 239 reason += (reason.empty() ? "" : ", ") + it->second; | 244 reason += (reason.empty() ? "" : ", ") + it->second; |
| 240 } | 245 } |
| 241 for (WakeLockMap::const_iterator it = system_wake_locks_.begin(); | 246 for (WakeLockMap::const_iterator it = system_wake_locks_.begin(); |
| 242 it != system_wake_locks_.end(); ++it) { | 247 it != system_wake_locks_.end(); ++it) { |
| 243 reason += (reason.empty() ? "" : ", ") + it->second; | 248 reason += (reason.empty() ? "" : ", ") + it->second; |
| 244 } | 249 } |
| 245 | 250 |
| 246 if (!reason.empty()) | 251 if (!reason.empty()) |
| 247 policy.set_reason(reason); | 252 policy.set_reason(reason); |
| 248 client_->SetPolicy(policy); | 253 client_->SetPolicy(policy); |
| 249 } | 254 } |
| 250 | 255 |
| 251 void PowerPolicyController::SendEmptyPolicy() { | 256 void PowerPolicyController::SendEmptyPolicy() { |
| 252 client_->SetPolicy(power_manager::PowerManagementPolicy()); | 257 client_->SetPolicy(power_manager::PowerManagementPolicy()); |
| 253 } | 258 } |
| 254 | 259 |
| 255 } // namespace chromeos | 260 } // namespace chromeos |
| OLD | NEW |