Index: chromeos/dbus/power_manager_client.cc |
diff --git a/chromeos/dbus/power_manager_client.cc b/chromeos/dbus/power_manager_client.cc |
index a5d2322d3b1dd6fe14965d0c9e014d50a2bc8506..d3cbc815b8d5985330c04ff453aa69269e94aaed 100644 |
--- a/chromeos/dbus/power_manager_client.cc |
+++ b/chromeos/dbus/power_manager_client.cc |
@@ -20,6 +20,7 @@ |
#include "base/threading/platform_thread.h" |
#include "base/timer/timer.h" |
#include "chromeos/chromeos_switches.h" |
+#include "chromeos/dbus/fake_power_manager_client.h" |
#include "chromeos/dbus/power_manager/input_event.pb.h" |
#include "chromeos/dbus/power_manager/peripheral_battery_status.pb.h" |
#include "chromeos/dbus/power_manager/policy.pb.h" |
@@ -768,227 +769,6 @@ class PowerManagerClientImpl : public PowerManagerClient { |
DISALLOW_COPY_AND_ASSIGN(PowerManagerClientImpl); |
}; |
-// The PowerManagerClient implementation used on Linux desktop, |
-// which does nothing. |
-class PowerManagerClientStubImpl : public PowerManagerClient { |
- public: |
- PowerManagerClientStubImpl() |
- : discharging_(true), |
- battery_percentage_(40), |
- brightness_(50.0), |
- pause_count_(2), |
- cycle_count_(0), |
- num_pending_suspend_readiness_callbacks_(0), |
- weak_ptr_factory_(this) {} |
- |
- ~PowerManagerClientStubImpl() override {} |
- |
- int num_pending_suspend_readiness_callbacks() const { |
- return num_pending_suspend_readiness_callbacks_; |
- } |
- |
- // PowerManagerClient overrides: |
- void Init(dbus::Bus* bus) override { |
- ParseCommandLineSwitch(); |
- if (power_cycle_delay_ != base::TimeDelta()) { |
- update_timer_.Start(FROM_HERE, |
- power_cycle_delay_, |
- this, |
- &PowerManagerClientStubImpl::UpdateStatus); |
- } |
- } |
- |
- void AddObserver(Observer* observer) override { |
- observers_.AddObserver(observer); |
- } |
- |
- void RemoveObserver(Observer* observer) override { |
- observers_.RemoveObserver(observer); |
- } |
- |
- bool HasObserver(const Observer* observer) const override { |
- return observers_.HasObserver(observer); |
- } |
- |
- void SetRenderProcessManagerDelegate( |
- base::WeakPtr<RenderProcessManagerDelegate> delegate) override {} |
- |
- void DecreaseScreenBrightness(bool allow_off) override { |
- POWER_LOG(USER) << "Requested to descrease screen brightness"; |
- SetBrightness(brightness_ - 5.0, true); |
- } |
- |
- void IncreaseScreenBrightness() override { |
- POWER_LOG(USER) << "Requested to increase screen brightness"; |
- SetBrightness(brightness_ + 5.0, true); |
- } |
- |
- void SetScreenBrightnessPercent(double percent, bool gradual) override { |
- POWER_LOG(USER) << "Requested to set screen brightness to " << percent |
- << "% " << (gradual ? "gradually" : "instantaneously"); |
- SetBrightness(percent, false); |
- } |
- |
- void GetScreenBrightnessPercent( |
- const GetScreenBrightnessPercentCallback& callback) override { |
- POWER_LOG(USER) << "Requested to get screen brightness"; |
- callback.Run(brightness_); |
- } |
- |
- void DecreaseKeyboardBrightness() override { |
- POWER_LOG(USER) << "Requested to descrease keyboard brightness"; |
- } |
- |
- void IncreaseKeyboardBrightness() override { |
- POWER_LOG(USER) << "Requested to increase keyboard brightness"; |
- } |
- |
- void RequestStatusUpdate() override { |
- POWER_LOG(USER) << "Requested status update"; |
- base::MessageLoop::current()->PostTask( |
- FROM_HERE, base::Bind(&PowerManagerClientStubImpl::UpdateStatus, |
- weak_ptr_factory_.GetWeakPtr())); |
- } |
- |
- void RequestSuspend() override {} |
- void RequestRestart() override {} |
- void RequestShutdown() override {} |
- |
- void NotifyUserActivity(power_manager::UserActivityType type) override {} |
- void NotifyVideoActivity(bool is_fullscreen) override {} |
- void SetPolicy(const power_manager::PowerManagementPolicy& policy) override {} |
- void SetIsProjecting(bool is_projecting) override {} |
- base::Closure GetSuspendReadinessCallback() override { |
- num_pending_suspend_readiness_callbacks_++; |
- return base::Bind(&PowerManagerClientStubImpl::HandleSuspendReadiness, |
- weak_ptr_factory_.GetWeakPtr()); |
- } |
- int GetNumPendingSuspendReadinessCallbacks() override { |
- return num_pending_suspend_readiness_callbacks_; |
- } |
- |
- private: |
- void HandleSuspendReadiness() { |
- num_pending_suspend_readiness_callbacks_--; |
- } |
- |
- void UpdateStatus() { |
- if (pause_count_ > 0) { |
- pause_count_--; |
- if (pause_count_ == 2) |
- discharging_ = !discharging_; |
- } else { |
- if (discharging_) |
- battery_percentage_ -= (battery_percentage_ <= 10 ? 1 : 10); |
- else |
- battery_percentage_ += (battery_percentage_ >= 10 ? 10 : 1); |
- battery_percentage_ = std::min(std::max(battery_percentage_, 0), 100); |
- // We pause at 0 and 100% so that it's easier to check those conditions. |
- if (battery_percentage_ == 0 || battery_percentage_ == 100) { |
- pause_count_ = 4; |
- if (battery_percentage_ == 100) |
- cycle_count_ = (cycle_count_ + 1) % 3; |
- } |
- } |
- |
- const int kSecondsToEmptyFullBattery = 3 * 60 * 60; // 3 hours. |
- int64 remaining_battery_time = |
- std::max(1, battery_percentage_ * kSecondsToEmptyFullBattery / 100); |
- |
- props_.Clear(); |
- |
- switch (cycle_count_) { |
- case 0: |
- // Say that the system is charging with AC connected and |
- // discharging without any charger connected. |
- props_.set_external_power(discharging_ ? |
- power_manager::PowerSupplyProperties_ExternalPower_DISCONNECTED : |
- power_manager::PowerSupplyProperties_ExternalPower_AC); |
- break; |
- case 1: |
- // Say that the system is both charging and discharging on USB |
- // (i.e. a low-power charger). |
- props_.set_external_power( |
- power_manager::PowerSupplyProperties_ExternalPower_USB); |
- break; |
- case 2: |
- // Say that the system is both charging and discharging on AC. |
- props_.set_external_power( |
- power_manager::PowerSupplyProperties_ExternalPower_AC); |
- break; |
- default: |
- NOTREACHED() << "Unhandled cycle " << cycle_count_; |
- } |
- |
- if (battery_percentage_ == 100 && !discharging_) { |
- props_.set_battery_state( |
- power_manager::PowerSupplyProperties_BatteryState_FULL); |
- } else if (!discharging_) { |
- props_.set_battery_state( |
- power_manager::PowerSupplyProperties_BatteryState_CHARGING); |
- props_.set_battery_time_to_full_sec(std::max(static_cast<int64>(1), |
- kSecondsToEmptyFullBattery - remaining_battery_time)); |
- } else { |
- props_.set_battery_state( |
- power_manager::PowerSupplyProperties_BatteryState_DISCHARGING); |
- props_.set_battery_time_to_empty_sec(remaining_battery_time); |
- } |
- |
- props_.set_battery_percent(battery_percentage_); |
- props_.set_is_calculating_battery_time(pause_count_ > 1); |
- |
- FOR_EACH_OBSERVER(Observer, observers_, PowerChanged(props_)); |
- } |
- |
- void SetBrightness(double percent, bool user_initiated) { |
- brightness_ = std::min(std::max(0.0, percent), 100.0); |
- int brightness_level = static_cast<int>(brightness_); |
- FOR_EACH_OBSERVER(Observer, observers_, |
- BrightnessChanged(brightness_level, user_initiated)); |
- } |
- |
- void ParseCommandLineSwitch() { |
- base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
- if (!command_line || !command_line->HasSwitch(switches::kPowerStub)) |
- return; |
- std::string option_str = |
- command_line->GetSwitchValueASCII(switches::kPowerStub); |
- base::StringPairs string_pairs; |
- base::SplitStringIntoKeyValuePairs(option_str, '=', ',', &string_pairs); |
- for (base::StringPairs::iterator iter = string_pairs.begin(); |
- iter != string_pairs.end(); ++iter) { |
- ParseOption((*iter).first, (*iter).second); |
- } |
- } |
- |
- void ParseOption(const std::string& arg0, const std::string& arg1) { |
- if (arg0 == "cycle" || arg0 == "interactive") { |
- int seconds = 1; |
- if (!arg1.empty()) |
- base::StringToInt(arg1, &seconds); |
- power_cycle_delay_ = base::TimeDelta::FromSeconds(seconds); |
- } |
- } |
- |
- base::TimeDelta power_cycle_delay_; // Time over which to cycle power state |
- bool discharging_; |
- int battery_percentage_; |
- double brightness_; |
- int pause_count_; |
- int cycle_count_; |
- base::ObserverList<Observer> observers_; |
- base::RepeatingTimer<PowerManagerClientStubImpl> update_timer_; |
- power_manager::PowerSupplyProperties props_; |
- |
- // Number of callbacks returned by GetSuspendReadinessCallback() but not yet |
- // invoked. |
- int num_pending_suspend_readiness_callbacks_; |
- |
- // Note: This should remain the last member so it'll be destroyed and |
- // invalidate its weak pointers before any other members are destroyed. |
- base::WeakPtrFactory<PowerManagerClientStubImpl> weak_ptr_factory_; |
-}; |
- |
PowerManagerClient::PowerManagerClient() { |
} |
@@ -1001,7 +781,7 @@ PowerManagerClient* PowerManagerClient::Create( |
if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) |
return new PowerManagerClientImpl(); |
DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); |
- return new PowerManagerClientStubImpl(); |
+ return new FakePowerManagerClient(); |
mozartalouis
2015/06/30 02:16:09
@derat @oshima. Not exactly sure why this fails wh
Daniel Erat
2015/06/30 14:03:40
here's the problem:
- you're instantiating a Fake
stevenjb
2015/06/30 15:11:04
Yes, we should be replacing "stub" implementations
|
} |
} // namespace chromeos |