Commit 5eacb505 authored by Daniel Erat's avatar Daniel Erat Committed by Commit Bot

chromeos: Simplify D-Bus signals in PowerManagerClient.

Make PowerManagerClient iterate over a map of (signal name,
function pointer) tuples instead of repeating a bunch of
difficult-to-read ConnectToSignal calls.

Also switch to in-class initialization of data members.

Bug: none
Change-Id: Ifff2a30481556c5ff86f83f4ca721b00504d7856
Reviewed-on: https://chromium-review.googlesource.com/981525Reviewed-by: default avatarSteven Bennetts <stevenjb@chromium.org>
Commit-Queue: Dan Erat <derat@chromium.org>
Cr-Commit-Position: refs/heads/master@{#546201}
parent da8665a4
...@@ -88,17 +88,6 @@ class PowerManagerClientImpl : public PowerManagerClient { ...@@ -88,17 +88,6 @@ class PowerManagerClientImpl : public PowerManagerClient {
public: public:
PowerManagerClientImpl() PowerManagerClientImpl()
: origin_thread_id_(base::PlatformThread::CurrentId()), : origin_thread_id_(base::PlatformThread::CurrentId()),
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),
next_suspend_readiness_callback_id_(1),
notifying_observers_about_suspend_imminent_(false),
last_is_projecting_(false),
weak_ptr_factory_(this) {} weak_ptr_factory_(this) {}
~PowerManagerClientImpl() override { ~PowerManagerClientImpl() override {
...@@ -356,111 +345,41 @@ class PowerManagerClientImpl : public PowerManagerClient { ...@@ -356,111 +345,41 @@ class PowerManagerClientImpl : public PowerManagerClient {
base::Bind(&PowerManagerClientImpl::NameOwnerChangedReceived, base::Bind(&PowerManagerClientImpl::NameOwnerChangedReceived,
weak_ptr_factory_.GetWeakPtr())); weak_ptr_factory_.GetWeakPtr()));
// Monitor the D-Bus signal for brightness changes. Only the power // Listen to D-Bus signals emitted by powerd.
// manager knows the actual brightness level. We don't cache the typedef void (PowerManagerClientImpl::*SignalMethod)(dbus::Signal*);
// brightness level in Chrome as it'll make things less reliable. const std::map<const char*, SignalMethod> kSignalMethods = {
{power_manager::kScreenBrightnessChangedSignal,
&PowerManagerClientImpl::ScreenBrightnessChangedReceived},
{power_manager::kKeyboardBrightnessChangedSignal,
&PowerManagerClientImpl::KeyboardBrightnessChangedReceived},
{power_manager::kScreenIdleStateChangedSignal,
&PowerManagerClientImpl::ScreenIdleStateChangedReceived},
{power_manager::kInactivityDelaysChangedSignal,
&PowerManagerClientImpl::InactivityDelaysChangedReceived},
{power_manager::kPeripheralBatteryStatusSignal,
&PowerManagerClientImpl::PeripheralBatteryStatusReceived},
{power_manager::kPowerSupplyPollSignal,
&PowerManagerClientImpl::PowerSupplyPollReceived},
{power_manager::kInputEventSignal,
&PowerManagerClientImpl::InputEventReceived},
{power_manager::kSuspendImminentSignal,
&PowerManagerClientImpl::SuspendImminentReceived},
{power_manager::kSuspendDoneSignal,
&PowerManagerClientImpl::SuspendDoneReceived},
{power_manager::kDarkSuspendImminentSignal,
&PowerManagerClientImpl::DarkSuspendImminentReceived},
{power_manager::kIdleActionImminentSignal,
&PowerManagerClientImpl::IdleActionImminentReceived},
{power_manager::kIdleActionDeferredSignal,
&PowerManagerClientImpl::IdleActionDeferredReceived},
};
for (const auto& it : kSignalMethods) {
power_manager_proxy_->ConnectToSignal( power_manager_proxy_->ConnectToSignal(
power_manager::kPowerManagerInterface, power_manager::kPowerManagerInterface, it.first,
power_manager::kScreenBrightnessChangedSignal, base::BindRepeating(it.second, weak_ptr_factory_.GetWeakPtr()),
base::BindRepeating(
&PowerManagerClientImpl::ScreenBrightnessChangedReceived,
weak_ptr_factory_.GetWeakPtr()),
base::BindOnce(&PowerManagerClientImpl::SignalConnected, base::BindOnce(&PowerManagerClientImpl::SignalConnected,
weak_ptr_factory_.GetWeakPtr())); weak_ptr_factory_.GetWeakPtr()));
}
power_manager_proxy_->ConnectToSignal(
power_manager::kPowerManagerInterface,
power_manager::kKeyboardBrightnessChangedSignal,
base::BindRepeating(
&PowerManagerClientImpl::KeyboardBrightnessChangedReceived,
weak_ptr_factory_.GetWeakPtr()),
base::BindOnce(&PowerManagerClientImpl::SignalConnected,
weak_ptr_factory_.GetWeakPtr()));
power_manager_proxy_->ConnectToSignal(
power_manager::kPowerManagerInterface,
power_manager::kScreenIdleStateChangedSignal,
base::Bind(&PowerManagerClientImpl::ScreenIdleStateChangedReceived,
weak_ptr_factory_.GetWeakPtr()),
base::Bind(&PowerManagerClientImpl::SignalConnected,
weak_ptr_factory_.GetWeakPtr()));
power_manager_proxy_->ConnectToSignal(
power_manager::kPowerManagerInterface,
power_manager::kInactivityDelaysChangedSignal,
base::BindRepeating(
&PowerManagerClientImpl::InactivityDelaysChangedReceived,
weak_ptr_factory_.GetWeakPtr()),
base::BindRepeating(&PowerManagerClientImpl::SignalConnected,
weak_ptr_factory_.GetWeakPtr()));
power_manager_proxy_->ConnectToSignal(
power_manager::kPowerManagerInterface,
power_manager::kPeripheralBatteryStatusSignal,
base::Bind(&PowerManagerClientImpl::PeripheralBatteryStatusReceived,
weak_ptr_factory_.GetWeakPtr()),
base::Bind(&PowerManagerClientImpl::SignalConnected,
weak_ptr_factory_.GetWeakPtr()));
power_manager_proxy_->ConnectToSignal(
power_manager::kPowerManagerInterface,
power_manager::kPowerSupplyPollSignal,
base::Bind(&PowerManagerClientImpl::PowerSupplyPollReceived,
weak_ptr_factory_.GetWeakPtr()),
base::Bind(&PowerManagerClientImpl::SignalConnected,
weak_ptr_factory_.GetWeakPtr()));
power_manager_proxy_->ConnectToSignal(
power_manager::kPowerManagerInterface,
power_manager::kInputEventSignal,
base::Bind(&PowerManagerClientImpl::InputEventReceived,
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::HandleSuspendImminent,
weak_ptr_factory_.GetWeakPtr(), false),
base::Bind(&PowerManagerClientImpl::SignalConnected,
weak_ptr_factory_.GetWeakPtr()));
power_manager_proxy_->ConnectToSignal(
power_manager::kPowerManagerInterface,
power_manager::kSuspendDoneSignal,
base::Bind(&PowerManagerClientImpl::SuspendDoneReceived,
weak_ptr_factory_.GetWeakPtr()),
base::Bind(&PowerManagerClientImpl::SignalConnected,
weak_ptr_factory_.GetWeakPtr()));
power_manager_proxy_->ConnectToSignal(
power_manager::kPowerManagerInterface,
power_manager::kDarkSuspendImminentSignal,
base::Bind(
&PowerManagerClientImpl::HandleSuspendImminent,
weak_ptr_factory_.GetWeakPtr(), true),
base::Bind(&PowerManagerClientImpl::SignalConnected,
weak_ptr_factory_.GetWeakPtr()));
power_manager_proxy_->ConnectToSignal(
power_manager::kPowerManagerInterface,
power_manager::kIdleActionImminentSignal,
base::Bind(
&PowerManagerClientImpl::IdleActionImminentReceived,
weak_ptr_factory_.GetWeakPtr()),
base::Bind(&PowerManagerClientImpl::SignalConnected,
weak_ptr_factory_.GetWeakPtr()));
power_manager_proxy_->ConnectToSignal(
power_manager::kPowerManagerInterface,
power_manager::kIdleActionDeferredSignal,
base::Bind(
&PowerManagerClientImpl::IdleActionDeferredReceived,
weak_ptr_factory_.GetWeakPtr()),
base::Bind(&PowerManagerClientImpl::SignalConnected,
weak_ptr_factory_.GetWeakPtr()));
RegisterSuspendDelays(); RegisterSuspendDelays();
} }
...@@ -732,6 +651,14 @@ class PowerManagerClientImpl : public PowerManagerClient { ...@@ -732,6 +651,14 @@ class PowerManagerClientImpl : public PowerManagerClient {
} }
} }
void SuspendImminentReceived(dbus::Signal* signal) {
HandleSuspendImminent(false /* in_dark_resume */, signal);
}
void DarkSuspendImminentReceived(dbus::Signal* signal) {
HandleSuspendImminent(true /* in_dark_resume */, signal);
}
void HandleSuspendImminent(bool in_dark_resume, dbus::Signal* signal) { void HandleSuspendImminent(bool in_dark_resume, dbus::Signal* signal) {
std::string signal_name = signal->GetMember(); std::string signal_name = signal->GetMember();
if ((in_dark_resume && !has_dark_suspend_delay_id_) || if ((in_dark_resume && !has_dark_suspend_delay_id_) ||
...@@ -1019,31 +946,31 @@ class PowerManagerClientImpl : public PowerManagerClient { ...@@ -1019,31 +946,31 @@ class PowerManagerClientImpl : public PowerManagerClient {
// Origin thread (i.e. the UI thread in production). // Origin thread (i.e. the UI thread in production).
base::PlatformThreadId origin_thread_id_; base::PlatformThreadId origin_thread_id_;
dbus::ObjectProxy* power_manager_proxy_; dbus::ObjectProxy* power_manager_proxy_ = nullptr;
base::ObserverList<Observer> observers_; base::ObserverList<Observer> observers_;
// The delay ID obtained from the RegisterSuspendDelay request. // The delay ID obtained from the RegisterSuspendDelay request.
int32_t suspend_delay_id_; int32_t suspend_delay_id_ = -1;
bool has_suspend_delay_id_; bool has_suspend_delay_id_ = false;
// The delay ID obtained from the RegisterDarkSuspendDelay request. // The delay ID obtained from the RegisterDarkSuspendDelay request.
int32_t dark_suspend_delay_id_; int32_t dark_suspend_delay_id_ = -1;
bool has_dark_suspend_delay_id_; bool has_dark_suspend_delay_id_ = false;
// powerd-supplied ID corresponding to an imminent (either regular or dark) // powerd-supplied ID corresponding to an imminent (either regular or dark)
// suspend attempt that is currently being delayed. // suspend attempt that is currently being delayed.
int32_t pending_suspend_id_; int32_t pending_suspend_id_ = -1;
bool suspend_is_pending_; bool suspend_is_pending_ = false;
// Set to true when the suspend currently being delayed was triggered during a // Set to true when the suspend currently being delayed was triggered during a
// dark resume. Since |pending_suspend_id_| and |suspend_is_pending_| are // dark resume. Since |pending_suspend_id_| and |suspend_is_pending_| are
// both shared by normal and dark suspends, |suspending_from_dark_resume_| // both shared by normal and dark suspends, |suspending_from_dark_resume_|
// helps distinguish the context within which these variables are being used. // helps distinguish the context within which these variables are being used.
bool suspending_from_dark_resume_; bool suspending_from_dark_resume_ = false;
// Next ID to be assigned to a callback returned via // Next ID to be assigned to a callback returned via
// GetSuspendReadinessCallback(). // GetSuspendReadinessCallback().
int next_suspend_readiness_callback_id_; int next_suspend_readiness_callback_id_ = 1;
// Map from suspend readiness callback ID to the location of the code that // Map from suspend readiness callback ID to the location of the code that
// requested the callback. // requested the callback.
...@@ -1052,10 +979,10 @@ class PowerManagerClientImpl : public PowerManagerClient { ...@@ -1052,10 +979,10 @@ class PowerManagerClientImpl : public PowerManagerClient {
// Inspected by MaybeReportSuspendReadiness() to avoid prematurely notifying // Inspected by MaybeReportSuspendReadiness() to avoid prematurely notifying
// powerd about suspend readiness while |observers_|' SuspendImminent() // powerd about suspend readiness while |observers_|' SuspendImminent()
// methods are being called by HandleSuspendImminent(). // methods are being called by HandleSuspendImminent().
bool notifying_observers_about_suspend_imminent_; bool notifying_observers_about_suspend_imminent_ = false;
// Last state passed to SetIsProjecting(). // Last state passed to SetIsProjecting().
bool last_is_projecting_; bool last_is_projecting_ = false;
// The delegate used to manage the power consumption of Chrome's renderer // The delegate used to manage the power consumption of Chrome's renderer
// processes. // processes.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment