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

Side by Side Diff: chromeos/dbus/power_manager_client.cc

Issue 11624038: [In progress] Monitor suspend code (Closed) Base URL: https://git.chromium.org/git/chromium/src@git-svn
Patch Set: Created 8 years 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
« no previous file with comments | « chromeos/dbus/power_manager_client.h ('k') | chromeos/display/output_configurator.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 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_manager_client.h" 5 #include "chromeos/dbus/power_manager_client.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
11 #include "base/format_macros.h" 11 #include "base/format_macros.h"
12 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 #include "base/observer_list.h" 13 #include "base/observer_list.h"
14 #include "base/stringprintf.h" 14 #include "base/stringprintf.h"
15 #include "base/time.h" 15 #include "base/time.h"
16 #include "base/timer.h" 16 #include "base/timer.h"
17 #include "chromeos/dbus/power_manager/suspend.pb.h"
17 #include "chromeos/dbus/power_state_control.pb.h" 18 #include "chromeos/dbus/power_state_control.pb.h"
18 #include "chromeos/dbus/power_supply_properties.pb.h" 19 #include "chromeos/dbus/power_supply_properties.pb.h"
19 #include "chromeos/dbus/video_activity_update.pb.h" 20 #include "chromeos/dbus/video_activity_update.pb.h"
20 #include "dbus/bus.h" 21 #include "dbus/bus.h"
21 #include "dbus/message.h" 22 #include "dbus/message.h"
22 #include "dbus/object_path.h" 23 #include "dbus/object_path.h"
23 #include "dbus/object_proxy.h" 24 #include "dbus/object_proxy.h"
24 #include "third_party/cros_system_api/dbus/service_constants.h" 25 #include "third_party/cros_system_api/dbus/service_constants.h"
25 26
26 namespace chromeos { 27 namespace chromeos {
27 28
29 const int kSuspendDelayTimeoutMs = 5000;
30
28 // The PowerManagerClient implementation used in production. 31 // The PowerManagerClient implementation used in production.
29 class PowerManagerClientImpl : public PowerManagerClient { 32 class PowerManagerClientImpl : public PowerManagerClient {
30 public: 33 public:
31 explicit PowerManagerClientImpl(dbus::Bus* bus) 34 explicit PowerManagerClientImpl(dbus::Bus* bus)
32 : power_manager_proxy_(NULL), 35 : power_manager_proxy_(NULL),
33 weak_ptr_factory_(this) { 36 weak_ptr_factory_(this) {
34 power_manager_proxy_ = bus->GetObjectProxy( 37 power_manager_proxy_ = bus->GetObjectProxy(
35 power_manager::kPowerManagerServiceName, 38 power_manager::kPowerManagerServiceName,
36 dbus::ObjectPath(power_manager::kPowerManagerServicePath)); 39 dbus::ObjectPath(power_manager::kPowerManagerServicePath));
37 40
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 weak_ptr_factory_.GetWeakPtr())); 74 weak_ptr_factory_.GetWeakPtr()));
72 75
73 power_manager_proxy_->ConnectToSignal( 76 power_manager_proxy_->ConnectToSignal(
74 power_manager::kPowerManagerInterface, 77 power_manager::kPowerManagerInterface,
75 power_manager::kSoftwareScreenDimmingRequestedSignal, 78 power_manager::kSoftwareScreenDimmingRequestedSignal,
76 base::Bind( 79 base::Bind(
77 &PowerManagerClientImpl::SoftwareScreenDimmingRequestedReceived, 80 &PowerManagerClientImpl::SoftwareScreenDimmingRequestedReceived,
78 weak_ptr_factory_.GetWeakPtr()), 81 weak_ptr_factory_.GetWeakPtr()),
79 base::Bind(&PowerManagerClientImpl::SignalConnected, 82 base::Bind(&PowerManagerClientImpl::SignalConnected,
80 weak_ptr_factory_.GetWeakPtr())); 83 weak_ptr_factory_.GetWeakPtr()));
84
85 power_manager_proxy_->ConnectToSignal(
86 power_manager::kPowerManagerInterface,
87 power_manager::kSuspendImminentSignal,
88 base::Bind(
89 &PowerManagerClientImpl::SuspendImminentReceived,
90 weak_ptr_factory_.GetWeakPtr()),
91 base::Bind(&PowerManagerClientImpl::SignalConnected,
92 weak_ptr_factory_.GetWeakPtr()));
93
94 // Register to powerd for suspend notifications.
95 dbus::MethodCall method_call(
96 power_manager::kPowerManagerInterface,
97 power_manager::kRegisterSuspendDelayMethod);
98 dbus::MessageWriter writer(&method_call);
99
100 power_manager::RegisterSuspendDelayRequest protobuf_request;
101 protobuf_request.Clear();
102 protobuf_request.set_timeout(kSuspendDelayTimeoutMs);
103
104 if (!writer.AppendProtoAsArrayOfBytes(protobuf_request)) {
105 LOG(ERROR) << "Error calling "
106 << power_manager::kRegisterSuspendDelayMethod;
107 return;
108 }
109 power_manager_proxy_->CallMethod(
110 &method_call,
111 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
112 dbus::ObjectProxy::EmptyResponseCallback());
113
114 power_manager::RegisterSuspendDelayReply protobuf_reply;
115 delay_id_ = protobuf_reply.delay_id();
81 } 116 }
82 117
83 virtual ~PowerManagerClientImpl() { 118 virtual ~PowerManagerClientImpl() {
119 // Unregister from powerd for suspend notifications.
120 dbus::MethodCall method_call(
121 power_manager::kPowerManagerInterface,
122 power_manager::kUnregisterSuspendDelayMethod);
123 dbus::MessageWriter writer(&method_call);
124
125 power_manager::UnregisterSuspendDelayRequest protobuf;
126 protobuf.Clear();
127 protobuf.set_delay_id(delay_id_);
128
129 power_manager_proxy_->CallMethod(
130 &method_call,
131 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
132 dbus::ObjectProxy::EmptyResponseCallback());
84 } 133 }
85 134
86 // PowerManagerClient overrides: 135 // PowerManagerClient overrides:
87 136
88 virtual void AddObserver(Observer* observer) OVERRIDE { 137 virtual void AddObserver(Observer* observer) OVERRIDE {
89 CHECK(observer); // http://crbug.com/119976 138 CHECK(observer); // http://crbug.com/119976
90 observers_.AddObserver(observer); 139 observers_.AddObserver(observer);
91 } 140 }
92 141
93 virtual void RemoveObserver(Observer* observer) OVERRIDE { 142 virtual void RemoveObserver(Observer* observer) OVERRIDE {
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 break; 505 break;
457 case power_manager::kSoftwareScreenDimmingIdle: 506 case power_manager::kSoftwareScreenDimmingIdle:
458 state = Observer::SCREEN_DIMMING_IDLE; 507 state = Observer::SCREEN_DIMMING_IDLE;
459 break; 508 break;
460 default: 509 default:
461 LOG(ERROR) << "Unhandled screen dimming state " << signal_state; 510 LOG(ERROR) << "Unhandled screen dimming state " << signal_state;
462 } 511 }
463 FOR_EACH_OBSERVER(Observer, observers_, ScreenDimmingRequested(state)); 512 FOR_EACH_OBSERVER(Observer, observers_, ScreenDimmingRequested(state));
464 } 513 }
465 514
515 void SuspendImminentReceived(dbus::Signal* signal) {
516 dbus::MessageReader reader(signal);
517 power_manager::SuspendImminent protobuf_imminent;
518 int32 suspend_id = protobuf_imminent.suspend_id();
519
520 FOR_EACH_OBSERVER(Observer, observers_, DelaySuspend());
521
522 dbus::MethodCall method_call(
523 power_manager::kPowerManagerInterface,
524 power_manager::kHandleSuspendReadinessMethod);
525 dbus::MessageWriter writer(&method_call);
526
527 power_manager::SuspendReadinessInfo protobuf_request;
528 protobuf_request.Clear();
529 protobuf_request.set_delay_id(delay_id_);
530 protobuf_request.set_suspend_id(suspend_id);
531
532 if (!writer.AppendProtoAsArrayOfBytes(protobuf_request)) {
533 LOG(ERROR) << "Error calling "
534 << power_manager::kHandleSuspendReadinessMethod;
535 return;
536 }
537 power_manager_proxy_->CallMethod(
538 &method_call,
539 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
540 dbus::ObjectProxy::EmptyResponseCallback());
541 }
542
466 dbus::ObjectProxy* power_manager_proxy_; 543 dbus::ObjectProxy* power_manager_proxy_;
467 ObserverList<Observer> observers_; 544 ObserverList<Observer> observers_;
545 std::list<SuspendImminentCallback> suspend_delay_callback_list_;
546 int32 delay_id_;
468 547
469 // Note: This should remain the last member so it'll be destroyed and 548 // Note: This should remain the last member so it'll be destroyed and
470 // invalidate its weak pointers before any other members are destroyed. 549 // invalidate its weak pointers before any other members are destroyed.
471 base::WeakPtrFactory<PowerManagerClientImpl> weak_ptr_factory_; 550 base::WeakPtrFactory<PowerManagerClientImpl> weak_ptr_factory_;
472 551
473 DISALLOW_COPY_AND_ASSIGN(PowerManagerClientImpl); 552 DISALLOW_COPY_AND_ASSIGN(PowerManagerClientImpl);
474 }; 553 };
475 554
476 // The PowerManagerClient implementation used on Linux desktop, 555 // The PowerManagerClient implementation used on Linux desktop,
477 // which does nothing. 556 // which does nothing.
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
634 PowerManagerClient* PowerManagerClient::Create( 713 PowerManagerClient* PowerManagerClient::Create(
635 DBusClientImplementationType type, 714 DBusClientImplementationType type,
636 dbus::Bus* bus) { 715 dbus::Bus* bus) {
637 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) 716 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION)
638 return new PowerManagerClientImpl(bus); 717 return new PowerManagerClientImpl(bus);
639 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); 718 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type);
640 return new PowerManagerClientStubImpl(); 719 return new PowerManagerClientStubImpl();
641 } 720 }
642 721
643 } // namespace chromeos 722 } // namespace chromeos
OLDNEW
« no previous file with comments | « chromeos/dbus/power_manager_client.h ('k') | chromeos/display/output_configurator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698