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 { ...@@ -87,6 +87,9 @@ class FakeWakeLockManager {
requests_.push_back(BLOCK_DISPLAY_SLEEP); requests_.push_back(BLOCK_DISPLAY_SLEEP);
requests_.push_back(UNBLOCK_APP_SUSPENSION); requests_.push_back(UNBLOCK_APP_SUSPENSION);
break; break;
case device::mojom::WakeLockType::PreventDisplaySleepAllowDimming:
NOTREACHED() << "Unexpected wake lock type " << type;
break;
} }
type_ = type; type_ = type;
...@@ -102,6 +105,9 @@ class FakeWakeLockManager { ...@@ -102,6 +105,9 @@ class FakeWakeLockManager {
case device::mojom::WakeLockType::PreventDisplaySleep: case device::mojom::WakeLockType::PreventDisplaySleep:
requests_.push_back(BLOCK_DISPLAY_SLEEP); requests_.push_back(BLOCK_DISPLAY_SLEEP);
break; break;
case device::mojom::WakeLockType::PreventDisplaySleepAllowDimming:
NOTREACHED() << "Unexpected wake lock type " << type;
break;
} }
type_ = type; type_ = type;
...@@ -119,6 +125,9 @@ class FakeWakeLockManager { ...@@ -119,6 +125,9 @@ class FakeWakeLockManager {
case device::mojom::WakeLockType::PreventDisplaySleep: case device::mojom::WakeLockType::PreventDisplaySleep:
requests_.push_back(UNBLOCK_DISPLAY_SLEEP); requests_.push_back(UNBLOCK_DISPLAY_SLEEP);
break; break;
case device::mojom::WakeLockType::PreventDisplaySleepAllowDimming:
NOTREACHED() << "Unexpected wake lock type " << type_;
break;
} }
is_active_ = false; is_active_ = false;
} }
......
...@@ -17,6 +17,11 @@ enum WakeLockType { ...@@ -17,6 +17,11 @@ enum WakeLockType {
// app from being suspended on some platforms if the user hides it. // app from being suspended on some platforms if the user hides it.
// Example use case: playing video. // Example use case: playing video.
PreventDisplaySleep = 1, 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 { enum WakeLockReason {
......
...@@ -36,6 +36,11 @@ class PowerSaveBlocker { ...@@ -36,6 +36,11 @@ class PowerSaveBlocker {
// app from being suspended on some platforms if the user hides it. // app from being suspended on some platforms if the user hides it.
// Example use case: playing video. // Example use case: playing video.
kPowerSaveBlockPreventDisplaySleep, 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. // Reasons why power-saving features may be blocked.
......
...@@ -63,6 +63,10 @@ class PowerSaveBlocker::Delegate ...@@ -63,6 +63,10 @@ class PowerSaveBlocker::Delegate
block_id_ = controller->AddScreenWakeLock(GetWakeLockReason(reason_), block_id_ = controller->AddScreenWakeLock(GetWakeLockReason(reason_),
description_); description_);
break; break;
case kPowerSaveBlockPreventDisplaySleepAllowDimming:
block_id_ = controller->AddDimWakeLock(GetWakeLockReason(reason_),
description_);
break;
default: default:
NOTREACHED() << "Unhandled block type " << type_; NOTREACHED() << "Unhandled block type " << type_;
} }
......
...@@ -73,6 +73,7 @@ void PowerSaveBlocker::Delegate::ApplyBlock() { ...@@ -73,6 +73,7 @@ void PowerSaveBlocker::Delegate::ApplyBlock() {
level = kIOPMAssertionTypeNoIdleSleep; level = kIOPMAssertionTypeNoIdleSleep;
break; break;
case PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep: case PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep:
case PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleepAllowDimming:
level = kIOPMAssertionTypeNoDisplaySleep; level = kIOPMAssertionTypeNoDisplaySleep;
break; break;
default: default:
......
...@@ -99,7 +99,8 @@ void PowerSaveBlocker::Delegate::RemoveBlock() { ...@@ -99,7 +99,8 @@ void PowerSaveBlocker::Delegate::RemoveBlock() {
} }
POWER_REQUEST_TYPE PowerSaveBlocker::Delegate::RequestType() { POWER_REQUEST_TYPE PowerSaveBlocker::Delegate::RequestType() {
if (type_ == kPowerSaveBlockPreventDisplaySleep) if (type_ == kPowerSaveBlockPreventDisplaySleep ||
type_ == kPowerSaveBlockPreventDisplaySleepAllowDimming)
return PowerRequestDisplayRequired; return PowerRequestDisplayRequired;
if (base::win::GetVersion() == base::win::VERSION_WIN7) if (base::win::GetVersion() == base::win::VERSION_WIN7)
......
...@@ -276,6 +276,7 @@ void PowerSaveBlocker::Delegate::ApplyBlock() { ...@@ -276,6 +276,7 @@ void PowerSaveBlocker::Delegate::ApplyBlock() {
uint32_t flags = 0; uint32_t flags = 0;
switch (type_) { switch (type_) {
case kPowerSaveBlockPreventDisplaySleep: case kPowerSaveBlockPreventDisplaySleep:
case kPowerSaveBlockPreventDisplaySleepAllowDimming:
flags |= INHIBIT_MARK_SESSION_IDLE; flags |= INHIBIT_MARK_SESSION_IDLE;
flags |= INHIBIT_SUSPEND_SESSION; flags |= INHIBIT_SUSPEND_SESSION;
break; break;
...@@ -289,6 +290,7 @@ void PowerSaveBlocker::Delegate::ApplyBlock() { ...@@ -289,6 +290,7 @@ void PowerSaveBlocker::Delegate::ApplyBlock() {
case FREEDESKTOP_API: case FREEDESKTOP_API:
switch (type_) { switch (type_) {
case kPowerSaveBlockPreventDisplaySleep: case kPowerSaveBlockPreventDisplaySleep:
case kPowerSaveBlockPreventDisplaySleepAllowDimming:
object_proxy = bus_->GetObjectProxy( object_proxy = bus_->GetObjectProxy(
kFreeDesktopAPIScreenServiceName, kFreeDesktopAPIScreenServiceName,
dbus::ObjectPath(kFreeDesktopAPIScreenObjectPath)); dbus::ObjectPath(kFreeDesktopAPIScreenObjectPath));
...@@ -374,6 +376,7 @@ void PowerSaveBlocker::Delegate::RemoveBlock() { ...@@ -374,6 +376,7 @@ void PowerSaveBlocker::Delegate::RemoveBlock() {
case FREEDESKTOP_API: case FREEDESKTOP_API:
switch (type_) { switch (type_) {
case kPowerSaveBlockPreventDisplaySleep: case kPowerSaveBlockPreventDisplaySleep:
case kPowerSaveBlockPreventDisplaySleepAllowDimming:
object_proxy = bus_->GetObjectProxy( object_proxy = bus_->GetObjectProxy(
kFreeDesktopAPIScreenServiceName, kFreeDesktopAPIScreenServiceName,
dbus::ObjectPath(kFreeDesktopAPIScreenObjectPath)); dbus::ObjectPath(kFreeDesktopAPIScreenObjectPath));
...@@ -497,7 +500,8 @@ PowerSaveBlocker::PowerSaveBlocker( ...@@ -497,7 +500,8 @@ PowerSaveBlocker::PowerSaveBlocker(
blocking_task_runner_(blocking_task_runner) { blocking_task_runner_(blocking_task_runner) {
delegate_->Init(); delegate_->Init();
if (type == kPowerSaveBlockPreventDisplaySleep) { if (type == kPowerSaveBlockPreventDisplaySleep ||
type == kPowerSaveBlockPreventDisplaySleepAllowDimming) {
freedesktop_suspend_delegate_ = new Delegate( freedesktop_suspend_delegate_ = new Delegate(
kPowerSaveBlockPreventAppSuspension, description, kPowerSaveBlockPreventAppSuspension, description,
true /* freedesktop_only */, ui_task_runner, blocking_task_runner); true /* freedesktop_only */, ui_task_runner, blocking_task_runner);
......
...@@ -21,6 +21,9 @@ PowerSaveBlocker::PowerSaveBlockerType ToPowerSaveBlockerType( ...@@ -21,6 +21,9 @@ PowerSaveBlocker::PowerSaveBlockerType ToPowerSaveBlockerType(
case mojom::WakeLockType::PreventDisplaySleep: case mojom::WakeLockType::PreventDisplaySleep:
return PowerSaveBlocker::PowerSaveBlockerType:: return PowerSaveBlocker::PowerSaveBlockerType::
kPowerSaveBlockPreventDisplaySleep; kPowerSaveBlockPreventDisplaySleep;
case mojom::WakeLockType::PreventDisplaySleepAllowDimming:
return PowerSaveBlocker::PowerSaveBlockerType::
kPowerSaveBlockPreventDisplaySleepAllowDimming;
} }
NOTREACHED(); NOTREACHED();
......
...@@ -121,6 +121,8 @@ TEST_F(WakeLockTest, ChangeType) { ...@@ -121,6 +121,8 @@ TEST_F(WakeLockTest, ChangeType) {
// Call ChangeType() on a wake lock that is in inactive status. // Call ChangeType() on a wake lock that is in inactive status.
EXPECT_TRUE(ChangeType(device::mojom::WakeLockType::PreventAppSuspension)); EXPECT_TRUE(ChangeType(device::mojom::WakeLockType::PreventAppSuspension));
EXPECT_TRUE(ChangeType(device::mojom::WakeLockType::PreventDisplaySleep)); EXPECT_TRUE(ChangeType(device::mojom::WakeLockType::PreventDisplaySleep));
EXPECT_TRUE(
ChangeType(device::mojom::WakeLockType::PreventDisplaySleepAllowDimming));
EXPECT_FALSE(HasWakeLock()); // still inactive. EXPECT_FALSE(HasWakeLock()); // still inactive.
wake_lock_->RequestWakeLock(); wake_lock_->RequestWakeLock();
...@@ -128,6 +130,8 @@ TEST_F(WakeLockTest, ChangeType) { ...@@ -128,6 +130,8 @@ TEST_F(WakeLockTest, ChangeType) {
// Call ChangeType() on a wake lock that is in active status. // Call ChangeType() on a wake lock that is in active status.
EXPECT_TRUE(ChangeType(device::mojom::WakeLockType::PreventAppSuspension)); EXPECT_TRUE(ChangeType(device::mojom::WakeLockType::PreventAppSuspension));
EXPECT_TRUE(ChangeType(device::mojom::WakeLockType::PreventDisplaySleep)); EXPECT_TRUE(ChangeType(device::mojom::WakeLockType::PreventDisplaySleep));
EXPECT_TRUE(
ChangeType(device::mojom::WakeLockType::PreventDisplaySleepAllowDimming));
EXPECT_TRUE(HasWakeLock()); // still active. EXPECT_TRUE(HasWakeLock()); // still active.
// Send multiple requests, should be coalesced as usual. // Send multiple requests, should be coalesced as usual.
...@@ -145,6 +149,8 @@ TEST_F(WakeLockTest, ChangeType) { ...@@ -145,6 +149,8 @@ TEST_F(WakeLockTest, ChangeType) {
#else // OS_ANDROID: #else // OS_ANDROID:
EXPECT_FALSE(ChangeType(device::mojom::WakeLockType::PreventAppSuspension)); EXPECT_FALSE(ChangeType(device::mojom::WakeLockType::PreventAppSuspension));
EXPECT_FALSE(ChangeType(device::mojom::WakeLockType::PreventDisplaySleep)); EXPECT_FALSE(ChangeType(device::mojom::WakeLockType::PreventDisplaySleep));
EXPECT_FALSE(
ChangeType(device::mojom::WakeLockType::PreventDisplaySleepAllowDimming));
#endif #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