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

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

Issue 2768543002: chromeos: Add PowerManagerClient::GetSwitchStates(). (Closed)
Patch Set: document that callbacks aren't run on error Created 3 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
« no previous file with comments | « chromeos/dbus/power_manager_client.h ('k') | no next file » | 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 <stdint.h> 7 #include <stdint.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 11 matching lines...) Expand all
22 #include "base/strings/stringprintf.h" 22 #include "base/strings/stringprintf.h"
23 #include "base/threading/platform_thread.h" 23 #include "base/threading/platform_thread.h"
24 #include "base/timer/timer.h" 24 #include "base/timer/timer.h"
25 #include "chromeos/chromeos_switches.h" 25 #include "chromeos/chromeos_switches.h"
26 #include "chromeos/dbus/fake_power_manager_client.h" 26 #include "chromeos/dbus/fake_power_manager_client.h"
27 #include "chromeos/dbus/power_manager/input_event.pb.h" 27 #include "chromeos/dbus/power_manager/input_event.pb.h"
28 #include "chromeos/dbus/power_manager/peripheral_battery_status.pb.h" 28 #include "chromeos/dbus/power_manager/peripheral_battery_status.pb.h"
29 #include "chromeos/dbus/power_manager/policy.pb.h" 29 #include "chromeos/dbus/power_manager/policy.pb.h"
30 #include "chromeos/dbus/power_manager/power_supply_properties.pb.h" 30 #include "chromeos/dbus/power_manager/power_supply_properties.pb.h"
31 #include "chromeos/dbus/power_manager/suspend.pb.h" 31 #include "chromeos/dbus/power_manager/suspend.pb.h"
32 #include "chromeos/dbus/power_manager/switch_states.pb.h"
32 #include "chromeos/system/statistics_provider.h" 33 #include "chromeos/system/statistics_provider.h"
33 #include "components/device_event_log/device_event_log.h" 34 #include "components/device_event_log/device_event_log.h"
34 #include "dbus/bus.h" 35 #include "dbus/bus.h"
35 #include "dbus/message.h" 36 #include "dbus/message.h"
36 #include "dbus/object_path.h" 37 #include "dbus/object_path.h"
37 #include "dbus/object_proxy.h" 38 #include "dbus/object_proxy.h"
38 39
39 namespace chromeos { 40 namespace chromeos {
40 41
42 namespace {
43
41 // Maximum amount of time that the power manager will wait for Chrome to 44 // Maximum amount of time that the power manager will wait for Chrome to
42 // say that it's ready for the system to be suspended, in milliseconds. 45 // say that it's ready for the system to be suspended, in milliseconds.
43 const int kSuspendDelayTimeoutMs = 5000; 46 const int kSuspendDelayTimeoutMs = 5000;
44 47
45 // Human-readable description of Chrome's suspend delay. 48 // Human-readable description of Chrome's suspend delay.
46 const char kSuspendDelayDescription[] = "chrome"; 49 const char kSuspendDelayDescription[] = "chrome";
47 50
51 // Converts a LidState value from a power_manager::SwitchStates proto to the
52 // corresponding PowerManagerClient::LidState value.
53 PowerManagerClient::LidState GetLidStateFromProtoEnum(
54 power_manager::SwitchStates::LidState state) {
55 switch (state) {
56 case power_manager::SwitchStates_LidState_OPEN:
57 return PowerManagerClient::LidState::OPEN;
58 case power_manager::SwitchStates_LidState_CLOSED:
59 return PowerManagerClient::LidState::CLOSED;
60 case power_manager::SwitchStates_LidState_NOT_PRESENT:
61 return PowerManagerClient::LidState::NOT_PRESENT;
62 }
63 NOTREACHED() << "Unhandled lid state " << state;
64 return PowerManagerClient::LidState::NOT_PRESENT;
65 }
66
67 // Converts a TabletMode value from a power_manager::SwitchStates proto to the
68 // corresponding PowerManagerClient::TabletMode value.
69 PowerManagerClient::TabletMode GetTabletModeFromProtoEnum(
70 power_manager::SwitchStates::TabletMode mode) {
71 switch (mode) {
72 case power_manager::SwitchStates_TabletMode_ON:
73 return PowerManagerClient::TabletMode::ON;
74 case power_manager::SwitchStates_TabletMode_OFF:
75 return PowerManagerClient::TabletMode::OFF;
76 case power_manager::SwitchStates_TabletMode_UNSUPPORTED:
77 return PowerManagerClient::TabletMode::UNSUPPORTED;
78 }
79 NOTREACHED() << "Unhandled tablet mode " << mode;
80 return PowerManagerClient::TabletMode::UNSUPPORTED;
81 }
82
83 } // namespace
84
48 // The PowerManagerClient implementation used in production. 85 // The PowerManagerClient implementation used in production.
49 class PowerManagerClientImpl : public PowerManagerClient { 86 class PowerManagerClientImpl : public PowerManagerClient {
50 public: 87 public:
51 PowerManagerClientImpl() 88 PowerManagerClientImpl()
52 : origin_thread_id_(base::PlatformThread::CurrentId()), 89 : origin_thread_id_(base::PlatformThread::CurrentId()),
53 power_manager_proxy_(NULL), 90 power_manager_proxy_(NULL),
54 suspend_delay_id_(-1), 91 suspend_delay_id_(-1),
55 has_suspend_delay_id_(false), 92 has_suspend_delay_id_(false),
56 dark_suspend_delay_id_(-1), 93 dark_suspend_delay_id_(-1),
57 has_dark_suspend_delay_id_(false), 94 has_dark_suspend_delay_id_(false),
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 void GetBacklightsForcedOff( 292 void GetBacklightsForcedOff(
256 const GetBacklightsForcedOffCallback& callback) override { 293 const GetBacklightsForcedOffCallback& callback) override {
257 dbus::MethodCall method_call(power_manager::kPowerManagerInterface, 294 dbus::MethodCall method_call(power_manager::kPowerManagerInterface,
258 power_manager::kGetBacklightsForcedOffMethod); 295 power_manager::kGetBacklightsForcedOffMethod);
259 power_manager_proxy_->CallMethod( 296 power_manager_proxy_->CallMethod(
260 &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, 297 &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
261 base::Bind(&PowerManagerClientImpl::OnGetBacklightsForcedOff, 298 base::Bind(&PowerManagerClientImpl::OnGetBacklightsForcedOff,
262 weak_ptr_factory_.GetWeakPtr(), callback)); 299 weak_ptr_factory_.GetWeakPtr(), callback));
263 } 300 }
264 301
302 void GetSwitchStates(const GetSwitchStatesCallback& callback) override {
303 dbus::MethodCall method_call(power_manager::kPowerManagerInterface,
304 power_manager::kGetSwitchStatesMethod);
305 power_manager_proxy_->CallMethod(
306 &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
307 base::Bind(&PowerManagerClientImpl::OnGetSwitchStates,
308 weak_ptr_factory_.GetWeakPtr(), callback));
309 }
310
265 base::Closure GetSuspendReadinessCallback() override { 311 base::Closure GetSuspendReadinessCallback() override {
266 DCHECK(OnOriginThread()); 312 DCHECK(OnOriginThread());
267 DCHECK(suspend_is_pending_); 313 DCHECK(suspend_is_pending_);
268 num_pending_suspend_readiness_callbacks_++; 314 num_pending_suspend_readiness_callbacks_++;
269 return base::Bind(&PowerManagerClientImpl::HandleObserverSuspendReadiness, 315 return base::Bind(&PowerManagerClientImpl::HandleObserverSuspendReadiness,
270 weak_ptr_factory_.GetWeakPtr(), pending_suspend_id_, 316 weak_ptr_factory_.GetWeakPtr(), pending_suspend_id_,
271 suspending_from_dark_resume_); 317 suspending_from_dark_resume_);
272 } 318 }
273 319
274 int GetNumPendingSuspendReadinessCallbacks() override { 320 int GetNumPendingSuspendReadinessCallbacks() override {
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 } 550 }
505 dbus::MessageReader reader(response); 551 dbus::MessageReader reader(response);
506 bool state = false; 552 bool state = false;
507 if (!reader.PopBool(&state)) { 553 if (!reader.PopBool(&state)) {
508 POWER_LOG(ERROR) << "Error reading response from powerd: " 554 POWER_LOG(ERROR) << "Error reading response from powerd: "
509 << response->ToString(); 555 << response->ToString();
510 } 556 }
511 callback.Run(state); 557 callback.Run(state);
512 } 558 }
513 559
560 void OnGetSwitchStates(const GetSwitchStatesCallback& callback,
561 dbus::Response* response) {
562 if (!response) {
563 POWER_LOG(ERROR) << "Error calling "
564 << power_manager::kGetSwitchStatesMethod;
565 return;
566 }
567 power_manager::SwitchStates proto;
568 if (!dbus::MessageReader(response).PopArrayOfBytesAsProto(&proto)) {
569 POWER_LOG(ERROR) << "Error parsing response from "
570 << power_manager::kGetSwitchStatesMethod;
571 return;
572 }
573 callback.Run(GetLidStateFromProtoEnum(proto.lid_state()),
574 GetTabletModeFromProtoEnum(proto.tablet_mode()));
575 }
576
514 void HandlePowerSupplyProperties( 577 void HandlePowerSupplyProperties(
515 const power_manager::PowerSupplyProperties& proto) { 578 const power_manager::PowerSupplyProperties& proto) {
516 for (auto& observer : observers_) 579 for (auto& observer : observers_)
517 observer.PowerChanged(proto); 580 observer.PowerChanged(proto);
518 const bool on_battery = proto.external_power() == 581 const bool on_battery = proto.external_power() ==
519 power_manager::PowerSupplyProperties_ExternalPower_DISCONNECTED; 582 power_manager::PowerSupplyProperties_ExternalPower_DISCONNECTED;
520 base::PowerMonitorDeviceSource::SetPowerSource(on_battery); 583 base::PowerMonitorDeviceSource::SetPowerSource(on_battery);
521 } 584 }
522 585
523 void HandleRegisterSuspendDelayReply(bool dark_suspend, 586 void HandleRegisterSuspendDelayReply(bool dark_suspend,
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
687 dbus::MessageWriter writer(&method_call); 750 dbus::MessageWriter writer(&method_call);
688 writer.AppendInt64(proto.timestamp()); 751 writer.AppendInt64(proto.timestamp());
689 power_manager_proxy_->CallMethod( 752 power_manager_proxy_->CallMethod(
690 &method_call, 753 &method_call,
691 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, 754 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
692 dbus::ObjectProxy::EmptyResponseCallback()); 755 dbus::ObjectProxy::EmptyResponseCallback());
693 } 756 }
694 break; 757 break;
695 } 758 }
696 case power_manager::InputEvent_Type_LID_OPEN: 759 case power_manager::InputEvent_Type_LID_OPEN:
697 case power_manager::InputEvent_Type_LID_CLOSED: {
698 bool open =
699 (proto.type() == power_manager::InputEvent_Type_LID_OPEN);
700 for (auto& observer : observers_) 760 for (auto& observer : observers_)
701 observer.LidEventReceived(open, timestamp); 761 observer.LidEventReceived(LidState::OPEN, timestamp);
702 break; 762 break;
703 } 763 case power_manager::InputEvent_Type_LID_CLOSED:
764 for (auto& observer : observers_)
765 observer.LidEventReceived(LidState::CLOSED, timestamp);
766 break;
704 case power_manager::InputEvent_Type_TABLET_MODE_ON: 767 case power_manager::InputEvent_Type_TABLET_MODE_ON:
705 case power_manager::InputEvent_Type_TABLET_MODE_OFF: {
706 bool on =
707 (proto.type() == power_manager::InputEvent_Type_TABLET_MODE_ON);
708 for (auto& observer : observers_) 768 for (auto& observer : observers_)
709 observer.TabletModeEventReceived(on, timestamp); 769 observer.TabletModeEventReceived(TabletMode::ON, timestamp);
710 break; 770 break;
711 } 771 case power_manager::InputEvent_Type_TABLET_MODE_OFF:
772 for (auto& observer : observers_)
773 observer.TabletModeEventReceived(TabletMode::OFF, timestamp);
774 break;
712 } 775 }
713 } 776 }
714 777
715 void RegisterSuspendDelayImpl( 778 void RegisterSuspendDelayImpl(
716 const std::string& method_name, 779 const std::string& method_name,
717 const power_manager::RegisterSuspendDelayRequest& protobuf_request, 780 const power_manager::RegisterSuspendDelayRequest& protobuf_request,
718 dbus::ObjectProxy::ResponseCallback callback) { 781 dbus::ObjectProxy::ResponseCallback callback) {
719 dbus::MethodCall method_call( 782 dbus::MethodCall method_call(
720 power_manager::kPowerManagerInterface, method_name); 783 power_manager::kPowerManagerInterface, method_name);
721 dbus::MessageWriter writer(&method_call); 784 dbus::MessageWriter writer(&method_call);
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
880 // static 943 // static
881 PowerManagerClient* PowerManagerClient::Create( 944 PowerManagerClient* PowerManagerClient::Create(
882 DBusClientImplementationType type) { 945 DBusClientImplementationType type) {
883 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) 946 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION)
884 return new PowerManagerClientImpl(); 947 return new PowerManagerClientImpl();
885 DCHECK_EQ(FAKE_DBUS_CLIENT_IMPLEMENTATION, type); 948 DCHECK_EQ(FAKE_DBUS_CLIENT_IMPLEMENTATION, type);
886 return new FakePowerManagerClient(); 949 return new FakePowerManagerClient();
887 } 950 }
888 951
889 } // namespace chromeos 952 } // namespace chromeos
OLDNEW
« no previous file with comments | « chromeos/dbus/power_manager_client.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698