Commit 996bb796 authored by Daniel Erat's avatar Daniel Erat Committed by Commit Bot

chromeos: Call new SetScreenBrightness D-Bus method.

Update PowerManagerClient to pass serialized protocol
buffers to powerd's SetScreenBrightness D-Bus method instead
of passing native D-Bus arguments to
SetScreenBrightnessPercent. This allows passing the reason
for the request.

Bug: 881786
Change-Id: I753fb19f45f99acf3142d91ba96cf3650699df33
Reviewed-on: https://chromium-review.googlesource.com/1244551Reviewed-by: default avatarJia Meng <jiameng@chromium.org>
Reviewed-by: default avatarLuis Hector Chavez <lhchavez@chromium.org>
Commit-Queue: Dan Erat <derat@chromium.org>
Cr-Commit-Position: refs/heads/master@{#594576}
parent 10ded18b
...@@ -91,8 +91,11 @@ class LockScreenNoteDisplayStateHandlerTest : public AshTestBase { ...@@ -91,8 +91,11 @@ class LockScreenNoteDisplayStateHandlerTest : public AshTestBase {
auto power_manager_client = auto power_manager_client =
std::make_unique<chromeos::FakePowerManagerClient>(); std::make_unique<chromeos::FakePowerManagerClient>();
power_manager_client_ = power_manager_client.get(); power_manager_client_ = power_manager_client.get();
power_manager_client_->SetScreenBrightnessPercent(kVisibleBrightnessPercent,
false /*gradual*/); power_manager::SetBacklightBrightnessRequest request;
request.set_percent(kVisibleBrightnessPercent);
power_manager_client_->SetScreenBrightness(request);
power_manager_observer_ = power_manager_observer_ =
std::make_unique<TestPowerManagerObserver>(power_manager_client_); std::make_unique<TestPowerManagerObserver>(power_manager_client_);
chromeos::DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient( chromeos::DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "base/metrics/user_metrics.h" #include "base/metrics/user_metrics.h"
#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/power_manager/backlight.pb.h"
#include "chromeos/dbus/power_manager_client.h" #include "chromeos/dbus/power_manager_client.h"
#include "ui/base/accelerators/accelerator.h" #include "ui/base/accelerators/accelerator.h"
...@@ -36,9 +37,17 @@ void BrightnessControllerChromeos::HandleBrightnessUp( ...@@ -36,9 +37,17 @@ void BrightnessControllerChromeos::HandleBrightnessUp(
void BrightnessControllerChromeos::SetBrightnessPercent(double percent, void BrightnessControllerChromeos::SetBrightnessPercent(double percent,
bool gradual) { bool gradual) {
power_manager::SetBacklightBrightnessRequest request;
request.set_percent(percent);
request.set_transition(
gradual
? power_manager::SetBacklightBrightnessRequest_Transition_GRADUAL
: power_manager::SetBacklightBrightnessRequest_Transition_INSTANT);
request.set_cause(
power_manager::SetBacklightBrightnessRequest_Cause_USER_REQUEST);
chromeos::DBusThreadManager::Get() chromeos::DBusThreadManager::Get()
->GetPowerManagerClient() ->GetPowerManagerClient()
->SetScreenBrightnessPercent(percent, gradual); ->SetScreenBrightness(request);
} }
void BrightnessControllerChromeos::GetBrightnessPercent( void BrightnessControllerChromeos::GetBrightnessPercent(
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "base/threading/sequenced_task_runner_handle.h" #include "base/threading/sequenced_task_runner_handle.h"
#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/fake_power_manager_client.h" #include "chromeos/dbus/fake_power_manager_client.h"
#include "chromeos/dbus/power_manager/backlight.pb.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
namespace chromeos { namespace chromeos {
...@@ -81,9 +82,11 @@ class BrightnessMonitorImplTest : public testing::Test { ...@@ -81,9 +82,11 @@ class BrightnessMonitorImplTest : public testing::Test {
// on fake power manager client. // on fake power manager client.
void SetUpBrightnessMonitor(double init_brightness) { void SetUpBrightnessMonitor(double init_brightness) {
if (init_brightness >= 0) { if (init_brightness >= 0) {
power_manager::SetBacklightBrightnessRequest request;
request.set_percent(init_brightness);
chromeos::DBusThreadManager::Get() chromeos::DBusThreadManager::Get()
->GetPowerManagerClient() ->GetPowerManagerClient()
->SetScreenBrightnessPercent(init_brightness, true); ->SetScreenBrightness(request);
} }
monitor_ = BrightnessMonitorImpl::CreateForTesting( monitor_ = BrightnessMonitorImpl::CreateForTesting(
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "chrome/browser/chromeos/profiles/profile_helper.h" #include "chrome/browser/chromeos/profiles/profile_helper.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/power_manager/backlight.pb.h"
#include "chromeos/dbus/power_manager_client.h" #include "chromeos/dbus/power_manager_client.h"
#include "chromeos/network/network_state_handler.h" #include "chromeos/network/network_state_handler.h"
#include "components/prefs/pref_service.h" #include "components/prefs/pref_service.h"
...@@ -57,7 +58,15 @@ void DeviceActions::GetScreenBrightnessLevel( ...@@ -57,7 +58,15 @@ void DeviceActions::GetScreenBrightnessLevel(
} }
void DeviceActions::SetScreenBrightnessLevel(double level, bool gradual) { void DeviceActions::SetScreenBrightnessLevel(double level, bool gradual) {
power_manager::SetBacklightBrightnessRequest request;
request.set_percent(level * 100);
request.set_transition(
gradual
? power_manager::SetBacklightBrightnessRequest_Transition_GRADUAL
: power_manager::SetBacklightBrightnessRequest_Transition_INSTANT);
request.set_cause(
power_manager::SetBacklightBrightnessRequest_Cause_USER_REQUEST);
chromeos::DBusThreadManager::Get() chromeos::DBusThreadManager::Get()
->GetPowerManagerClient() ->GetPowerManagerClient()
->SetScreenBrightnessPercent(level * 100.0f, gradual); ->SetScreenBrightness(request);
} }
...@@ -38,6 +38,18 @@ void ArcTimerExpirationCallback(int expiration_fd) { ...@@ -38,6 +38,18 @@ void ArcTimerExpirationCallback(int expiration_fd) {
} }
} }
power_manager::BacklightBrightnessChange_Cause RequestCauseToChangeCause(
power_manager::SetBacklightBrightnessRequest_Cause cause) {
switch (cause) {
case power_manager::SetBacklightBrightnessRequest_Cause_USER_REQUEST:
return power_manager::BacklightBrightnessChange_Cause_USER_REQUEST;
case power_manager::SetBacklightBrightnessRequest_Cause_MODEL:
return power_manager::BacklightBrightnessChange_Cause_MODEL;
}
NOTREACHED() << "Unhandled brightness request cause " << cause;
return power_manager::BacklightBrightnessChange_Cause_USER_REQUEST;
}
} // namespace } // namespace
FakePowerManagerClient::FakePowerManagerClient() FakePowerManagerClient::FakePowerManagerClient()
...@@ -83,14 +95,14 @@ void FakePowerManagerClient::DecreaseScreenBrightness(bool allow_off) {} ...@@ -83,14 +95,14 @@ void FakePowerManagerClient::DecreaseScreenBrightness(bool allow_off) {}
void FakePowerManagerClient::IncreaseScreenBrightness() {} void FakePowerManagerClient::IncreaseScreenBrightness() {}
void FakePowerManagerClient::SetScreenBrightnessPercent(double percent, void FakePowerManagerClient::SetScreenBrightness(
bool gradual) { const power_manager::SetBacklightBrightnessRequest& request) {
screen_brightness_percent_ = percent; screen_brightness_percent_ = request.percent();
requested_screen_brightness_percent_ = percent; requested_screen_brightness_percent_ = request.percent();
power_manager::BacklightBrightnessChange change; power_manager::BacklightBrightnessChange change;
change.set_percent(percent); change.set_percent(request.percent());
change.set_cause(power_manager::BacklightBrightnessChange_Cause_USER_REQUEST); change.set_cause(RequestCauseToChangeCause(request.cause()));
base::ThreadTaskRunnerHandle::Get()->PostTask( base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, FROM_HERE,
base::BindOnce(&FakePowerManagerClient::SendScreenBrightnessChanged, base::BindOnce(&FakePowerManagerClient::SendScreenBrightnessChanged,
......
...@@ -77,7 +77,8 @@ class CHROMEOS_EXPORT FakePowerManagerClient : public PowerManagerClient { ...@@ -77,7 +77,8 @@ class CHROMEOS_EXPORT FakePowerManagerClient : public PowerManagerClient {
base::WeakPtr<RenderProcessManagerDelegate> delegate) override; base::WeakPtr<RenderProcessManagerDelegate> delegate) override;
void DecreaseScreenBrightness(bool allow_off) override; void DecreaseScreenBrightness(bool allow_off) override;
void IncreaseScreenBrightness() override; void IncreaseScreenBrightness() override;
void SetScreenBrightnessPercent(double percent, bool gradual) override; void SetScreenBrightness(
const power_manager::SetBacklightBrightnessRequest& request) override;
void GetScreenBrightnessPercent(DBusMethodCallback<double> callback) override; void GetScreenBrightnessPercent(DBusMethodCallback<double> callback) override;
void DecreaseKeyboardBrightness() override; void DecreaseKeyboardBrightness() override;
void IncreaseKeyboardBrightness() override; void IncreaseKeyboardBrightness() override;
...@@ -210,7 +211,7 @@ class CHROMEOS_EXPORT FakePowerManagerClient : public PowerManagerClient { ...@@ -210,7 +211,7 @@ class CHROMEOS_EXPORT FakePowerManagerClient : public PowerManagerClient {
// Current keyboard brightness in the range [0.0, 100.0]. // Current keyboard brightness in the range [0.0, 100.0].
base::Optional<double> keyboard_brightness_percent_; base::Optional<double> keyboard_brightness_percent_;
// Last screen brightness requested via SetScreenBrightnessPercent(). // Last screen brightness requested via SetScreenBrightness().
// Unlike |screen_brightness_percent_|, this value will not be changed by // Unlike |screen_brightness_percent_|, this value will not be changed by
// SetBacklightsForcedOff() method - a method that implicitly changes screen // SetBacklightsForcedOff() method - a method that implicitly changes screen
// brightness. // brightness.
......
...@@ -212,14 +212,16 @@ class PowerManagerClientImpl : public PowerManagerClient { ...@@ -212,14 +212,16 @@ class PowerManagerClientImpl : public PowerManagerClient {
return proto_; return proto_;
} }
void SetScreenBrightnessPercent(double percent, bool gradual) override { void SetScreenBrightness(
dbus::MethodCall method_call( const power_manager::SetBacklightBrightnessRequest& request) override {
power_manager::kPowerManagerInterface, dbus::MethodCall method_call(power_manager::kPowerManagerInterface,
power_manager::kSetScreenBrightnessPercentMethod); power_manager::kSetScreenBrightnessMethod);
dbus::MessageWriter writer(&method_call); if (!dbus::MessageWriter(&method_call).AppendProtoAsArrayOfBytes(request)) {
writer.AppendDouble(percent); POWER_LOG(ERROR) << "Error serializing "
writer.AppendInt32(gradual ? power_manager::kBrightnessTransitionGradual << power_manager::kSetScreenBrightnessMethod
: power_manager::kBrightnessTransitionInstant); << " request";
return;
}
power_manager_proxy_->CallMethod(&method_call, power_manager_proxy_->CallMethod(&method_call,
dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
base::DoNothing()); base::DoNothing());
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
namespace power_manager { namespace power_manager {
class BacklightBrightnessChange; class BacklightBrightnessChange;
class ScreenIdleState; class ScreenIdleState;
class SetBacklightBrightnessRequest;
} // namespace power_manager } // namespace power_manager
namespace chromeos { namespace chromeos {
...@@ -183,9 +184,9 @@ class CHROMEOS_EXPORT PowerManagerClient : public DBusClient { ...@@ -183,9 +184,9 @@ class CHROMEOS_EXPORT PowerManagerClient : public DBusClient {
// Increases the screen brightness. // Increases the screen brightness.
virtual void IncreaseScreenBrightness() = 0; virtual void IncreaseScreenBrightness() = 0;
// Set the screen brightness to |percent|, in the range [0.0, 100.0]. // Sets the screen brightness per |request|.
// If |gradual| is true, the transition will be animated. virtual void SetScreenBrightness(
virtual void SetScreenBrightnessPercent(double percent, bool gradual) = 0; const power_manager::SetBacklightBrightnessRequest& request) = 0;
// Asynchronously gets the current screen brightness, in the range // Asynchronously gets the current screen brightness, in the range
// [0.0, 100.0]. On error (e.g. powerd not running), |callback| will be run // [0.0, 100.0]. On error (e.g. powerd not running), |callback| will be run
......
...@@ -262,9 +262,15 @@ void ArcPowerBridge::IsDisplayOn(IsDisplayOnCallback callback) { ...@@ -262,9 +262,15 @@ void ArcPowerBridge::IsDisplayOn(IsDisplayOnCallback callback) {
} }
void ArcPowerBridge::OnScreenBrightnessUpdateRequest(double percent) { void ArcPowerBridge::OnScreenBrightnessUpdateRequest(double percent) {
power_manager::SetBacklightBrightnessRequest request;
request.set_percent(percent);
request.set_transition(
power_manager::SetBacklightBrightnessRequest_Transition_GRADUAL);
request.set_cause(
power_manager::SetBacklightBrightnessRequest_Cause_USER_REQUEST);
chromeos::DBusThreadManager::Get() chromeos::DBusThreadManager::Get()
->GetPowerManagerClient() ->GetPowerManagerClient()
->SetScreenBrightnessPercent(percent, true); ->SetScreenBrightness(request);
} }
ArcPowerBridge::WakeLockRequestor* ArcPowerBridge::GetWakeLockRequestor( ArcPowerBridge::WakeLockRequestor* ArcPowerBridge::GetWakeLockRequestor(
......
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