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

Unified Diff: chromeos/dbus/power_manager_client.cc

Issue 438433002: Add dark resume methods to PowerManagerClient (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: use explicit methods instead of base::Bind Created 6 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: chromeos/dbus/power_manager_client.cc
diff --git a/chromeos/dbus/power_manager_client.cc b/chromeos/dbus/power_manager_client.cc
index 587e43f79992af6b6acaa62f82eb49448ce849d8..9c0cf33c130aa7b08c4143852b0e9ab641529cb0 100644
--- a/chromeos/dbus/power_manager_client.cc
+++ b/chromeos/dbus/power_manager_client.cc
@@ -48,8 +48,11 @@ class PowerManagerClientImpl : public PowerManagerClient {
power_manager_proxy_(NULL),
suspend_delay_id_(-1),
has_suspend_delay_id_(false),
+ dark_suspend_delay_id_(-1),
+ has_dark_suspend_delay_id_(false),
pending_suspend_id_(-1),
suspend_is_pending_(false),
+ suspending_from_dark_resume_(false),
num_pending_suspend_readiness_callbacks_(0),
last_is_projecting_(false),
weak_ptr_factory_(this) {}
@@ -285,6 +288,15 @@ class PowerManagerClientImpl : public PowerManagerClient {
power_manager_proxy_->ConnectToSignal(
power_manager::kPowerManagerInterface,
+ power_manager::kDarkSuspendImminentSignal,
+ base::Bind(
+ &PowerManagerClientImpl::DarkSuspendImminentReceived,
+ weak_ptr_factory_.GetWeakPtr()),
+ base::Bind(&PowerManagerClientImpl::SignalConnected,
+ weak_ptr_factory_.GetWeakPtr()));
+
+ power_manager_proxy_->ConnectToSignal(
+ power_manager::kPowerManagerInterface,
power_manager::kIdleActionImminentSignal,
base::Bind(
&PowerManagerClientImpl::IdleActionImminentReceived,
@@ -301,7 +313,7 @@ class PowerManagerClientImpl : public PowerManagerClient {
base::Bind(&PowerManagerClientImpl::SignalConnected,
weak_ptr_factory_.GetWeakPtr()));
- RegisterSuspendDelay();
+ RegisterSuspendDelays();
}
private:
@@ -336,7 +348,7 @@ class PowerManagerClientImpl : public PowerManagerClient {
<< (new_owner.empty() ? "[none]" : new_owner.c_str()) << ")";
if (!new_owner.empty()) {
VLOG(1) << "Sending initial state to power manager";
- RegisterSuspendDelay();
+ RegisterSuspendDelays();
SetIsProjecting(last_is_projecting_);
FOR_EACH_OBSERVER(Observer, observers_, PowerManagerRestarted());
}
@@ -425,53 +437,85 @@ class PowerManagerClientImpl : public PowerManagerClient {
}
void OnRegisterSuspendDelayReply(dbus::Response* response) {
+ RegisterSuspendDelayReplyCommon(false, response);
Daniel Erat 2014/08/18 21:02:13 nit: OnRegisterSuspendDelayReply()? putting "Regis
Chirantan Ekbote 2014/08/18 21:15:43 Sorry, I uploaded this patch set on Friday before
+ }
+
+ void OnRegisterDarkSuspendDelayReply(dbus::Response* response) {
+ RegisterSuspendDelayReplyCommon(true, response);
+ }
+
+ void RegisterSuspendDelayReplyCommon(bool dark_suspend,
+ dbus::Response* response) {
if (!response) {
- LOG(ERROR) << "Error calling "
- << power_manager::kRegisterSuspendDelayMethod;
+ LOG(ERROR) << "Error calling " << response->GetMember();
return;
}
dbus::MessageReader reader(response);
power_manager::RegisterSuspendDelayReply protobuf;
if (!reader.PopArrayOfBytesAsProto(&protobuf)) {
- LOG(ERROR) << "Unable to parse reply from "
- << power_manager::kRegisterSuspendDelayMethod;
+ LOG(ERROR) << "Unable to parse reply from " << response->GetMember();
return;
}
- suspend_delay_id_ = protobuf.delay_id();
- has_suspend_delay_id_ = true;
- VLOG(1) << "Registered suspend delay " << suspend_delay_id_;
+ if (dark_suspend) {
+ dark_suspend_delay_id_ = protobuf.delay_id();
+ has_dark_suspend_delay_id_ = true;
+ VLOG(1) << "Registered dark suspend delay " << dark_suspend_delay_id_;
+ } else {
+ suspend_delay_id_ = protobuf.delay_id();
+ has_suspend_delay_id_ = true;
+ VLOG(1) << "Registered suspend delay " << suspend_delay_id_;
+ }
}
void SuspendImminentReceived(dbus::Signal* signal) {
- if (!has_suspend_delay_id_) {
- LOG(ERROR) << "Received unrequested "
- << power_manager::kSuspendImminentSignal << " signal";
+ SuspendImminentCommon(false, signal);
+ }
+
+ void DarkSuspendImminentReceived(dbus::Signal* signal) {
+ SuspendImminentCommon(true, signal);
+ }
+
+ void SuspendImminentCommon(bool in_dark_resume,
+ dbus::Signal* signal) {
+ std::string signal_name = signal->GetMember();
+ if ((in_dark_resume && !has_dark_suspend_delay_id_) ||
+ (!in_dark_resume && !has_suspend_delay_id_)) {
+ LOG(ERROR) << "Received unrequested " << signal_name << " signal";
return;
}
dbus::MessageReader reader(signal);
power_manager::SuspendImminent proto;
if (!reader.PopArrayOfBytesAsProto(&proto)) {
- LOG(ERROR) << "Unable to decode protocol buffer from "
- << power_manager::kSuspendImminentSignal << " signal";
+ LOG(ERROR) << "Unable to decode protocol buffer from " << signal_name
+ << " signal";
return;
}
- VLOG(1) << "Got " << power_manager::kSuspendImminentSignal << " signal "
- << "announcing suspend attempt " << proto.suspend_id();
- if (suspend_is_pending_) {
- LOG(WARNING) << "Got " << power_manager::kSuspendImminentSignal
- << " signal about pending suspend attempt "
- << proto.suspend_id() << " while still waiting "
- << "on attempt " << pending_suspend_id_;
+ VLOG(1) << "Got " << signal_name << " signal announcing suspend attempt "
+ << proto.suspend_id();
+
+ // If a previous suspend is pending from the same state we are currently in
+ // (fully powered on or in dark resume), then something's gone a little
+ // wonky.
+ if (suspend_is_pending_ &&
+ suspending_from_dark_resume_ == in_dark_resume) {
+ LOG(WARNING) << "Got " << signal_name << " signal about pending suspend "
+ << "attempt " << proto.suspend_id() << " while still "
+ << "waiting on attempt " << pending_suspend_id_;
}
pending_suspend_id_ = proto.suspend_id();
suspend_is_pending_ = true;
+ suspending_from_dark_resume_ = in_dark_resume;
num_pending_suspend_readiness_callbacks_ = 0;
- FOR_EACH_OBSERVER(Observer, observers_, SuspendImminent());
+ if (suspending_from_dark_resume_) {
Daniel Erat 2014/08/18 21:02:13 nit: omit curly brackets
+ FOR_EACH_OBSERVER(Observer, observers_, DarkSuspendImminent());
+ } else {
+ FOR_EACH_OBSERVER(Observer, observers_, SuspendImminent());
+ }
MaybeReportSuspendReadiness();
}
@@ -556,18 +600,24 @@ class PowerManagerClientImpl : public PowerManagerClient {
}
}
- // Registers a suspend delay with the power manager. This is usually
- // only called at startup, but if the power manager restarts, we need to
- // create a new delay.
- void RegisterSuspendDelay() {
+ // Registers suspend delays with the power manager. This is usually only
+ // called at startup, but if the power manager restarts, we need to create new
+ // delays.
+ void RegisterSuspendDelays() {
// Throw out any old delay that was registered.
suspend_delay_id_ = -1;
has_suspend_delay_id_ = false;
+ dark_suspend_delay_id_ = -1;
+ has_dark_suspend_delay_id_ = false;
dbus::MethodCall method_call(
power_manager::kPowerManagerInterface,
power_manager::kRegisterSuspendDelayMethod);
dbus::MessageWriter writer(&method_call);
+ dbus::MethodCall dark_method_call(
+ power_manager::kPowerManagerInterface,
+ power_manager::kRegisterDarkSuspendDelayMethod);
+ dbus::MessageWriter dark_writer(&dark_method_call);
power_manager::RegisterSuspendDelayRequest protobuf_request;
base::TimeDelta timeout =
@@ -580,12 +630,23 @@ class PowerManagerClientImpl : public PowerManagerClient {
<< power_manager::kRegisterSuspendDelayMethod;
return;
}
+ if (!dark_writer.AppendProtoAsArrayOfBytes(protobuf_request)) {
+ LOG(ERROR) << "Error constructing message for "
+ << power_manager::kRegisterDarkSuspendDelayMethod;
+ return;
+ }
power_manager_proxy_->CallMethod(
&method_call,
dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
base::Bind(
&PowerManagerClientImpl::OnRegisterSuspendDelayReply,
weak_ptr_factory_.GetWeakPtr()));
+ power_manager_proxy_->CallMethod(
+ &dark_method_call,
+ dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
+ base::Bind(
+ &PowerManagerClientImpl::OnRegisterDarkSuspendDelayReply,
+ weak_ptr_factory_.GetWeakPtr()));
}
// Records the fact that an observer has finished doing asynchronous work
@@ -607,23 +668,31 @@ class PowerManagerClientImpl : public PowerManagerClient {
if (!suspend_is_pending_ || num_pending_suspend_readiness_callbacks_ > 0)
return;
+ std::string method_name;
+ int32 delay_id;
+ if (suspending_from_dark_resume_) {
+ method_name = power_manager::kHandleDarkSuspendReadinessMethod;
+ delay_id = dark_suspend_delay_id_;
+ } else {
+ method_name = power_manager::kHandleSuspendReadinessMethod;
+ delay_id = suspend_delay_id_;
+ }
+
dbus::MethodCall method_call(
- power_manager::kPowerManagerInterface,
- power_manager::kHandleSuspendReadinessMethod);
+ power_manager::kPowerManagerInterface, method_name);
dbus::MessageWriter writer(&method_call);
- VLOG(1) << "Announcing readiness of suspend delay " << suspend_delay_id_
+ VLOG(1) << "Announcing readiness of suspend delay " << delay_id
<< " for suspend attempt " << pending_suspend_id_;
power_manager::SuspendReadinessInfo protobuf_request;
- protobuf_request.set_delay_id(suspend_delay_id_);
+ protobuf_request.set_delay_id(delay_id);
protobuf_request.set_suspend_id(pending_suspend_id_);
pending_suspend_id_ = -1;
suspend_is_pending_ = false;
if (!writer.AppendProtoAsArrayOfBytes(protobuf_request)) {
- LOG(ERROR) << "Error constructing message for "
- << power_manager::kHandleSuspendReadinessMethod;
+ LOG(ERROR) << "Error constructing message for " << method_name;
return;
}
power_manager_proxy_->CallMethod(
@@ -642,10 +711,15 @@ class PowerManagerClientImpl : public PowerManagerClient {
int32 suspend_delay_id_;
bool has_suspend_delay_id_;
+ // The delay_id_ obtained from the RegisterDarkSuspendDelay request.
+ int32 dark_suspend_delay_id_;
+ bool has_dark_suspend_delay_id_;
+
// powerd-supplied ID corresponding to an imminent suspend attempt that is
// currently being delayed.
int32 pending_suspend_id_;
bool suspend_is_pending_;
+ bool suspending_from_dark_resume_;
// Number of callbacks that have been returned by
// GetSuspendReadinessCallback() during the currently-pending suspend
« chromeos/dbus/power_manager_client.h ('K') | « chromeos/dbus/power_manager_client.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698