Commit dee97bf1 authored by Daniel Erat's avatar Daniel Erat Committed by Commit Bot

chromeos: Add screen-dim deferring to PowerManagerClient.

Make PowerManagerClient notify its observers about
ScreenDimImminent D-Bus signals from powerd, and expose a
new method that calls powerd's DeferScreenDim D-Bus method.

Bug: 854908
Change-Id: I28db70981ad44c6073db4ef90dd94180665012af
Reviewed-on: https://chromium-review.googlesource.com/1123410Reviewed-by: default avatarJia Meng <jiameng@chromium.org>
Commit-Queue: Dan Erat <derat@chromium.org>
Cr-Commit-Position: refs/heads/master@{#572051}
parent f357cd72
......@@ -311,6 +311,10 @@ void FakePowerManagerClient::DeleteArcTimers(const std::string& tag,
FROM_HERE, base::BindOnce(std::move(callback), true));
}
void FakePowerManagerClient::DeferScreenDim() {
num_defer_screen_dim_calls_++;
}
bool FakePowerManagerClient::PopVideoActivityReport() {
CHECK(!video_activity_reports_.empty());
bool fullscreen = video_activity_reports_.front();
......@@ -364,6 +368,11 @@ void FakePowerManagerClient::SendPowerButtonEvent(
observer.PowerButtonEventReceived(down, timestamp);
}
void FakePowerManagerClient::SendScreenDimImminent() {
for (auto& observer : observers_)
observer.ScreenDimImminent();
}
void FakePowerManagerClient::SetLidState(LidState state,
const base::TimeTicks& timestamp) {
lid_state_ = state;
......
......@@ -43,6 +43,7 @@ class CHROMEOS_EXPORT FakePowerManagerClient : public PowerManagerClient {
int num_set_is_projecting_calls() const {
return num_set_is_projecting_calls_;
}
int num_defer_screen_dim_calls() const { return num_defer_screen_dim_calls_; }
double screen_brightness_percent() const {
return screen_brightness_percent_.value();
}
......@@ -111,6 +112,7 @@ class CHROMEOS_EXPORT FakePowerManagerClient : public PowerManagerClient {
VoidDBusMethodCallback callback) override;
void DeleteArcTimers(const std::string& tag,
VoidDBusMethodCallback callback) override;
void DeferScreenDim() override;
// Pops the first report from |video_activity_reports_|, returning whether the
// activity was fullscreen or not. There must be at least one report.
......@@ -135,6 +137,9 @@ class CHROMEOS_EXPORT FakePowerManagerClient : public PowerManagerClient {
// Notifies observers that the power button has been pressed or released.
void SendPowerButtonEvent(bool down, const base::TimeTicks& timestamp);
// Notifies observers that the screen is about to be dimmed.
void SendScreenDimImminent();
// Sets |lid_state_| or |tablet_mode_| and notifies |observers_| about the
// change.
void SetLidState(LidState state, const base::TimeTicks& timestamp);
......@@ -192,6 +197,7 @@ class CHROMEOS_EXPORT FakePowerManagerClient : public PowerManagerClient {
int num_set_policy_calls_ = 0;
int num_set_is_projecting_calls_ = 0;
int num_set_backlights_forced_off_calls_ = 0;
int num_defer_screen_dim_calls_ = 0;
// Number of pending suspend readiness callbacks.
int num_pending_suspend_readiness_callbacks_ = 0;
......
......@@ -463,6 +463,10 @@ class PowerManagerClientImpl : public PowerManagerClient {
base::BindOnce(&OnVoidDBusMethod, std::move(callback)));
}
void DeferScreenDim() override {
SimpleMethodCallToPowerManager(power_manager::kDeferScreenDimMethod);
}
protected:
void Init(dbus::Bus* bus) override {
power_manager_proxy_ = bus->GetObjectProxy(
......@@ -496,6 +500,8 @@ class PowerManagerClientImpl : public PowerManagerClient {
&PowerManagerClientImpl::SuspendDoneReceived},
{power_manager::kDarkSuspendImminentSignal,
&PowerManagerClientImpl::DarkSuspendImminentReceived},
{power_manager::kScreenDimImminentSignal,
&PowerManagerClientImpl::ScreenDimImminentReceived},
{power_manager::kIdleActionImminentSignal,
&PowerManagerClientImpl::IdleActionImminentReceived},
{power_manager::kIdleActionDeferredSignal,
......@@ -886,6 +892,11 @@ class PowerManagerClientImpl : public PowerManagerClient {
base::PowerMonitorDeviceSource::HandleSystemResumed();
}
void ScreenDimImminentReceived(dbus::Signal* signal) {
for (auto& observer : observers_)
observer.ScreenDimImminent();
}
void IdleActionImminentReceived(dbus::Signal* signal) {
dbus::MessageReader reader(signal);
power_manager::IdleActionImminent proto;
......
......@@ -133,6 +133,9 @@ class CHROMEOS_EXPORT PowerManagerClient : public DBusClient {
virtual void TabletModeEventReceived(TabletMode mode,
const base::TimeTicks& timestamp) {}
// Called just before the screen is dimmed in response to user inactivity.
virtual void ScreenDimImminent() {}
// Called when the idle action will be performed after
// |time_until_idle_action|.
virtual void IdleActionImminent(
......@@ -298,6 +301,11 @@ class CHROMEOS_EXPORT PowerManagerClient : public DBusClient {
virtual void DeleteArcTimers(const std::string& tag,
VoidDBusMethodCallback callback) = 0;
// Instructs powerd to defer dimming the screen. This only has an effect when
// called shortly (i.e. seconds) after observers have received
// ScreenDimImminent notifications.
virtual void DeferScreenDim() = 0;
// Creates the instance.
static PowerManagerClient* Create(DBusClientImplementationType type);
......
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