From 8e5d33ef985ebeaa68bf2a7847ed865536ff0623 Mon Sep 17 00:00:00 2001 From: Jeff Brown Date: Wed, 10 Jun 2015 13:05:50 -0700 Subject: [PATCH] Don't request traversals when updating display brightness. Setting the display state and brightness does not require a surface flinger transaction so don't schedule traversals unnecessarily. They may still be scheduled as a side-effect of other operations but only when needed. Bug: 21296696 Change-Id: Ie264254ea1972c37319e5e5a06163d47f6689c22 --- .../com/android/server/display/DisplayManagerService.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java index 7440b8c47822f..b2ab797a409ed 100644 --- a/services/core/java/com/android/server/display/DisplayManagerService.java +++ b/services/core/java/com/android/server/display/DisplayManagerService.java @@ -346,6 +346,8 @@ public final class DisplayManagerService extends SystemService { synchronized (mTempDisplayStateWorkQueue) { try { // Update the display state within the lock. + // Note that we do not need to schedule traversals here although it + // may happen as a side-effect of displays changing state. synchronized (mSyncRoot) { if (mGlobalDisplayState == state && mGlobalDisplayBrightness == brightness) { @@ -357,8 +359,7 @@ public final class DisplayManagerService extends SystemService { + ", brightness=" + brightness + ")"); mGlobalDisplayState = state; mGlobalDisplayBrightness = brightness; - updateGlobalDisplayStateLocked(mTempDisplayStateWorkQueue); - scheduleTraversalLocked(false); + applyGlobalDisplayStateLocked(mTempDisplayStateWorkQueue); } // Setting the display power state can take hundreds of milliseconds @@ -715,6 +716,7 @@ public final class DisplayManagerService extends SystemService { handleDisplayDeviceRemovedLocked(device); } } + private void handleDisplayDeviceRemovedLocked(DisplayDevice device) { DisplayDeviceInfo info = device.getDisplayDeviceInfoLocked(); if (!mDisplayDevices.remove(device)) { @@ -729,7 +731,7 @@ public final class DisplayManagerService extends SystemService { scheduleTraversalLocked(false); } - private void updateGlobalDisplayStateLocked(List workQueue) { + private void applyGlobalDisplayStateLocked(List workQueue) { final int count = mDisplayDevices.size(); for (int i = 0; i < count; i++) { DisplayDevice device = mDisplayDevices.get(i);