From 460ce763ebb863e7527ed2e1cbb7e70ba92d63a5 Mon Sep 17 00:00:00 2001 From: Galia Peycheva Date: Mon, 19 Apr 2021 13:50:14 +0200 Subject: [PATCH] Fix synchronization for BlurController.mBlurEnabled Bug: 177523043 Test: atest BlurTests Change-Id: Ia730c29aa94e7fcbe09c640e891d6e03bda224d6 --- .../java/com/android/server/wm/BlurController.java | 13 ++++++------- .../com/android/server/wm/WindowManagerService.java | 2 +- .../server/wm/WindowManagerShellCommand.java | 2 +- .../java/com/android/server/wm/WindowState.java | 3 ++- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/services/core/java/com/android/server/wm/BlurController.java b/services/core/java/com/android/server/wm/BlurController.java index 23c27f85b0667..ff1016855287a 100644 --- a/services/core/java/com/android/server/wm/BlurController.java +++ b/services/core/java/com/android/server/wm/BlurController.java @@ -30,8 +30,6 @@ import android.os.RemoteException; import android.provider.Settings; import android.view.ICrossWindowBlurEnabledListener; -import com.android.internal.annotations.GuardedBy; - /** * Keeps track of the different factors that determine whether cross-window blur is enabled * or disabled. Also keeps a list of all interested listeners and notifies them when the @@ -44,8 +42,7 @@ final class BlurController { // We don't use the WM global lock, because the BlurController is not involved in window // drawing and only receives binder calls that don't need synchronization with the rest of WM private final Object mLock = new Object(); - @GuardedBy("mLock") - boolean mBlurEnabled; + private volatile boolean mBlurEnabled; private boolean mInPowerSaveMode; private boolean mBlurDisabledSetting; @@ -87,9 +84,7 @@ final class BlurController { boolean registerCrossWindowBlurEnabledListener(ICrossWindowBlurEnabledListener listener) { if (listener == null) return false; mBlurEnabledListeners.register(listener); - synchronized (mLock) { - return mBlurEnabled; - } + return getBlurEnabled(); } void unregisterCrossWindowBlurEnabledListener(ICrossWindowBlurEnabledListener listener) { @@ -97,6 +92,10 @@ final class BlurController { mBlurEnabledListeners.unregister(listener); } + boolean getBlurEnabled() { + return mBlurEnabled; + } + private void updateBlurEnabled() { synchronized (mLock) { final boolean newEnabled = CROSS_WINDOW_BLUR_SUPPORTED && !mBlurDisabledSetting diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 11efb7a4ad71d..7e43768661492 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -6280,7 +6280,7 @@ public class WindowManagerService extends IWindowManager.Stub } }); pw.print(" mInTouchMode="); pw.println(mInTouchMode); - pw.print(" mBlurEnabled="); pw.println(mBlurController.mBlurEnabled); + pw.print(" mBlurEnabled="); pw.println(mBlurController.getBlurEnabled()); pw.print(" mLastDisplayFreezeDuration="); TimeUtils.formatDuration(mLastDisplayFreezeDuration, pw); if ( mLastFinishedFreezeSource != null) { diff --git a/services/core/java/com/android/server/wm/WindowManagerShellCommand.java b/services/core/java/com/android/server/wm/WindowManagerShellCommand.java index eb8b6f5e06fd5..4dc60070d6ec1 100644 --- a/services/core/java/com/android/server/wm/WindowManagerShellCommand.java +++ b/services/core/java/com/android/server/wm/WindowManagerShellCommand.java @@ -217,7 +217,7 @@ public class WindowManagerShellCommand extends ShellCommand { String arg = getNextArg(); if (arg == null) { pw.println("Blur supported on device: " + CROSS_WINDOW_BLUR_SUPPORTED); - pw.println("Blur enabled: " + mInternal.mBlurController.mBlurEnabled); + pw.println("Blur enabled: " + mInternal.mBlurController.getBlurEnabled()); return 0; } diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 1a5042ffd56db..91f4fca886b58 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -5344,7 +5344,8 @@ class WindowState extends WindowContainer implements WindowManagerP } private boolean shouldDrawBlurBehind() { - return (mAttrs.flags & FLAG_BLUR_BEHIND) != 0 && mWmService.mBlurController.mBlurEnabled; + return (mAttrs.flags & FLAG_BLUR_BEHIND) != 0 + && mWmService.mBlurController.getBlurEnabled(); } /**