Convert auto_screen_brightness::Adapter to use Mojo power manager client
PowerManagerMojoClient/Controller implement PowerManagerBecameAvailable
and SetScreenBrightness.
Bug: 644348
Change-Id: I997942403a9ba06c9bbb866007ff0e408b604e1e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1583059
Reviewed-by: Dan Erat <derat@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Commit-Queue: Evan Stade <estade@chromium.org>
Cr-Commit-Position: refs/heads/master@{#654073}
diff --git a/chrome/browser/chromeos/power/auto_screen_brightness/adapter.cc b/chrome/browser/chromeos/power/auto_screen_brightness/adapter.cc
index 9d4644e8..4b048cf 100644
--- a/chrome/browser/chromeos/power/auto_screen_brightness/adapter.cc
+++ b/chrome/browser/chromeos/power/auto_screen_brightness/adapter.cc
@@ -20,6 +20,7 @@
#include "chrome/browser/profiles/profile_manager.h"
#include "chromeos/constants/chromeos_features.h"
#include "chromeos/dbus/power_manager/backlight.pb.h"
+#include "chromeos/services/power/public/cpp/power_manager_mojo_client.h"
#include "components/prefs/pref_service.h"
namespace chromeos {
@@ -98,7 +99,7 @@
void Adapter::Init() {
// Deferred to Init() because it can result in a virtual method being called.
- power_manager_client_observer_.Add(PowerManagerClient::Get());
+ power_manager_client_observer_.Add(PowerManagerMojoClient::Get());
}
void Adapter::OnAmbientLightUpdated(int lux) {
@@ -593,7 +594,7 @@
request.set_transition(
power_manager::SetBacklightBrightnessRequest_Transition_GRADUAL);
request.set_cause(power_manager::SetBacklightBrightnessRequest_Cause_MODEL);
- PowerManagerClient::Get()->SetScreenBrightness(request);
+ PowerManagerMojoClient::Get()->SetScreenBrightness(request);
const base::TimeTicks brightness_change_time = tick_clock_->NowTicks();
if (!latest_model_brightness_change_time_.is_null()) {
diff --git a/chromeos/services/power/public/cpp/power_manager_mojo_client.cc b/chromeos/services/power/public/cpp/power_manager_mojo_client.cc
index 05a75fe..cd88ec6 100644
--- a/chromeos/services/power/public/cpp/power_manager_mojo_client.cc
+++ b/chromeos/services/power/public/cpp/power_manager_mojo_client.cc
@@ -27,7 +27,8 @@
void PowerManagerMojoClient::AddObserver(Observer* observer) {
observers_.AddObserver(observer);
- // TODO(estade): Call PowerManagerBecameAvailable as appropriate.
+ if (service_available_)
+ observer->PowerManagerBecameAvailable(*service_available_);
}
void PowerManagerMojoClient::RemoveObserver(Observer* observer) {
@@ -133,6 +134,12 @@
void PowerManagerMojoClient::DeferScreenDim() {}
+void PowerManagerMojoClient::PowerManagerBecameAvailable(bool available) {
+ service_available_ = available;
+ for (auto& observer : observers_)
+ observer.PowerManagerBecameAvailable(available);
+}
+
void PowerManagerMojoClient::ScreenBrightnessChanged(
const power_manager::BacklightBrightnessChange& change) {
for (auto& observer : observers_)
diff --git a/chromeos/services/power/public/cpp/power_manager_mojo_client.h b/chromeos/services/power/public/cpp/power_manager_mojo_client.h
index 637c7d4a..bfffe88 100644
--- a/chromeos/services/power/public/cpp/power_manager_mojo_client.h
+++ b/chromeos/services/power/public/cpp/power_manager_mojo_client.h
@@ -73,6 +73,7 @@
void DeferScreenDim() override;
// power::mojom::PowerManagerObserver:
+ void PowerManagerBecameAvailable(bool available) override;
void ScreenBrightnessChanged(
const power_manager::BacklightBrightnessChange& change) override;
void KeyboardBrightnessChanged(
@@ -101,6 +102,8 @@
// The last proto received via mojo; initially empty.
base::Optional<power_manager::PowerSupplyProperties> proto_;
+ base::Optional<bool> service_available_;
+
DISALLOW_COPY_AND_ASSIGN(PowerManagerMojoClient);
};
diff --git a/chromeos/services/power/public/cpp/power_manager_mojo_controller.cc b/chromeos/services/power/public/cpp/power_manager_mojo_controller.cc
index 8cec9a9..9954591 100644
--- a/chromeos/services/power/public/cpp/power_manager_mojo_controller.cc
+++ b/chromeos/services/power/public/cpp/power_manager_mojo_controller.cc
@@ -28,6 +28,11 @@
PowerManagerClient::Get()->AddObserver(this);
}
+void PowerManagerMojoController::SetScreenBrightness(
+ const power_manager::SetBacklightBrightnessRequest& request) {
+ PowerManagerClient::Get()->SetScreenBrightness(request);
+}
+
void PowerManagerMojoController::GetScreenBrightnessPercent(
GetScreenBrightnessPercentCallback callback) {
// This extra thunk is only necessary to convert between
@@ -43,6 +48,10 @@
std::move(callback)));
}
+void PowerManagerMojoController::PowerManagerBecameAvailable(bool available) {
+ client_->PowerManagerBecameAvailable(available);
+}
+
void PowerManagerMojoController::ScreenBrightnessChanged(
const power_manager::BacklightBrightnessChange& change) {
client_->ScreenBrightnessChanged(change);
diff --git a/chromeos/services/power/public/cpp/power_manager_mojo_controller.h b/chromeos/services/power/public/cpp/power_manager_mojo_controller.h
index a45d92f..5e54934 100644
--- a/chromeos/services/power/public/cpp/power_manager_mojo_controller.h
+++ b/chromeos/services/power/public/cpp/power_manager_mojo_controller.h
@@ -28,10 +28,13 @@
// mojom::PowerManagerMojoController:
void SetObserver(
power::mojom::PowerManagerObserverAssociatedPtrInfo client) override;
+ void SetScreenBrightness(
+ const power_manager::SetBacklightBrightnessRequest& request) override;
void GetScreenBrightnessPercent(
GetScreenBrightnessPercentCallback callback) override;
// PowerManagerClient::Observer:
+ void PowerManagerBecameAvailable(bool available) override;
void ScreenBrightnessChanged(
const power_manager::BacklightBrightnessChange& change) override;
void KeyboardBrightnessChanged(
diff --git a/chromeos/services/power/public/mojom/OWNERS b/chromeos/services/power/public/mojom/OWNERS
index 2c44a46..b15e65d 100644
--- a/chromeos/services/power/public/mojom/OWNERS
+++ b/chromeos/services/power/public/mojom/OWNERS
@@ -1,6 +1,6 @@
per-file *.mojom=set noparent
per-file *.mojom=file://ipc/SECURITY_OWNERS
-per-file *_struct_traits*.*=set noparent
-per-file *_struct_traits*.*=file://ipc/SECURITY_OWNERS
+per-file mojom_traits.*=set noparent
+per-file mojom_traits.*=file://ipc/SECURITY_OWNERS
per-file *.typemap=set noparent
per-file *.typemap=file://ipc/SECURITY_OWNERS
diff --git a/chromeos/services/power/public/mojom/mojom_traits.cc b/chromeos/services/power/public/mojom/mojom_traits.cc
index 7b1c1b8..7533904 100644
--- a/chromeos/services/power/public/mojom/mojom_traits.cc
+++ b/chromeos/services/power/public/mojom/mojom_traits.cc
@@ -6,96 +6,173 @@
namespace mojo {
+using chromeos::power::mojom::BacklightBrightnessChangeCause;
+using chromeos::power::mojom::SetBacklightBrightnessRequestCause;
+using chromeos::power::mojom::SetBacklightBrightnessRequestTransition;
+
// static
-chromeos::power::mojom::BacklightBrightnessChangeCause
-EnumTraits<chromeos::power::mojom::BacklightBrightnessChangeCause,
+SetBacklightBrightnessRequestTransition
+EnumTraits<SetBacklightBrightnessRequestTransition,
+ power_manager::SetBacklightBrightnessRequest_Transition>::
+ ToMojom(
+ power_manager::SetBacklightBrightnessRequest_Transition transition) {
+ switch (transition) {
+ case power_manager::SetBacklightBrightnessRequest_Transition_GRADUAL:
+ return SetBacklightBrightnessRequestTransition::kGradual;
+ case power_manager::SetBacklightBrightnessRequest_Transition_INSTANT:
+ return SetBacklightBrightnessRequestTransition::kInstant;
+ }
+ NOTREACHED();
+ return SetBacklightBrightnessRequestTransition::kGradual;
+}
+
+// static
+bool EnumTraits<SetBacklightBrightnessRequestTransition,
+ power_manager::SetBacklightBrightnessRequest_Transition>::
+ FromMojom(SetBacklightBrightnessRequestTransition transition,
+ power_manager::SetBacklightBrightnessRequest_Transition* out) {
+ switch (transition) {
+ case SetBacklightBrightnessRequestTransition::kGradual:
+ *out = power_manager::SetBacklightBrightnessRequest_Transition_GRADUAL;
+ return true;
+ case SetBacklightBrightnessRequestTransition::kInstant:
+ *out = power_manager::SetBacklightBrightnessRequest_Transition_INSTANT;
+ return true;
+ }
+
+ NOTREACHED();
+ return false;
+}
+
+// static
+SetBacklightBrightnessRequestCause
+EnumTraits<SetBacklightBrightnessRequestCause,
+ power_manager::SetBacklightBrightnessRequest_Cause>::
+ ToMojom(power_manager::SetBacklightBrightnessRequest_Cause cause) {
+ switch (cause) {
+ case power_manager::SetBacklightBrightnessRequest_Cause_USER_REQUEST:
+ return SetBacklightBrightnessRequestCause::kUserRequest;
+ case power_manager::SetBacklightBrightnessRequest_Cause_MODEL:
+ return SetBacklightBrightnessRequestCause::kModel;
+ }
+ NOTREACHED();
+ return SetBacklightBrightnessRequestCause::kUserRequest;
+}
+
+// static
+bool EnumTraits<SetBacklightBrightnessRequestCause,
+ power_manager::SetBacklightBrightnessRequest_Cause>::
+ FromMojom(SetBacklightBrightnessRequestCause cause,
+ power_manager::SetBacklightBrightnessRequest_Cause* out) {
+ switch (cause) {
+ case SetBacklightBrightnessRequestCause::kUserRequest:
+ *out = power_manager::SetBacklightBrightnessRequest_Cause_USER_REQUEST;
+ return true;
+ case SetBacklightBrightnessRequestCause::kModel:
+ *out = power_manager::SetBacklightBrightnessRequest_Cause_MODEL;
+ return true;
+ }
+
+ NOTREACHED();
+ return false;
+}
+
+// static
+bool StructTraits<chromeos::power::mojom::SetBacklightBrightnessRequestDataView,
+ power_manager::SetBacklightBrightnessRequest>::
+ Read(chromeos::power::mojom::SetBacklightBrightnessRequestDataView data,
+ power_manager::SetBacklightBrightnessRequest* out) {
+ if (data.percent() < 0. || data.percent() > 100.)
+ return false;
+
+ out->set_percent(data.percent());
+
+ power_manager::SetBacklightBrightnessRequest_Transition transition;
+ power_manager::SetBacklightBrightnessRequest_Cause cause;
+ if (!data.ReadTransition(&transition) || !data.ReadCause(&cause))
+ return false;
+
+ out->set_transition(transition);
+ out->set_cause(cause);
+ return true;
+}
+
+// static
+BacklightBrightnessChangeCause
+EnumTraits<BacklightBrightnessChangeCause,
power_manager::BacklightBrightnessChange_Cause>::
ToMojom(power_manager::BacklightBrightnessChange_Cause cause) {
switch (cause) {
case power_manager::BacklightBrightnessChange_Cause_USER_REQUEST:
- return chromeos::power::mojom::BacklightBrightnessChangeCause::
- kUserRequest;
+ return BacklightBrightnessChangeCause::kUserRequest;
case power_manager::BacklightBrightnessChange_Cause_USER_ACTIVITY:
- return chromeos::power::mojom::BacklightBrightnessChangeCause::
- kUserActivity;
+ return BacklightBrightnessChangeCause::kUserActivity;
case power_manager::BacklightBrightnessChange_Cause_USER_INACTIVITY:
- return chromeos::power::mojom::BacklightBrightnessChangeCause::
- kUserInactivity;
+ return BacklightBrightnessChangeCause::kUserInactivity;
case power_manager::BacklightBrightnessChange_Cause_AMBIENT_LIGHT_CHANGED:
- return chromeos::power::mojom::BacklightBrightnessChangeCause::
- kAmbientLightChanged;
+ return BacklightBrightnessChangeCause::kAmbientLightChanged;
case power_manager::
BacklightBrightnessChange_Cause_EXTERNAL_POWER_CONNECTED:
- return chromeos::power::mojom::BacklightBrightnessChangeCause::
- kExternalPowerConnected;
+ return BacklightBrightnessChangeCause::kExternalPowerConnected;
case power_manager::
BacklightBrightnessChange_Cause_EXTERNAL_POWER_DISCONNECTED:
- return chromeos::power::mojom::BacklightBrightnessChangeCause::
- kExternalPowerDisconnected;
+ return BacklightBrightnessChangeCause::kExternalPowerDisconnected;
case power_manager::BacklightBrightnessChange_Cause_FORCED_OFF:
- return chromeos::power::mojom::BacklightBrightnessChangeCause::kForcedOff;
+ return BacklightBrightnessChangeCause::kForcedOff;
case power_manager::BacklightBrightnessChange_Cause_NO_LONGER_FORCED_OFF:
- return chromeos::power::mojom::BacklightBrightnessChangeCause::
- kNoLongerForcedOff;
+ return BacklightBrightnessChangeCause::kNoLongerForcedOff;
case power_manager::BacklightBrightnessChange_Cause_OTHER:
- return chromeos::power::mojom::BacklightBrightnessChangeCause::kOther;
+ return BacklightBrightnessChangeCause::kOther;
case power_manager::BacklightBrightnessChange_Cause_MODEL:
- return chromeos::power::mojom::BacklightBrightnessChangeCause::kModel;
+ return BacklightBrightnessChangeCause::kModel;
case power_manager::BacklightBrightnessChange_Cause_WAKE_NOTIFICATION:
- return chromeos::power::mojom::BacklightBrightnessChangeCause::
- kWakeNotification;
+ return BacklightBrightnessChangeCause::kWakeNotification;
}
NOTREACHED();
- return chromeos::power::mojom::BacklightBrightnessChangeCause::kUserRequest;
+ return BacklightBrightnessChangeCause::kUserRequest;
}
// static
-bool EnumTraits<chromeos::power::mojom::BacklightBrightnessChangeCause,
+bool EnumTraits<BacklightBrightnessChangeCause,
power_manager::BacklightBrightnessChange_Cause>::
- FromMojom(chromeos::power::mojom::BacklightBrightnessChangeCause cause,
+ FromMojom(BacklightBrightnessChangeCause cause,
power_manager::BacklightBrightnessChange_Cause* out) {
switch (cause) {
- case chromeos::power::mojom::BacklightBrightnessChangeCause::kUserRequest:
+ case BacklightBrightnessChangeCause::kUserRequest:
*out = power_manager::BacklightBrightnessChange_Cause_USER_REQUEST;
return true;
- case chromeos::power::mojom::BacklightBrightnessChangeCause::kUserActivity:
+ case BacklightBrightnessChangeCause::kUserActivity:
*out = power_manager::BacklightBrightnessChange_Cause_USER_ACTIVITY;
return true;
- case chromeos::power::mojom::BacklightBrightnessChangeCause::
- kUserInactivity:
+ case BacklightBrightnessChangeCause::kUserInactivity:
*out = power_manager::BacklightBrightnessChange_Cause_USER_INACTIVITY;
return true;
- case chromeos::power::mojom::BacklightBrightnessChangeCause::
- kAmbientLightChanged:
+ case BacklightBrightnessChangeCause::kAmbientLightChanged:
*out =
power_manager::BacklightBrightnessChange_Cause_AMBIENT_LIGHT_CHANGED;
return true;
- case chromeos::power::mojom::BacklightBrightnessChangeCause::
- kExternalPowerConnected:
+ case BacklightBrightnessChangeCause::kExternalPowerConnected:
*out = power_manager::
BacklightBrightnessChange_Cause_EXTERNAL_POWER_CONNECTED;
return true;
- case chromeos::power::mojom::BacklightBrightnessChangeCause::
- kExternalPowerDisconnected:
+ case BacklightBrightnessChangeCause::kExternalPowerDisconnected:
*out = power_manager::
BacklightBrightnessChange_Cause_EXTERNAL_POWER_DISCONNECTED;
return true;
- case chromeos::power::mojom::BacklightBrightnessChangeCause::kForcedOff:
+ case BacklightBrightnessChangeCause::kForcedOff:
*out = power_manager::BacklightBrightnessChange_Cause_FORCED_OFF;
return true;
- case chromeos::power::mojom::BacklightBrightnessChangeCause::
- kNoLongerForcedOff:
+ case BacklightBrightnessChangeCause::kNoLongerForcedOff:
*out =
power_manager::BacklightBrightnessChange_Cause_NO_LONGER_FORCED_OFF;
return true;
- case chromeos::power::mojom::BacklightBrightnessChangeCause::kOther:
+ case BacklightBrightnessChangeCause::kOther:
*out = power_manager::BacklightBrightnessChange_Cause_OTHER;
return true;
- case chromeos::power::mojom::BacklightBrightnessChangeCause::kModel:
+ case BacklightBrightnessChangeCause::kModel:
*out = power_manager::BacklightBrightnessChange_Cause_MODEL;
return true;
- case chromeos::power::mojom::BacklightBrightnessChangeCause::
- kWakeNotification:
+ case BacklightBrightnessChangeCause::kWakeNotification:
*out = power_manager::BacklightBrightnessChange_Cause_WAKE_NOTIFICATION;
return true;
}
diff --git a/chromeos/services/power/public/mojom/mojom_traits.h b/chromeos/services/power/public/mojom/mojom_traits.h
index f41a567..3c0f3c5 100644
--- a/chromeos/services/power/public/mojom/mojom_traits.h
+++ b/chromeos/services/power/public/mojom/mojom_traits.h
@@ -13,6 +13,50 @@
namespace mojo {
template <>
+struct EnumTraits<
+ chromeos::power::mojom::SetBacklightBrightnessRequestTransition,
+ power_manager::SetBacklightBrightnessRequest_Transition> {
+ static chromeos::power::mojom::SetBacklightBrightnessRequestTransition
+ ToMojom(power_manager::SetBacklightBrightnessRequest_Transition cause);
+
+ static bool FromMojom(
+ chromeos::power::mojom::SetBacklightBrightnessRequestTransition cause,
+ power_manager::SetBacklightBrightnessRequest_Transition* out);
+};
+
+template <>
+struct EnumTraits<chromeos::power::mojom::SetBacklightBrightnessRequestCause,
+ power_manager::SetBacklightBrightnessRequest_Cause> {
+ static chromeos::power::mojom::SetBacklightBrightnessRequestCause ToMojom(
+ power_manager::SetBacklightBrightnessRequest_Cause cause);
+
+ static bool FromMojom(
+ chromeos::power::mojom::SetBacklightBrightnessRequestCause cause,
+ power_manager::SetBacklightBrightnessRequest_Cause* out);
+};
+
+template <>
+struct StructTraits<
+ chromeos::power::mojom::SetBacklightBrightnessRequestDataView,
+ power_manager::SetBacklightBrightnessRequest> {
+ static double percent(
+ const power_manager::SetBacklightBrightnessRequest& request) {
+ return request.percent();
+ }
+ static power_manager::SetBacklightBrightnessRequest_Transition transition(
+ const power_manager::SetBacklightBrightnessRequest& request) {
+ return request.transition();
+ }
+ static power_manager::SetBacklightBrightnessRequest_Cause cause(
+ const power_manager::SetBacklightBrightnessRequest& request) {
+ return request.cause();
+ }
+ static bool Read(
+ chromeos::power::mojom::SetBacklightBrightnessRequestDataView data,
+ power_manager::SetBacklightBrightnessRequest* out);
+};
+
+template <>
struct EnumTraits<chromeos::power::mojom::BacklightBrightnessChangeCause,
power_manager::BacklightBrightnessChange_Cause> {
static chromeos::power::mojom::BacklightBrightnessChangeCause ToMojom(
diff --git a/chromeos/services/power/public/mojom/power_manager.mojom b/chromeos/services/power/public/mojom/power_manager.mojom
index f084e2e80..6f6e18a 100644
--- a/chromeos/services/power/public/mojom/power_manager.mojom
+++ b/chromeos/services/power/public/mojom/power_manager.mojom
@@ -4,6 +4,23 @@
module chromeos.power.mojom;
+enum SetBacklightBrightnessRequestTransition {
+ kGradual,
+ kInstant,
+};
+
+enum SetBacklightBrightnessRequestCause {
+ kUserRequest,
+ kModel,
+};
+
+struct SetBacklightBrightnessRequest {
+ // The brightness percent is in the range [0.0, 100.0].
+ double percent;
+ SetBacklightBrightnessRequestTransition transition;
+ SetBacklightBrightnessRequestCause cause;
+};
+
// TODO(https://crbug.com/657632): This struct wrapper exists to allow the value
// to be null.
struct Brightness {
@@ -42,6 +59,7 @@
// All following methods and their semantics are copied from the
// PowerManagerClient interface. Refer to that for documentation.
+ SetScreenBrightness(SetBacklightBrightnessRequest request);
GetScreenBrightnessPercent() => (Brightness? brightness);
};
@@ -50,6 +68,7 @@
interface PowerManagerObserver {
// All following methods and their semantics are copied from the
// PowerManagerClient::Observer interface. Refer to that for documentation.
+ PowerManagerBecameAvailable(bool available);
ScreenBrightnessChanged(BacklightBrightnessChange change);
KeyboardBrightnessChanged(BacklightBrightnessChange change);
};
diff --git a/chromeos/services/power/public/mojom/power_types.typemap b/chromeos/services/power/public/mojom/power_types.typemap
index 9f81e2d..bc7ae7bc9 100644
--- a/chromeos/services/power/public/mojom/power_types.typemap
+++ b/chromeos/services/power/public/mojom/power_types.typemap
@@ -15,4 +15,7 @@
type_mappings = [
"chromeos.power.mojom.BacklightBrightnessChange=power_manager::BacklightBrightnessChange",
"chromeos.power.mojom.BacklightBrightnessChangeCause=power_manager::BacklightBrightnessChange_Cause",
+ "chromeos.power.mojom.SetBacklightBrightnessRequest=power_manager::SetBacklightBrightnessRequest",
+ "chromeos.power.mojom.SetBacklightBrightnessRequestCause=power_manager::SetBacklightBrightnessRequest_Cause",
+ "chromeos.power.mojom.SetBacklightBrightnessRequestTransition=power_manager::SetBacklightBrightnessRequest_Transition",
]