Enable deferred field tracing for primitive fields in platform

Fixes: b/343358175
Change-Id: I398524582fe1a0b1f86bdd0f7c061ce6f33b465b
diff --git a/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracing.java b/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracing.java
index c48ceb0..d7369fbd 100644
--- a/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracing.java
+++ b/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracing.java
@@ -22,7 +22,7 @@
   public static EnqueuerDeferredTracing create(
       AppView<? extends AppInfoWithClassHierarchy> appView, Enqueuer enqueuer, Mode mode) {
     InternalOptions options = appView.options();
-    if (!options.isShrinking() || !options.enableEnqueuerDeferredTracing) {
+    if (!options.isShrinking()) {
       return empty();
     }
     if (!options.isOptimizedResourceShrinking()) {
diff --git a/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracingImpl.java b/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracingImpl.java
index af43714..1c3889d 100644
--- a/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracingImpl.java
+++ b/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracingImpl.java
@@ -82,6 +82,11 @@
       ProgramMethod context,
       FieldAccessKind accessKind,
       FieldAccessMetadata metadata) {
+    if (!fieldReference.getType().isPrimitiveType()
+        && !options.getTestingOptions().enableEnqueuerDeferredTracingForReferenceFields) {
+      return false;
+    }
+
     ProgramField field = resolutionResult.getSingleProgramField();
     if (field == null) {
       return false;
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 62bd8a2..d68f123 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -737,9 +737,6 @@
   // @dalvik.annotation.codegen.CovariantReturnType$CovariantReturnTypes.
   public boolean processCovariantReturnTypeAnnotations = true;
 
-  public boolean enableEnqueuerDeferredTracing =
-      System.getProperty("com.android.tools.r8.disableEnqueuerDeferredTracing") == null;
-
   public boolean loadAllClassDefinitions = false;
 
   // Whether or not to check for valid multi-dex builds.
@@ -2367,6 +2364,8 @@
     public boolean enableBridgeHoistingToSharedSyntheticSuperclass = false;
     public boolean enableCheckCastAndInstanceOfRemoval = true;
     public boolean enableDeadSwitchCaseElimination = true;
+    public boolean enableEnqueuerDeferredTracingForReferenceFields =
+        System.getProperty("com.android.tools.r8.disableEnqueuerDeferredTracing") == null;
     public boolean enableInvokeSuperToInvokeVirtualRewriting = true;
     public boolean enableLegacyClassDefOrdering =
         System.getProperty("com.android.tools.r8.enableLegacyClassDefOrdering") != null;