Commit 256b4604 authored by Daniel Erat's avatar Daniel Erat Committed by Commit Bot

service/device: Add wake locks that allow screen dimming.

Add WakeLockType::PreventDisplaySleepAllowDimming to the
device service's WakeLock mojo interface. A similar level is
currently exposed by chromeos::PowerPolicyController and
used by ARC. This type is treated identically to
PreventDisplaySleep on non-Chrome-OS platforms.

Bug: 702449
Change-Id: I9810fa69c8472a264a067d34ee92cef0125d41e5
Reviewed-on: https://chromium-review.googlesource.com/749342Reviewed-by: default avatarGreg Kerr <kerrnel@chromium.org>
Reviewed-by: default avatarKen Rockot <rockot@chromium.org>
Commit-Queue: Dan Erat <derat@chromium.org>
Cr-Commit-Position: refs/heads/master@{#513292}
parent a4f982ca
......@@ -87,6 +87,9 @@ class FakeWakeLockManager {
requests_.push_back(BLOCK_DISPLAY_SLEEP);
requests_.push_back(UNBLOCK_APP_SUSPENSION);
break;
case device::mojom::WakeLockType::PreventDisplaySleepAllowDimming:
NOTREACHED() << "Unexpected wake lock type " << type;
break;
}
type_ = type;
......@@ -102,6 +105,9 @@ class FakeWakeLockManager {
case device::mojom::WakeLockType::PreventDisplaySleep:
requests_.push_back(BLOCK_DISPLAY_SLEEP);
break;
case device::mojom::WakeLockType::PreventDisplaySleepAllowDimming:
NOTREACHED() << "Unexpected wake lock type " << type;
break;
}
type_ = type;
......@@ -119,6 +125,9 @@ class FakeWakeLockManager {
case device::mojom::WakeLockType::PreventDisplaySleep:
requests_.push_back(UNBLOCK_DISPLAY_SLEEP);
break;
case device::mojom::WakeLockType::PreventDisplaySleepAllowDimming:
NOTREACHED() << "Unexpected wake lock type " << type_;
break;
}
is_active_ = false;
}
......
......@@ -17,6 +17,11 @@ enum WakeLockType {
// app from being suspended on some platforms if the user hides it.
// Example use case: playing video.
PreventDisplaySleep = 1,
// Like PreventDisplaySleep, but permits the display to dim while remaining
// on. On some platforms, this may be treated identically to
// PreventDisplaySleep.
PreventDisplaySleepAllowDimming = 2,
};
enum WakeLockReason {
......
......@@ -36,6 +36,11 @@ class PowerSaveBlocker {
// app from being suspended on some platforms if the user hides it.
// Example use case: playing video.
kPowerSaveBlockPreventDisplaySleep,
// Like kPowerSaveBlockPreventDisplaySleep, but permits the display to dim
// while remaining on. On some platforms, this may be treated identically to
// kPowerSaveBlockPreventDisplaySleep.
kPowerSaveBlockPreventDisplaySleepAllowDimming,
};
// Reasons why power-saving features may be blocked.
......
......@@ -63,6 +63,10 @@ class PowerSaveBlocker::Delegate
block_id_ = controller->AddScreenWakeLock(GetWakeLockReason(reason_),
description_);
break;
case kPowerSaveBlockPreventDisplaySleepAllowDimming:
block_id_ = controller->AddDimWakeLock(GetWakeLockReason(reason_),
description_);
break;
default:
NOTREACHED() << "Unhandled block type " << type_;
}
......
......@@ -73,6 +73,7 @@ void PowerSaveBlocker::Delegate::ApplyBlock() {
level = kIOPMAssertionTypeNoIdleSleep;
break;
case PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep:
case PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleepAllowDimming:
level = kIOPMAssertionTypeNoDisplaySleep;
break;
default:
......
......@@ -99,7 +99,8 @@ void PowerSaveBlocker::Delegate::RemoveBlock() {
}
POWER_REQUEST_TYPE PowerSaveBlocker::Delegate::RequestType() {
if (type_ == kPowerSaveBlockPreventDisplaySleep)
if (type_ == kPowerSaveBlockPreventDisplaySleep ||
type_ == kPowerSaveBlockPreventDisplaySleepAllowDimming)
return PowerRequestDisplayRequired;
if (base::win::GetVersion() == base::win::VERSION_WIN7)
......
......@@ -276,6 +276,7 @@ void PowerSaveBlocker::Delegate::ApplyBlock() {
uint32_t flags = 0;
switch (type_) {
case kPowerSaveBlockPreventDisplaySleep:
case kPowerSaveBlockPreventDisplaySleepAllowDimming:
flags |= INHIBIT_MARK_SESSION_IDLE;
flags |= INHIBIT_SUSPEND_SESSION;
break;
......@@ -289,6 +290,7 @@ void PowerSaveBlocker::Delegate::ApplyBlock() {
case FREEDESKTOP_API:
switch (type_) {
case kPowerSaveBlockPreventDisplaySleep:
case kPowerSaveBlockPreventDisplaySleepAllowDimming:
object_proxy = bus_->GetObjectProxy(
kFreeDesktopAPIScreenServiceName,
dbus::ObjectPath(kFreeDesktopAPIScreenObjectPath));
......@@ -374,6 +376,7 @@ void PowerSaveBlocker::Delegate::RemoveBlock() {
case FREEDESKTOP_API:
switch (type_) {
case kPowerSaveBlockPreventDisplaySleep:
case kPowerSaveBlockPreventDisplaySleepAllowDimming:
object_proxy = bus_->GetObjectProxy(
kFreeDesktopAPIScreenServiceName,
dbus::ObjectPath(kFreeDesktopAPIScreenObjectPath));
......@@ -497,7 +500,8 @@ PowerSaveBlocker::PowerSaveBlocker(
blocking_task_runner_(blocking_task_runner) {
delegate_->Init();
if (type == kPowerSaveBlockPreventDisplaySleep) {
if (type == kPowerSaveBlockPreventDisplaySleep ||
type == kPowerSaveBlockPreventDisplaySleepAllowDimming) {
freedesktop_suspend_delegate_ = new Delegate(
kPowerSaveBlockPreventAppSuspension, description,
true /* freedesktop_only */, ui_task_runner, blocking_task_runner);
......
......@@ -21,6 +21,9 @@ PowerSaveBlocker::PowerSaveBlockerType ToPowerSaveBlockerType(
case mojom::WakeLockType::PreventDisplaySleep:
return PowerSaveBlocker::PowerSaveBlockerType::
kPowerSaveBlockPreventDisplaySleep;
case mojom::WakeLockType::PreventDisplaySleepAllowDimming:
return PowerSaveBlocker::PowerSaveBlockerType::
kPowerSaveBlockPreventDisplaySleepAllowDimming;
}
NOTREACHED();
......
......@@ -121,6 +121,8 @@ TEST_F(WakeLockTest, ChangeType) {
// Call ChangeType() on a wake lock that is in inactive status.
EXPECT_TRUE(ChangeType(device::mojom::WakeLockType::PreventAppSuspension));
EXPECT_TRUE(ChangeType(device::mojom::WakeLockType::PreventDisplaySleep));
EXPECT_TRUE(
ChangeType(device::mojom::WakeLockType::PreventDisplaySleepAllowDimming));
EXPECT_FALSE(HasWakeLock()); // still inactive.
wake_lock_->RequestWakeLock();
......@@ -128,6 +130,8 @@ TEST_F(WakeLockTest, ChangeType) {
// Call ChangeType() on a wake lock that is in active status.
EXPECT_TRUE(ChangeType(device::mojom::WakeLockType::PreventAppSuspension));
EXPECT_TRUE(ChangeType(device::mojom::WakeLockType::PreventDisplaySleep));
EXPECT_TRUE(
ChangeType(device::mojom::WakeLockType::PreventDisplaySleepAllowDimming));
EXPECT_TRUE(HasWakeLock()); // still active.
// Send multiple requests, should be coalesced as usual.
......@@ -145,6 +149,8 @@ TEST_F(WakeLockTest, ChangeType) {
#else // OS_ANDROID:
EXPECT_FALSE(ChangeType(device::mojom::WakeLockType::PreventAppSuspension));
EXPECT_FALSE(ChangeType(device::mojom::WakeLockType::PreventDisplaySleep));
EXPECT_FALSE(
ChangeType(device::mojom::WakeLockType::PreventDisplaySleepAllowDimming));
#endif
}
......
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