Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(109)

Side by Side Diff: chromeos/power/power_state_override.cc

Issue 12775019: chromeos: Remove PowerStateOverride. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: more feedback Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chromeos/power/power_state_override.h ('k') | chromeos/power/power_state_override_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chromeos/power/power_state_override.h"
6
7 #include "base/bind.h"
8 #include "base/message_loop.h"
9 #include "base/time.h"
10 #include "chromeos/dbus/dbus_thread_manager.h"
11 #include "chromeos/dbus/power_manager_client.h"
12
13 namespace {
14
15 // Frequency with which overrides are renewed.
16 const int kHeartbeatTimeInSecs = 300;
17
18 // Duration beyond |kHeartbeatTimeInSecs| for which overrides are requested.
19 // This should be long enough that we're able to renew the request before it
20 // expires, but short enough that the power manager won't end up honoring a
21 // stale request for a long time if Chrome crashes and orphans its requests.
22 const int kRequestSlackInSecs = 15;
23
24 } // namespace
25
26 namespace chromeos {
27
28 PowerStateOverride::PowerStateOverride(Mode mode)
29 : override_types_(0),
30 request_id_(0),
31 dbus_thread_manager_(DBusThreadManager::Get()) {
32 switch (mode) {
33 case BLOCK_DISPLAY_SLEEP:
34 override_types_ |= (PowerManagerClient::DISABLE_IDLE_DIM |
35 PowerManagerClient::DISABLE_IDLE_BLANK);
36 // fallthrough
37 case BLOCK_SYSTEM_SUSPEND:
38 override_types_ |= PowerManagerClient::DISABLE_IDLE_SUSPEND;
39 break;
40 default:
41 NOTREACHED() << "Unhandled mode " << mode;
42 }
43
44 dbus_thread_manager_->AddObserver(this);
45
46 // request_id_ = 0 will create a new override request.
47 // We do a post task here to ensure that this request runs 'after' our
48 // constructor is done. If not, there is a possibility (though only in
49 // tests at the moment) that the power state override request executes
50 // and returns before the constructor has finished executing. This will
51 // cause an AddRef and a Release, the latter destructing our current
52 // instance even before the constructor has finished executing (as it does
53 // in the DownloadExtensionTest browsertests currently).
54 MessageLoop::current()->PostTask(
55 FROM_HERE,
56 base::Bind(&PowerStateOverride::CallRequestPowerStateOverrides, this));
57
58 heartbeat_.Start(FROM_HERE,
59 base::TimeDelta::FromSeconds(kHeartbeatTimeInSecs),
60 this,
61 &PowerStateOverride::CallRequestPowerStateOverrides);
62 }
63
64 PowerStateOverride::~PowerStateOverride() {
65 if (dbus_thread_manager_)
66 dbus_thread_manager_->RemoveObserver(this);
67 CancelRequest();
68 }
69
70 void PowerStateOverride::OnDBusThreadManagerDestroying(
71 DBusThreadManager* manager) {
72 DCHECK_EQ(manager, dbus_thread_manager_);
73 CancelRequest();
74 dbus_thread_manager_ = NULL;
75 }
76
77 void PowerStateOverride::SetRequestId(uint32 request_id) {
78 request_id_ = request_id;
79 }
80
81 void PowerStateOverride::CallRequestPowerStateOverrides() {
82 DCHECK(dbus_thread_manager_);
83 dbus_thread_manager_->GetPowerManagerClient()->RequestPowerStateOverrides(
84 request_id_,
85 base::TimeDelta::FromSeconds(
86 kHeartbeatTimeInSecs + kRequestSlackInSecs),
87 override_types_,
88 base::Bind(&PowerStateOverride::SetRequestId, this));
89 }
90
91 void PowerStateOverride::CancelRequest() {
92 if (request_id_) {
93 DCHECK(dbus_thread_manager_);
94 dbus_thread_manager_->GetPowerManagerClient()->
95 CancelPowerStateOverrides(request_id_);
96 request_id_ = 0;
97 }
98 }
99
100 } // namespace chromeos
OLDNEW
« no previous file with comments | « chromeos/power/power_state_override.h ('k') | chromeos/power/power_state_override_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698