diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java
index 986ec73..cde3536 100644
--- a/src/com/android/launcher3/DeviceProfile.java
+++ b/src/com/android/launcher3/DeviceProfile.java
@@ -40,7 +40,6 @@
 import android.graphics.PointF;
 import android.graphics.Rect;
 import android.util.DisplayMetrics;
-import android.util.Log;
 import android.util.SparseArray;
 import android.view.Surface;
 
@@ -364,12 +363,6 @@
                 mTypeIndex = INDEX_DEFAULT;
             }
         }
-        if (InvariantDeviceProfile.sDebug) {
-            Log.d("b/298077774",
-                    "DeviceProfile - mTypeIndex: " + mTypeIndex + ": " + dpPointFToString(
-                            "minCellSize",
-                            inv.minCellSize[mTypeIndex]));
-        }
 
         isTransientTaskbar = DisplayController.isTransientTaskbar(context);
         if (isTransientTaskbar) {
diff --git a/src/com/android/launcher3/InvariantDeviceProfile.java b/src/com/android/launcher3/InvariantDeviceProfile.java
index 3332f0e..e3de79e 100644
--- a/src/com/android/launcher3/InvariantDeviceProfile.java
+++ b/src/com/android/launcher3/InvariantDeviceProfile.java
@@ -72,7 +72,6 @@
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
-import java.util.Locale;
 import java.util.stream.Collectors;
 
 public class InvariantDeviceProfile {
@@ -82,9 +81,6 @@
     public static final MainThreadInitializedObject<InvariantDeviceProfile> INSTANCE =
             new MainThreadInitializedObject<>(InvariantDeviceProfile::new);
 
-    @VisibleForTesting
-    public static boolean sDebug = false;
-
     @Retention(RetentionPolicy.SOURCE)
     @IntDef({TYPE_PHONE, TYPE_MULTI_DISPLAY, TYPE_TABLET})
     public @interface DeviceType {}
@@ -687,29 +683,10 @@
         for (int i = 0; i < points.size() && i < KNEARESTNEIGHBOR; ++i) {
             DisplayOption p = points.get(i);
             float w = weight(width, height, p.minWidthDps, p.minHeightDps, WEIGHT_POWER);
-            if (sDebug) {
-                for (int j = INDEX_DEFAULT; j < COUNT_SIZES; j++) {
-                    Log.d("b/298077774",
-                            "invDistWeightedInterpolate - points[" + i + "]: " + String.format(
-                                    Locale.ENGLISH, "\t%s: PointF(%.1f, %.1f)dp",
-                                    "minCellSize[" + j + "]",
-                                    p.minCellSize[j].x, p.minCellSize[j].y));
-                }
-                Log.d("b/298077774", "invDistWeightedInterpolate - w[" + i + "]: " + w);
-            }
             weights += w;
             out.add(new DisplayOption().add(p).multiply(w));
         }
         out.multiply(1.0f / weights);
-        if (sDebug) {
-            Log.d("b/298077774", "invDistWeightedInterpolate - weights: " + weights);
-            for (int j = INDEX_DEFAULT; j < COUNT_SIZES; j++) {
-                Log.d("b/298077774",
-                        "invDistWeightedInterpolate - out: " + String.format(Locale.ENGLISH,
-                                "\t%s: PointF(%.1f, %.1f)dp", "minCellSize[" + j + "]",
-                                out.minCellSize[j].x, out.minCellSize[j].y));
-            }
-        }
 
         // Since the bitmaps are persisted, ensure that all bitmap sizes are not larger than
         // predefined size to avoid cache invalidation
