| Index: chromeos/dbus/power_manager_client.cc
|
| diff --git a/chromeos/dbus/power_manager_client.cc b/chromeos/dbus/power_manager_client.cc
|
| index 9019dd9c0e042d3d4a0cf3b0e7ab2d2d332f5c48..539d96abed8a6ecf05bec88c04518914eec39030 100644
|
| --- a/chromeos/dbus/power_manager_client.cc
|
| +++ b/chromeos/dbus/power_manager_client.cc
|
| @@ -14,11 +14,15 @@
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/message_loop/message_loop.h"
|
| #include "base/observer_list.h"
|
| +#include "base/strings/string_number_conversions.h"
|
| +#include "base/strings/string_split.h"
|
| #include "base/strings/stringprintf.h"
|
| #include "base/threading/platform_thread.h"
|
| #include "base/time/time.h"
|
| #include "base/timer/timer.h"
|
| #include "chromeos/chromeos_switches.h"
|
| +#include "chromeos/dbus/dbus_command_line_helper.h"
|
| +#include "chromeos/dbus/dbus_thread_manager.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"
|
| @@ -654,20 +658,23 @@ class PowerManagerClientImpl : public PowerManagerClient {
|
| DISALLOW_COPY_AND_ASSIGN(PowerManagerClientImpl);
|
| };
|
|
|
| -// The PowerManagerClient implementation used on Linux desktop,
|
| -// which does nothing.
|
| -class PowerManagerClientStubImpl : public PowerManagerClient {
|
| +// The fake PowerManagerClient implementation used on Linux desktop. This
|
| +// can simulate a battery draining/charging, etc, for testing UI.
|
| +class FakePowerManagerClient : public PowerManagerClient {
|
| public:
|
| - PowerManagerClientStubImpl()
|
| - : discharging_(true),
|
| + FakePowerManagerClient()
|
| + : power_cycle_delay_(false),
|
| + discharging_(true),
|
| battery_percentage_(40),
|
| brightness_(50.0),
|
| pause_count_(2),
|
| cycle_count_(0),
|
| num_pending_suspend_readiness_callbacks_(0),
|
| - weak_ptr_factory_(this) {}
|
| + weak_ptr_factory_(this) {
|
| + ParseCommandLineSwitch();
|
| + }
|
|
|
| - virtual ~PowerManagerClientStubImpl() {}
|
| + virtual ~FakePowerManagerClient() {}
|
|
|
| int num_pending_suspend_readiness_callbacks() const {
|
| return num_pending_suspend_readiness_callbacks_;
|
| @@ -675,12 +682,11 @@ class PowerManagerClientStubImpl : public PowerManagerClient {
|
|
|
| // PowerManagerClient overrides:
|
| virtual void Init(dbus::Bus* bus) OVERRIDE {
|
| - if (CommandLine::ForCurrentProcess()->HasSwitch(
|
| - chromeos::switches::kEnableStubInteractive)) {
|
| - const int kStatusUpdateMs = 1000;
|
| + if (power_cycle_delay_) {
|
| update_timer_.Start(FROM_HERE,
|
| - base::TimeDelta::FromMilliseconds(kStatusUpdateMs), this,
|
| - &PowerManagerClientStubImpl::UpdateStatus);
|
| + base::TimeDelta::FromSeconds(power_cycle_delay_),
|
| + this,
|
| + &FakePowerManagerClient::UpdateStatus);
|
| }
|
| }
|
|
|
| @@ -728,7 +734,7 @@ class PowerManagerClientStubImpl : public PowerManagerClient {
|
|
|
| virtual void RequestStatusUpdate() OVERRIDE {
|
| base::MessageLoop::current()->PostTask(FROM_HERE,
|
| - base::Bind(&PowerManagerClientStubImpl::UpdateStatus,
|
| + base::Bind(&FakePowerManagerClient::UpdateStatus,
|
| weak_ptr_factory_.GetWeakPtr()));
|
| }
|
|
|
| @@ -743,7 +749,7 @@ class PowerManagerClientStubImpl : public PowerManagerClient {
|
| virtual void SetIsProjecting(bool is_projecting) OVERRIDE {}
|
| virtual base::Closure GetSuspendReadinessCallback() OVERRIDE {
|
| num_pending_suspend_readiness_callbacks_++;
|
| - return base::Bind(&PowerManagerClientStubImpl::HandleSuspendReadiness,
|
| + return base::Bind(&FakePowerManagerClient::HandleSuspendReadiness,
|
| weak_ptr_factory_.GetWeakPtr());
|
| }
|
| virtual int GetNumPendingSuspendReadinessCallbacks() OVERRIDE {
|
| @@ -830,13 +836,32 @@ class PowerManagerClientStubImpl : public PowerManagerClient {
|
| BrightnessChanged(brightness_level, user_initiated));
|
| }
|
|
|
| + void ParseCommandLineSwitch() {
|
| + dbus_command_line_helper::ParseOptions(
|
| + switches::kPowerStub,
|
| + base::Bind(&FakePowerManagerClient::ParseOption,
|
| + base::Unretained(this)));
|
| + }
|
| +
|
| + bool 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_ = seconds;
|
| + return true;
|
| + }
|
| + return false;
|
| + }
|
| +
|
| + int power_cycle_delay_; // Seconds over which to cycle power state
|
| bool discharging_;
|
| int battery_percentage_;
|
| double brightness_;
|
| int pause_count_;
|
| int cycle_count_;
|
| ObserverList<Observer> observers_;
|
| - base::RepeatingTimer<PowerManagerClientStubImpl> update_timer_;
|
| + base::RepeatingTimer<FakePowerManagerClient> update_timer_;
|
| power_manager::PowerSupplyProperties props_;
|
|
|
| // Number of callbacks returned by GetSuspendReadinessCallback() but not yet
|
| @@ -845,7 +870,7 @@ class PowerManagerClientStubImpl : public PowerManagerClient {
|
|
|
| // 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_;
|
| + base::WeakPtrFactory<FakePowerManagerClient> weak_ptr_factory_;
|
| };
|
|
|
| PowerManagerClient::PowerManagerClient() {
|
| @@ -860,7 +885,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();
|
| }
|
|
|
| } // namespace chromeos
|
|
|