diff --git a/java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java b/java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java
index 32c2788..fb3700e 100644
--- a/java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java
+++ b/java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java
@@ -156,8 +156,7 @@
     for (CallLogDataSource dataSource : dataSources.getDataSourcesIncludingSystemCallLog()) {
       ListenableFuture<Boolean> dataSourceDirty = dataSource.isDirty();
       isDirtyFutures.add(dataSourceDirty);
-      String eventName =
-          String.format(Metrics.IS_DIRTY_TEMPLATE, dataSource.getClass().getSimpleName());
+      String eventName = String.format(Metrics.IS_DIRTY_TEMPLATE, dataSource.getLoggingName());
       futureTimer.applyTiming(dataSourceDirty, eventName, LogCatMode.LOG_VALUES);
     }
     // Simultaneously invokes isDirty on all data sources, returning as soon as one returns true.
@@ -242,7 +241,7 @@
   private static String eventNameForFill(CallLogDataSource dataSource, boolean isBuilt) {
     return String.format(
         !isBuilt ? Metrics.INITIAL_FILL_TEMPLATE : Metrics.FILL_TEMPLATE,
-        dataSource.getClass().getSimpleName());
+        dataSource.getLoggingName());
   }
 
   private static String eventNameForOverallFill(boolean isBuilt) {
@@ -255,7 +254,7 @@
         !isBuilt
             ? Metrics.INITIAL_ON_SUCCESSFUL_FILL_TEMPLATE
             : Metrics.ON_SUCCESSFUL_FILL_TEMPLATE,
-        dataSource.getClass().getSimpleName());
+        dataSource.getLoggingName());
   }
 
   private static String eventNameForOverallOnSuccessfulFill(boolean isBuilt) {
diff --git a/java/com/android/dialer/calllog/datasources/CallLogDataSource.java b/java/com/android/dialer/calllog/datasources/CallLogDataSource.java
index f6796c7..75f06d5 100644
--- a/java/com/android/dialer/calllog/datasources/CallLogDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/CallLogDataSource.java
@@ -113,4 +113,11 @@
    */
   @MainThread
   ListenableFuture<Void> clearData();
+
+  /**
+   * The name of this daa source for logging purposes. This is generally the same as the class name
+   * (but should not use methods from {@link Class} because the class names are generally obfuscated
+   * by Proguard.
+   */
+  String getLoggingName();
 }
diff --git a/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java b/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java
index 0de9873..66d29a7 100644
--- a/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java
@@ -320,6 +320,11 @@
         MoreExecutors.directExecutor());
   }
 
+  @Override
+  public String getLoggingName() {
+    return "PhoneLookupDataSource";
+  }
+
   private static ImmutableSet<DialerPhoneNumber>
       queryDistinctDialerPhoneNumbersFromAnnotatedCallLog(Context appContext) {
     ImmutableSet.Builder<DialerPhoneNumber> numbers = ImmutableSet.builder();
diff --git a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
index b5067da..a08b50e 100644
--- a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
@@ -148,6 +148,11 @@
   }
 
   @Override
+  public String getLoggingName() {
+    return "SystemCallLogDataSource";
+  }
+
+  @Override
   public ListenableFuture<Boolean> isDirty() {
     return backgroundExecutorService.submit(this::isDirtyInternal);
   }
diff --git a/java/com/android/dialer/calllog/datasources/voicemail/VoicemailDataSource.java b/java/com/android/dialer/calllog/datasources/voicemail/VoicemailDataSource.java
index ab9288a..7a23022 100644
--- a/java/com/android/dialer/calllog/datasources/voicemail/VoicemailDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/voicemail/VoicemailDataSource.java
@@ -121,4 +121,9 @@
   public ListenableFuture<Void> clearData() {
     return Futures.immediateFuture(null);
   }
+
+  @Override
+  public String getLoggingName() {
+    return "VoicemailDataSource";
+  }
 }
diff --git a/java/com/android/dialer/phonelookup/PhoneLookup.java b/java/com/android/dialer/phonelookup/PhoneLookup.java
index 0b9cbf6..1043ee7 100644
--- a/java/com/android/dialer/phonelookup/PhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/PhoneLookup.java
@@ -135,4 +135,11 @@
    * disabled (because for example there was a problem with it).
    */
   ListenableFuture<Void> clearData();
+
+  /**
+   * The name of this lookup for logging purposes. This is generally the same as the class name (but
+   * should not use methods from {@link Class} because the class names are generally obfuscated by
+   * Proguard.
+   */
+  String getLoggingName();
 }
diff --git a/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java b/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java
index fe6642e..4192e79 100644
--- a/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java
@@ -181,4 +181,9 @@
   public ListenableFuture<Void> clearData() {
     return Futures.immediateFuture(null);
   }
+
+  @Override
+  public String getLoggingName() {
+    return "SystemBlockedNumberPhoneLookup";
+  }
 }
diff --git a/java/com/android/dialer/phonelookup/cequint/CequintPhoneLookup.java b/java/com/android/dialer/phonelookup/cequint/CequintPhoneLookup.java
index 36d0be4..b045d03 100644
--- a/java/com/android/dialer/phonelookup/cequint/CequintPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/cequint/CequintPhoneLookup.java
@@ -141,6 +141,11 @@
     return Futures.immediateFuture(null);
   }
 
+  @Override
+  public String getLoggingName() {
+    return "CequintPhoneLookup";
+  }
+
   /**
    * Builds a {@link CequintInfo} proto based on the given {@link CequintCallerIdContact} returned
    * by {@link CequintCallerIdManager}.
diff --git a/java/com/android/dialer/phonelookup/cnap/CnapPhoneLookup.java b/java/com/android/dialer/phonelookup/cnap/CnapPhoneLookup.java
index db7c210..1b78a8e 100644
--- a/java/com/android/dialer/phonelookup/cnap/CnapPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/cnap/CnapPhoneLookup.java
@@ -157,4 +157,9 @@
   public ListenableFuture<Void> clearData() {
     return Futures.immediateFuture(null);
   }
+
+  @Override
+  public String getLoggingName() {
+    return "CnapPhoneLookup";
+  }
 }
diff --git a/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java b/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java
index 1ac13df..8322329 100644
--- a/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java
@@ -89,13 +89,12 @@
     for (PhoneLookup<?> phoneLookup : phoneLookups) {
       ListenableFuture<?> lookupFuture = phoneLookup.lookup(appContext, call);
       String eventName =
-          String.format(Metrics.LOOKUP_FOR_CALL_TEMPLATE, phoneLookup.getClass().getSimpleName());
+          String.format(Metrics.LOOKUP_FOR_CALL_TEMPLATE, phoneLookup.getLoggingName());
       futureTimer.applyTiming(lookupFuture, eventName);
       futures.add(lookupFuture);
     }
     ListenableFuture<PhoneLookupInfo> combinedFuture = combineSubMessageFutures(futures);
-    String eventName =
-        String.format(Metrics.LOOKUP_FOR_CALL_TEMPLATE, CompositePhoneLookup.class.getSimpleName());
+    String eventName = String.format(Metrics.LOOKUP_FOR_CALL_TEMPLATE, getLoggingName());
     futureTimer.applyTiming(combinedFuture, eventName);
     return combinedFuture;
   }
@@ -114,14 +113,12 @@
     for (PhoneLookup<?> phoneLookup : phoneLookups) {
       ListenableFuture<?> lookupFuture = phoneLookup.lookup(dialerPhoneNumber);
       String eventName =
-          String.format(Metrics.LOOKUP_FOR_NUMBER_TEMPLATE, phoneLookup.getClass().getSimpleName());
+          String.format(Metrics.LOOKUP_FOR_NUMBER_TEMPLATE, phoneLookup.getLoggingName());
       futureTimer.applyTiming(lookupFuture, eventName);
       futures.add(lookupFuture);
     }
     ListenableFuture<PhoneLookupInfo> combinedFuture = combineSubMessageFutures(futures);
-    String eventName =
-        String.format(
-            Metrics.LOOKUP_FOR_NUMBER_TEMPLATE, CompositePhoneLookup.class.getSimpleName());
+    String eventName = String.format(Metrics.LOOKUP_FOR_NUMBER_TEMPLATE, getLoggingName());
     futureTimer.applyTiming(combinedFuture, eventName);
     return combinedFuture;
   }
@@ -133,6 +130,7 @@
     return Futures.transform(
         Futures.allAsList(subMessageFutures),
         subMessages -> {
+          Preconditions.checkNotNull(subMessages);
           Builder mergedInfo = PhoneLookupInfo.newBuilder();
           for (int i = 0; i < subMessages.size(); i++) {
             PhoneLookup phoneLookup = phoneLookups.get(i);
@@ -152,16 +150,14 @@
     for (PhoneLookup<?> phoneLookup : phoneLookups) {
       ListenableFuture<Boolean> isDirtyFuture = phoneLookup.isDirty(phoneNumbers);
       futures.add(isDirtyFuture);
-      String eventName =
-          String.format(Metrics.IS_DIRTY_TEMPLATE, phoneLookup.getClass().getSimpleName());
+      String eventName = String.format(Metrics.IS_DIRTY_TEMPLATE, phoneLookup.getLoggingName());
       futureTimer.applyTiming(isDirtyFuture, eventName, LogCatMode.LOG_VALUES);
     }
     // Executes all child lookups (possibly in parallel), completing when the first composite lookup
     // which returns "true" completes, and cancels the others.
     ListenableFuture<Boolean> firstMatching =
         DialerFutures.firstMatching(futures, Preconditions::checkNotNull, false /* defaultValue */);
-    String eventName =
-        String.format(Metrics.IS_DIRTY_TEMPLATE, CompositePhoneLookup.class.getSimpleName());
+    String eventName = String.format(Metrics.IS_DIRTY_TEMPLATE, getLoggingName());
     futureTimer.applyTiming(firstMatching, eventName, LogCatMode.LOG_VALUES);
     return firstMatching;
   }
@@ -178,6 +174,7 @@
     return Futures.transformAsync(
         callLogState.isBuilt(),
         isBuilt -> {
+          Preconditions.checkNotNull(isBuilt);
           List<ListenableFuture<ImmutableMap<DialerPhoneNumber, ?>>> futures = new ArrayList<>();
           for (PhoneLookup phoneLookup : phoneLookups) {
             futures.add(buildSubmapAndGetMostRecentInfo(existingInfoMap, phoneLookup, isBuilt));
@@ -186,6 +183,7 @@
               Futures.transform(
                   Futures.allAsList(futures),
                   (allMaps) -> {
+                    Preconditions.checkNotNull(allMaps);
                     ImmutableMap.Builder<DialerPhoneNumber, PhoneLookupInfo> combinedMap =
                         ImmutableMap.builder();
                     for (DialerPhoneNumber dialerPhoneNumber : existingInfoMap.keySet()) {
@@ -206,7 +204,7 @@
                     return combinedMap.build();
                   },
                   lightweightExecutorService);
-          String eventName = getMostRecentInfoEventName(this, isBuilt);
+          String eventName = getMostRecentInfoEventName(getLoggingName(), isBuilt);
           futureTimer.applyTiming(combinedFuture, eventName);
           return combinedFuture;
         },
@@ -224,7 +222,7 @@
                 phoneLookup.getSubMessage(existingInfoMap.get(dialerPhoneNumber)));
     ListenableFuture<ImmutableMap<DialerPhoneNumber, T>> mostRecentInfoFuture =
         phoneLookup.getMostRecentInfo(ImmutableMap.copyOf(submap));
-    String eventName = getMostRecentInfoEventName(phoneLookup, isBuilt);
+    String eventName = getMostRecentInfoEventName(phoneLookup.getLoggingName(), isBuilt);
     futureTimer.applyTiming(mostRecentInfoFuture, eventName);
     return mostRecentInfoFuture;
   }
@@ -234,17 +232,19 @@
     return Futures.transformAsync(
         callLogState.isBuilt(),
         isBuilt -> {
+          Preconditions.checkNotNull(isBuilt);
           List<ListenableFuture<Void>> futures = new ArrayList<>();
           for (PhoneLookup<?> phoneLookup : phoneLookups) {
             ListenableFuture<Void> phoneLookupFuture = phoneLookup.onSuccessfulBulkUpdate();
             futures.add(phoneLookupFuture);
-            String eventName = onSuccessfulBulkUpdatedEventName(phoneLookup, isBuilt);
+            String eventName =
+                onSuccessfulBulkUpdatedEventName(phoneLookup.getLoggingName(), isBuilt);
             futureTimer.applyTiming(phoneLookupFuture, eventName);
           }
           ListenableFuture<Void> combinedFuture =
               Futures.transform(
                   Futures.allAsList(futures), unused -> null, lightweightExecutorService);
-          String eventName = onSuccessfulBulkUpdatedEventName(this, isBuilt);
+          String eventName = onSuccessfulBulkUpdatedEventName(getLoggingName(), isBuilt);
           futureTimer.applyTiming(combinedFuture, eventName);
           return combinedFuture;
         },
@@ -278,19 +278,23 @@
         Futures.allAsList(futures), unused -> null, lightweightExecutorService);
   }
 
-  private static String getMostRecentInfoEventName(Object classNameSource, boolean isBuilt) {
+  private static String getMostRecentInfoEventName(String loggingName, boolean isBuilt) {
     return String.format(
         !isBuilt
             ? Metrics.INITIAL_GET_MOST_RECENT_INFO_TEMPLATE
             : Metrics.GET_MOST_RECENT_INFO_TEMPLATE,
-        classNameSource.getClass().getSimpleName());
+        loggingName);
   }
 
-  private static String onSuccessfulBulkUpdatedEventName(Object classNameSource, boolean isBuilt) {
+  private static String onSuccessfulBulkUpdatedEventName(String loggingName, boolean isBuilt) {
     return String.format(
         !isBuilt
             ? Metrics.INITIAL_ON_SUCCESSFUL_BULK_UPDATE_TEMPLATE
             : Metrics.ON_SUCCESSFUL_BULK_UPDATE_TEMPLATE,
-        classNameSource.getClass().getSimpleName());
+        loggingName);
+  }
+
+  private String getLoggingName() {
+    return "CompositePhoneLookup";
   }
 }
diff --git a/java/com/android/dialer/phonelookup/cp2/Cp2DefaultDirectoryPhoneLookup.java b/java/com/android/dialer/phonelookup/cp2/Cp2DefaultDirectoryPhoneLookup.java
index c5d4e53..1642f9b 100644
--- a/java/com/android/dialer/phonelookup/cp2/Cp2DefaultDirectoryPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/cp2/Cp2DefaultDirectoryPhoneLookup.java
@@ -644,6 +644,11 @@
         });
   }
 
+  @Override
+  public String getLoggingName() {
+    return "Cp2DefaultDirectoryPhoneLookup";
+  }
+
   /**
    * 1. get all contact ids. if the id is unset, add the number to the list of contacts to look up.
    * 2. reduce our list of contact ids to those that were updated after lastModified. 3. Now we have
diff --git a/java/com/android/dialer/phonelookup/cp2/Cp2ExtendedDirectoryPhoneLookup.java b/java/com/android/dialer/phonelookup/cp2/Cp2ExtendedDirectoryPhoneLookup.java
index 2b98f26..77a95e7 100644
--- a/java/com/android/dialer/phonelookup/cp2/Cp2ExtendedDirectoryPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/cp2/Cp2ExtendedDirectoryPhoneLookup.java
@@ -234,4 +234,9 @@
   public ListenableFuture<Void> clearData() {
     return Futures.immediateFuture(null);
   }
+
+  @Override
+  public String getLoggingName() {
+    return "Cp2ExtendedDirectoryPhoneLookup";
+  }
 }
diff --git a/java/com/android/dialer/phonelookup/emergency/EmergencyPhoneLookup.java b/java/com/android/dialer/phonelookup/emergency/EmergencyPhoneLookup.java
index 3f675d3..d31614a 100644
--- a/java/com/android/dialer/phonelookup/emergency/EmergencyPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/emergency/EmergencyPhoneLookup.java
@@ -114,4 +114,9 @@
   public ListenableFuture<Void> clearData() {
     return Futures.immediateFuture(null);
   }
+
+  @Override
+  public String getLoggingName() {
+    return "EmergencyPhoneLookup";
+  }
 }
diff --git a/java/com/android/dialer/phonelookup/spam/SpamPhoneLookup.java b/java/com/android/dialer/phonelookup/spam/SpamPhoneLookup.java
index 71341ba..7e5c973 100644
--- a/java/com/android/dialer/phonelookup/spam/SpamPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/spam/SpamPhoneLookup.java
@@ -167,4 +167,9 @@
           return null;
         });
   }
+
+  @Override
+  public String getLoggingName() {
+    return "SpamPhoneLookup";
+  }
 }
