From 11822c79417f10aaba522bdb4d4806aeed460d25 Mon Sep 17 00:00:00 2001 From: Daniel Kim <danieljkim@google.com> Date: Mon, 22 Aug 2022 18:56:21 +0000 Subject: [PATCH] Revert "DCL is broken and should not be used." This reverts commit ab0cbeffdff9ad25151646cbe9ffef6f27efd7c6. Reason for revert: Droidmonitor-triggered revert due to breakage Bug: b/243389642 Change-Id: I2121840da7bba800d3a6fbe2228ce70c952d11e6 --- config/preloaded-classes-denylist | 1 - .../internal/jank/InteractionJankMonitor.java | 15 ++++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/config/preloaded-classes-denylist b/config/preloaded-classes-denylist index 502d8c6dadb1..02f2df6167a5 100644 --- a/config/preloaded-classes-denylist +++ b/config/preloaded-classes-denylist @@ -9,4 +9,3 @@ 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 d066945cb92d..72de78c148f8 100644 --- a/core/java/com/android/internal/jank/InteractionJankMonitor.java +++ b/core/java/com/android/internal/jank/InteractionJankMonitor.java @@ -292,10 +292,7 @@ public class InteractionJankMonitor { UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_CLEAR_ALL, }; - private static class InstanceHolder { - public static final InteractionJankMonitor INSTANCE = - new InteractionJankMonitor(new HandlerThread(DEFAULT_WORKER_NAME)); - } + private static volatile InteractionJankMonitor sInstance; private final DeviceConfig.OnPropertiesChangedListener mPropertiesChangedListener = this::updateProperties; @@ -387,7 +384,15 @@ public class InteractionJankMonitor { * @return instance of InteractionJankMonitor */ public static InteractionJankMonitor getInstance() { - return InstanceHolder.INSTANCE; + // 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; } /** -- GitLab