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 {
auto power_manager_client =
std::make_unique<chromeos::FakePowerManagerClient>();
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_ =
std::make_unique<TestPowerManagerObserver>(power_manager_client_);
chromeos::DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
......
......@@ -8,6 +8,7 @@
#include "base/metrics/user_metrics.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/power_manager/backlight.pb.h"
#include "chromeos/dbus/power_manager_client.h"
#include "ui/base/accelerators/accelerator.h"
......@@ -36,9 +37,17 @@ void BrightnessControllerChromeos::HandleBrightnessUp(
void BrightnessControllerChromeos::SetBrightnessPercent(double percent,
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()
->GetPowerManagerClient()
->SetScreenBrightnessPercent(percent, gradual);
->SetScreenBrightness(request);
}
void BrightnessControllerChromeos::GetBrightnessPercent(
......
......@@ -10,6 +10,7 @@
#include "base/threading/sequenced_task_runner_handle.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/fake_power_manager_client.h"
#include "chromeos/dbus/power_manager/backlight.pb.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace chromeos {
......@@ -81,9 +82,11 @@ class BrightnessMonitorImplTest : public testing::Test {
// on fake power manager client.
void SetUpBrightnessMonitor(double init_brightness) {
if (init_brightness >= 0) {
power_manager::SetBacklightBrightnessRequest request;
request.set_percent(init_brightness);
chromeos::DBusThreadManager::Get()
->GetPowerManagerClient()
->SetScreenBrightnessPercent(init_brightness, true);
->SetScreenBrightness(request);
}
monitor_ = BrightnessMonitorImpl::CreateForTesting(
......
......@@ -8,6 +8,7 @@
#include "chrome/browser/chromeos/profiles/profile_helper.h"
#include "chrome/browser/profiles/profile.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/network/network_state_handler.h"
#include "components/prefs/pref_service.h"
......@@ -57,7 +58,15 @@ void DeviceActions::GetScreenBrightnessLevel(
}
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()
->GetPowerManagerClient()
->SetScreenBrightnessPercent(level * 100.0f, gradual);
->SetScreenBrightness(request);
}
......@@ -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
FakePowerManagerClient::FakePowerManagerClient()
......@@ -83,14 +95,14 @@ void FakePowerManagerClient::DecreaseScreenBrightness(bool allow_off) {}
void FakePowerManagerClient::IncreaseScreenBrightness() {}
void FakePowerManagerClient::SetScreenBrightnessPercent(double percent,
bool gradual) {
screen_brightness_percent_ = percent;
requested_screen_brightness_percent_ = percent;
void FakePowerManagerClient::SetScreenBrightness(
const power_manager::SetBacklightBrightnessRequest& request) {
screen_brightness_percent_ = request.percent();
requested_screen_brightness_percent_ = request.percent();
power_manager::BacklightBrightnessChange change;
change.set_percent(percent);
change.set_cause(power_manager::BacklightBrightnessChange_Cause_USER_REQUEST);
change.set_percent(request.percent());
change.set_cause(RequestCauseToChangeCause(request.cause()));
base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE,
base::BindOnce(&FakePowerManagerClient::SendScreenBrightnessChanged,
......
......@@ -77,7 +77,8 @@ class CHROMEOS_EXPORT FakePowerManagerClient : public PowerManagerClient {
base::WeakPtr<RenderProcessManagerDelegate> delegate) override;
void DecreaseScreenBrightness(bool allow_off) 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 DecreaseKeyboardBrightness() override;
void IncreaseKeyboardBrightness() override;
......@@ -210,7 +211,7 @@ class CHROMEOS_EXPORT FakePowerManagerClient : public PowerManagerClient {
// Current keyboard brightness in the range [0.0, 100.0].
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
// SetBacklightsForcedOff() method - a method that implicitly changes screen
// brightness.
......
......@@ -212,14 +212,16 @@ class PowerManagerClientImpl : public PowerManagerClient {
return proto_;
}
void SetScreenBrightnessPercent(double percent, bool gradual) override {
dbus::MethodCall method_call(
power_manager::kPowerManagerInterface,
power_manager::kSetScreenBrightnessPercentMethod);
dbus::MessageWriter writer(&method_call);
writer.AppendDouble(percent);
writer.AppendInt32(gradual ? power_manager::kBrightnessTransitionGradual
: power_manager::kBrightnessTransitionInstant);
void SetScreenBrightness(
const power_manager::SetBacklightBrightnessRequest& request) override {
dbus::MethodCall method_call(power_manager::kPowerManagerInterface,
power_manager::kSetScreenBrightnessMethod);
if (!dbus::MessageWriter(&method_call).AppendProtoAsArrayOfBytes(request)) {
POWER_LOG(ERROR) << "Error serializing "
<< power_manager::kSetScreenBrightnessMethod
<< " request";
return;
}
power_manager_proxy_->CallMethod(&method_call,
dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
base::DoNothing());
......
......@@ -29,6 +29,7 @@
namespace power_manager {
class BacklightBrightnessChange;
class ScreenIdleState;
class SetBacklightBrightnessRequest;
} // namespace power_manager
namespace chromeos {
......@@ -183,9 +184,9 @@ class CHROMEOS_EXPORT PowerManagerClient : public DBusClient {
// Increases the screen brightness.
virtual void IncreaseScreenBrightness() = 0;
// Set the screen brightness to |percent|, in the range [0.0, 100.0].
// If |gradual| is true, the transition will be animated.
virtual void SetScreenBrightnessPercent(double percent, bool gradual) = 0;
// Sets the screen brightness per |request|.
virtual void SetScreenBrightness(
const power_manager::SetBacklightBrightnessRequest& request) = 0;
// Asynchronously gets the current screen brightness, in the range
// [0.0, 100.0]. On error (e.g. powerd not running), |callback| will be run
......
......@@ -262,9 +262,15 @@ void ArcPowerBridge::IsDisplayOn(IsDisplayOnCallback callback) {
}
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()
->GetPowerManagerClient()
->SetScreenBrightnessPercent(percent, true);
->SetScreenBrightness(request);
}
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