From ab0cbeffdff9ad25151646cbe9ffef6f27efd7c6 Mon Sep 17 00:00:00 2001 From: Pascal Muetschard Date: Wed, 17 Aug 2022 17:40:30 +0200 Subject: [PATCH] DCL is broken and should not be used. Use the acceptable instance holder pattern as a replacement. Change-Id: I0164b8c17db4e6e15aee5a862fa8e625a9b1bbf4 --- config/preloaded-classes-denylist | 1 + .../internal/jank/InteractionJankMonitor.java | 15 +++++---------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/config/preloaded-classes-denylist b/config/preloaded-classes-denylist index 02f2df6167a57..502d8c6dadb12 100644 --- a/config/preloaded-classes-denylist +++ b/config/preloaded-classes-denylist @@ -9,3 +9,4 @@ android.net.rtp.AudioGroup android.net.rtp.AudioStream android.net.rtp.RtpStream java.util.concurrent.ThreadLocalRandom +com.android.internal.jank.InteractionJankMonitor$InstanceHolder diff --git a/core/java/com/android/internal/jank/InteractionJankMonitor.java b/core/java/com/android/internal/jank/InteractionJankMonitor.java index 72de78c148f8c..d066945cb92d4 100644 --- a/core/java/com/android/internal/jank/InteractionJankMonitor.java +++ b/core/java/com/android/internal/jank/InteractionJankMonitor.java @@ -292,7 +292,10 @@ public class InteractionJankMonitor { UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_CLEAR_ALL, }; - private static volatile InteractionJankMonitor sInstance; + private static class InstanceHolder { + public static final InteractionJankMonitor INSTANCE = + new InteractionJankMonitor(new HandlerThread(DEFAULT_WORKER_NAME)); + } private final DeviceConfig.OnPropertiesChangedListener mPropertiesChangedListener = this::updateProperties; @@ -384,15 +387,7 @@ public class InteractionJankMonitor { * @return instance of InteractionJankMonitor */ public static InteractionJankMonitor getInstance() { - // Use DCL here since this method might be invoked very often. - if (sInstance == null) { - synchronized (InteractionJankMonitor.class) { - if (sInstance == null) { - sInstance = new InteractionJankMonitor(new HandlerThread(DEFAULT_WORKER_NAME)); - } - } - } - return sInstance; + return InstanceHolder.INSTANCE; } /**