summaryrefslogtreecommitdiffstats
path: root/chromeos/power
diff options
context:
space:
mode:
authorderat@chromium.org <derat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-21 21:48:49 +0000
committerderat@chromium.org <derat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-21 21:48:49 +0000
commit3cacfc46545272662f7f4dafa215536880da4423 (patch)
tree9500e631ca02d340c697647ffb3318d229d346ca /chromeos/power
parentfbd54c0709c623d943650a2805f9471b477b36a6 (diff)
downloadchromium_src-3cacfc46545272662f7f4dafa215536880da4423.zip
chromium_src-3cacfc46545272662f7f4dafa215536880da4423.tar.gz
chromium_src-3cacfc46545272662f7f4dafa215536880da4423.tar.bz2
chromeos: Remove PowerStateOverride.
This removes the PowerStateOverride class, which made D-Bus requests to powerd to override various aspects of power management. It updates the Chrome OS implementation of PowerSaveBlocker to instead register requests with PowerPolicyController, which integrates said requests with the pref-derived power management policy. BUG=176405 Review URL: https://codereview.chromium.org/12775019 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@189699 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chromeos/power')
-rw-r--r--chromeos/power/power_state_override.cc100
-rw-r--r--chromeos/power/power_state_override.h79
-rw-r--r--chromeos/power/power_state_override_unittest.cc108
3 files changed, 0 insertions, 287 deletions
diff --git a/chromeos/power/power_state_override.cc b/chromeos/power/power_state_override.cc
deleted file mode 100644
index b46e574..0000000
--- a/chromeos/power/power_state_override.cc
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chromeos/power/power_state_override.h"
-
-#include "base/bind.h"
-#include "base/message_loop.h"
-#include "base/time.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
-#include "chromeos/dbus/power_manager_client.h"
-
-namespace {
-
-// Frequency with which overrides are renewed.
-const int kHeartbeatTimeInSecs = 300;
-
-// Duration beyond |kHeartbeatTimeInSecs| for which overrides are requested.
-// This should be long enough that we're able to renew the request before it
-// expires, but short enough that the power manager won't end up honoring a
-// stale request for a long time if Chrome crashes and orphans its requests.
-const int kRequestSlackInSecs = 15;
-
-} // namespace
-
-namespace chromeos {
-
-PowerStateOverride::PowerStateOverride(Mode mode)
- : override_types_(0),
- request_id_(0),
- dbus_thread_manager_(DBusThreadManager::Get()) {
- switch (mode) {
- case BLOCK_DISPLAY_SLEEP:
- override_types_ |= (PowerManagerClient::DISABLE_IDLE_DIM |
- PowerManagerClient::DISABLE_IDLE_BLANK);
- // fallthrough
- case BLOCK_SYSTEM_SUSPEND:
- override_types_ |= PowerManagerClient::DISABLE_IDLE_SUSPEND;
- break;
- default:
- NOTREACHED() << "Unhandled mode " << mode;
- }
-
- dbus_thread_manager_->AddObserver(this);
-
- // request_id_ = 0 will create a new override request.
- // We do a post task here to ensure that this request runs 'after' our
- // constructor is done. If not, there is a possibility (though only in
- // tests at the moment) that the power state override request executes
- // and returns before the constructor has finished executing. This will
- // cause an AddRef and a Release, the latter destructing our current
- // instance even before the constructor has finished executing (as it does
- // in the DownloadExtensionTest browsertests currently).
- MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&PowerStateOverride::CallRequestPowerStateOverrides, this));
-
- heartbeat_.Start(FROM_HERE,
- base::TimeDelta::FromSeconds(kHeartbeatTimeInSecs),
- this,
- &PowerStateOverride::CallRequestPowerStateOverrides);
-}
-
-PowerStateOverride::~PowerStateOverride() {
- if (dbus_thread_manager_)
- dbus_thread_manager_->RemoveObserver(this);
- CancelRequest();
-}
-
-void PowerStateOverride::OnDBusThreadManagerDestroying(
- DBusThreadManager* manager) {
- DCHECK_EQ(manager, dbus_thread_manager_);
- CancelRequest();
- dbus_thread_manager_ = NULL;
-}
-
-void PowerStateOverride::SetRequestId(uint32 request_id) {
- request_id_ = request_id;
-}
-
-void PowerStateOverride::CallRequestPowerStateOverrides() {
- DCHECK(dbus_thread_manager_);
- dbus_thread_manager_->GetPowerManagerClient()->RequestPowerStateOverrides(
- request_id_,
- base::TimeDelta::FromSeconds(
- kHeartbeatTimeInSecs + kRequestSlackInSecs),
- override_types_,
- base::Bind(&PowerStateOverride::SetRequestId, this));
-}
-
-void PowerStateOverride::CancelRequest() {
- if (request_id_) {
- DCHECK(dbus_thread_manager_);
- dbus_thread_manager_->GetPowerManagerClient()->
- CancelPowerStateOverrides(request_id_);
- request_id_ = 0;
- }
-}
-
-} // namespace chromeos
diff --git a/chromeos/power/power_state_override.h b/chromeos/power/power_state_override.h
deleted file mode 100644
index 08e31ee..0000000
--- a/chromeos/power/power_state_override.h
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROMEOS_POWER_POWER_STATE_OVERRIDE_H_
-#define CHROMEOS_POWER_POWER_STATE_OVERRIDE_H_
-
-#include "base/basictypes.h"
-#include "base/memory/weak_ptr.h"
-#include "base/timer.h"
-#include "chromeos/chromeos_export.h"
-#include "chromeos/dbus/dbus_thread_manager_observer.h"
-
-namespace chromeos {
-
-class DBusThreadManager;
-
-// This class overrides the current power state on the machine, disabling
-// a set of power management features.
-class CHROMEOS_EXPORT PowerStateOverride
- : public base::RefCountedThreadSafe<PowerStateOverride>,
- public DBusThreadManagerObserver {
- public:
- enum Mode {
- // Blocks the screen from being dimmed or blanked due to user inactivity.
- // Also implies BLOCK_SYSTEM_SUSPEND.
- BLOCK_DISPLAY_SLEEP,
-
- // Blocks the system from being suspended due to user inactivity.
- BLOCK_SYSTEM_SUSPEND,
- };
-
- explicit PowerStateOverride(Mode mode);
-
- // DBusThreadManagerObserver implementation:
- virtual void OnDBusThreadManagerDestroying(DBusThreadManager* manager)
- OVERRIDE;
-
- private:
- friend class base::RefCountedThreadSafe<PowerStateOverride>;
-
- // This destructor cancels the current power state override. There might be
- // a very slight delay between the the last reference to an instance being
- // released and the power state override being canceled. This is only in
- // the case that the current instance has JUST been created and ChromeOS
- // hasn't had a chance to service the initial power override request yet.
- virtual ~PowerStateOverride();
-
- // Callback from RequestPowerStateOverride which receives our request_id.
- void SetRequestId(uint32 request_id);
-
- // Actually make a call to power manager; we need this to be able to post a
- // delayed task since we cannot call back into power manager from Heartbeat
- // since the last request has just been completed at that point.
- void CallRequestPowerStateOverrides();
-
- // Asks the power manager to cancel |request_id_| and sets it to zero.
- // Does nothing if it's already zero.
- void CancelRequest();
-
- // Bitmap containing requested override types from
- // PowerManagerClient::PowerStateOverrideType.
- uint32 override_types_;
-
- // Outstanding override request ID, or 0 if there is no outstanding request.
- uint32 request_id_;
-
- // Periodically invokes CallRequestPowerStateOverrides() to refresh the
- // override.
- base::RepeatingTimer<PowerStateOverride> heartbeat_;
-
- DBusThreadManager* dbus_thread_manager_; // not owned
-
- DISALLOW_COPY_AND_ASSIGN(PowerStateOverride);
-};
-
-} // namespace chromeos
-
-#endif // CHROMEOS_POWER_POWER_STATE_OVERRIDE_H_
diff --git a/chromeos/power/power_state_override_unittest.cc b/chromeos/power/power_state_override_unittest.cc
deleted file mode 100644
index b925980..0000000
--- a/chromeos/power/power_state_override_unittest.cc
+++ /dev/null
@@ -1,108 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chromeos/power/power_state_override.h"
-
-#include "base/basictypes.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/message_loop.h"
-#include "chromeos/dbus/mock_power_manager_client.h"
-#include "chromeos/dbus/mock_dbus_thread_manager.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using ::testing::_;
-using ::testing::Mock;
-using ::testing::SaveArg;
-
-namespace chromeos {
-
-class PowerStateOverrideTest : public testing::Test {
- protected:
- PowerStateOverrideTest() : dbus_thread_manager_shut_down_(false) {}
- virtual ~PowerStateOverrideTest() {}
-
- virtual void SetUp() {
- MockDBusThreadManager* dbus_manager = new MockDBusThreadManager;
- DBusThreadManager::InitializeForTesting(dbus_manager);
- power_manager_client_ = dbus_manager->mock_power_manager_client();
- }
-
- virtual void TearDown() {
- if (!dbus_thread_manager_shut_down_)
- DBusThreadManager::Shutdown();
- }
-
- protected:
- // Shuts down the DBusThreadManager prematurely.
- void ShutDownDBusThreadManager() {
- DBusThreadManager::Shutdown();
- dbus_thread_manager_shut_down_ = true;
- }
-
- // Needed for PowerStateOverride's timer.
- MessageLoop message_loop_;
-
- MockPowerManagerClient* power_manager_client_; // not owned
-
- // Has the singleton DBusThreadManager already been manually shut down?
- bool dbus_thread_manager_shut_down_;
-};
-
-TEST_F(PowerStateOverrideTest, AddAndRemoveOverrides) {
- // An arbitrary ID to return in response to a request with ID 0.
- const uint32 kRequestId = 10;
-
- // Override bitmaps corresponding to different modes.
- const uint32 kDisplayOverrides =
- PowerManagerClient::DISABLE_IDLE_DIM |
- PowerManagerClient::DISABLE_IDLE_BLANK |
- PowerManagerClient::DISABLE_IDLE_SUSPEND;
- const uint32 kSystemOverrides =
- PowerManagerClient::DISABLE_IDLE_SUSPEND;
-
- // Block display sleep and pass a request ID to the callback.
- chromeos::PowerStateRequestIdCallback request_id_callback;
- EXPECT_CALL(*power_manager_client_,
- RequestPowerStateOverrides(0, _, kDisplayOverrides, _))
- .WillOnce(SaveArg<3>(&request_id_callback));
- scoped_refptr<PowerStateOverride> override(
- new PowerStateOverride(PowerStateOverride::BLOCK_DISPLAY_SLEEP));
- // Make sure our PostTask to the request power state overrides runs.
- message_loop_.RunUntilIdle();
- request_id_callback.Run(kRequestId);
-
- // The request should be canceled when the PowerStateOverride is destroyed.
- EXPECT_CALL(*power_manager_client_, CancelPowerStateOverrides(kRequestId));
- override = NULL;
-
- // Now send a request to just block the system from suspending.
- EXPECT_CALL(*power_manager_client_,
- RequestPowerStateOverrides(0, _, kSystemOverrides, _))
- .WillOnce(SaveArg<3>(&request_id_callback));
- override = new PowerStateOverride(PowerStateOverride::BLOCK_SYSTEM_SUSPEND);
- // Make sure our PostTask to the request power state overrides runs.
- message_loop_.RunUntilIdle();
- request_id_callback.Run(kRequestId);
- EXPECT_CALL(*power_manager_client_, CancelPowerStateOverrides(kRequestId));
- override = NULL;
-}
-
-TEST_F(PowerStateOverrideTest, DBusThreadManagerShutDown) {
- const uint32 kRequestId = 10;
- chromeos::PowerStateRequestIdCallback request_id_callback;
- EXPECT_CALL(*power_manager_client_, RequestPowerStateOverrides(0, _, _, _))
- .WillOnce(SaveArg<3>(&request_id_callback));
- scoped_refptr<PowerStateOverride> override(
- new PowerStateOverride(PowerStateOverride::BLOCK_DISPLAY_SLEEP));
- // Make sure our PostTask to the request power state overrides runs.
- message_loop_.RunUntilIdle();
- request_id_callback.Run(kRequestId);
-
- // When the DBusThreadManager is about to be shut down, PowerStateOverride
- // should cancel its request.
- EXPECT_CALL(*power_manager_client_, CancelPowerStateOverrides(kRequestId));
- ShutDownDBusThreadManager();
-}
-
-} // namespace chromeos