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

Unified 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 side-by-side diff with in-line comments
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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chromeos/dbus/power_manager_client.cc
diff --git a/chromeos/dbus/power_manager_client.cc b/chromeos/dbus/power_manager_client.cc
index 54b0cc42edbaf5a0d6f6833e3e17f1842789a433..348a1a06b3ff9fb21e198738034afe95de70f360 100644
--- a/chromeos/dbus/power_manager_client.cc
+++ b/chromeos/dbus/power_manager_client.cc
@@ -14,6 +14,7 @@
#include "base/stringprintf.h"
#include "base/time.h"
#include "base/timer.h"
+#include "chromeos/dbus/power_manager/suspend.pb.h"
#include "chromeos/dbus/power_state_control.pb.h"
#include "chromeos/dbus/power_supply_properties.pb.h"
#include "chromeos/dbus/video_activity_update.pb.h"
@@ -25,6 +26,8 @@
namespace chromeos {
+const int kSuspendDelayTimeoutMs = 5000;
+
// The PowerManagerClient implementation used in production.
class PowerManagerClientImpl : public PowerManagerClient {
public:
@@ -78,9 +81,55 @@ class PowerManagerClientImpl : public PowerManagerClient {
weak_ptr_factory_.GetWeakPtr()),
base::Bind(&PowerManagerClientImpl::SignalConnected,
weak_ptr_factory_.GetWeakPtr()));
+
+ power_manager_proxy_->ConnectToSignal(
+ power_manager::kPowerManagerInterface,
+ power_manager::kSuspendImminentSignal,
+ base::Bind(
+ &PowerManagerClientImpl::SuspendImminentReceived,
+ weak_ptr_factory_.GetWeakPtr()),
+ base::Bind(&PowerManagerClientImpl::SignalConnected,
+ weak_ptr_factory_.GetWeakPtr()));
+
+ // Register to powerd for suspend notifications.
+ dbus::MethodCall method_call(
+ power_manager::kPowerManagerInterface,
+ power_manager::kRegisterSuspendDelayMethod);
+ dbus::MessageWriter writer(&method_call);
+
+ power_manager::RegisterSuspendDelayRequest protobuf_request;
+ protobuf_request.Clear();
+ protobuf_request.set_timeout(kSuspendDelayTimeoutMs);
+
+ if (!writer.AppendProtoAsArrayOfBytes(protobuf_request)) {
+ LOG(ERROR) << "Error calling "
+ << power_manager::kRegisterSuspendDelayMethod;
+ return;
+ }
+ power_manager_proxy_->CallMethod(
+ &method_call,
+ dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
+ dbus::ObjectProxy::EmptyResponseCallback());
+
+ power_manager::RegisterSuspendDelayReply protobuf_reply;
+ delay_id_ = protobuf_reply.delay_id();
}
virtual ~PowerManagerClientImpl() {
+ // Unregister from powerd for suspend notifications.
+ dbus::MethodCall method_call(
+ power_manager::kPowerManagerInterface,
+ power_manager::kUnregisterSuspendDelayMethod);
+ dbus::MessageWriter writer(&method_call);
+
+ power_manager::UnregisterSuspendDelayRequest protobuf;
+ protobuf.Clear();
+ protobuf.set_delay_id(delay_id_);
+
+ power_manager_proxy_->CallMethod(
+ &method_call,
+ dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
+ dbus::ObjectProxy::EmptyResponseCallback());
}
// PowerManagerClient overrides:
@@ -463,8 +512,38 @@ class PowerManagerClientImpl : public PowerManagerClient {
FOR_EACH_OBSERVER(Observer, observers_, ScreenDimmingRequested(state));
}
+ void SuspendImminentReceived(dbus::Signal* signal) {
+ dbus::MessageReader reader(signal);
+ power_manager::SuspendImminent protobuf_imminent;
+ int32 suspend_id = protobuf_imminent.suspend_id();
+
+ FOR_EACH_OBSERVER(Observer, observers_, DelaySuspend());
+
+ dbus::MethodCall method_call(
+ power_manager::kPowerManagerInterface,
+ power_manager::kHandleSuspendReadinessMethod);
+ dbus::MessageWriter writer(&method_call);
+
+ power_manager::SuspendReadinessInfo protobuf_request;
+ protobuf_request.Clear();
+ protobuf_request.set_delay_id(delay_id_);
+ protobuf_request.set_suspend_id(suspend_id);
+
+ if (!writer.AppendProtoAsArrayOfBytes(protobuf_request)) {
+ LOG(ERROR) << "Error calling "
+ << power_manager::kHandleSuspendReadinessMethod;
+ return;
+ }
+ power_manager_proxy_->CallMethod(
+ &method_call,
+ dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
+ dbus::ObjectProxy::EmptyResponseCallback());
+ }
+
dbus::ObjectProxy* power_manager_proxy_;
ObserverList<Observer> observers_;
+ std::list<SuspendImminentCallback> suspend_delay_callback_list_;
+ int32 delay_id_;
// Note: This should remain the last member so it'll be destroyed and
// invalidate its weak pointers before any other members are destroyed.
« 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