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