Clean up tracking new roots, do not track them for CC.

This addresses comments from
    https://android-review.googlesource.com/321552

Test: ART_USE_READ_BARRIER=false testrunner.py -b --host
Test: ART_USE_READ_BARRIER=true testrunner.py -b --host
Bug: 30627598
Change-Id: I9740e599fe8170201a3b5f10113bbeb0dee500fe
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc
index d02cf17..1d95615 100644
--- a/runtime/class_linker.cc
+++ b/runtime/class_linker.cc
@@ -1908,6 +1908,13 @@
   const bool tracing_enabled = Trace::IsTracingEnabled();
   Thread* const self = Thread::Current();
   WriterMutexLock mu(self, *Locks::classlinker_classes_lock_);
+  if (kUseReadBarrier) {
+    // We do not track new roots for CC.
+    DCHECK_EQ(0, flags & (kVisitRootFlagNewRoots |
+                          kVisitRootFlagClearRootLog |
+                          kVisitRootFlagStartLoggingNewRoots |
+                          kVisitRootFlagStopLoggingNewRoots));
+  }
   if ((flags & kVisitRootFlagAllRoots) != 0) {
     // Argument for how root visiting deals with ArtField and ArtMethod roots.
     // There is 3 GC cases to handle:
@@ -1937,7 +1944,7 @@
         root.VisitRoot(visitor, RootInfo(kRootVMInternal));
       }
     }
-  } else if ((flags & kVisitRootFlagNewRoots) != 0) {
+  } else if (!kUseReadBarrier && (flags & kVisitRootFlagNewRoots) != 0) {
     for (auto& root : new_class_roots_) {
       ObjPtr<mirror::Class> old_ref = root.Read<kWithoutReadBarrier>();
       root.VisitRoot(visitor, RootInfo(kRootStickyClass));
@@ -1958,13 +1965,13 @@
       }
     }
   }
-  if ((flags & kVisitRootFlagClearRootLog) != 0) {
+  if (!kUseReadBarrier && (flags & kVisitRootFlagClearRootLog) != 0) {
     new_class_roots_.clear();
     new_bss_roots_boot_oat_files_.clear();
   }
-  if ((flags & kVisitRootFlagStartLoggingNewRoots) != 0) {
+  if (!kUseReadBarrier && (flags & kVisitRootFlagStartLoggingNewRoots) != 0) {
     log_new_roots_ = true;
-  } else if ((flags & kVisitRootFlagStopLoggingNewRoots) != 0) {
+  } else if (!kUseReadBarrier && (flags & kVisitRootFlagStopLoggingNewRoots) != 0) {
     log_new_roots_ = false;
   }
   // We deliberately ignore the class roots in the image since we
@@ -3757,10 +3764,14 @@
 }
 
 void ClassLinker::WriteBarrierForBootOatFileBssRoots(const OatFile* oat_file) {
-  WriterMutexLock mu(Thread::Current(), *Locks::classlinker_classes_lock_);
-  DCHECK(!oat_file->GetBssGcRoots().empty()) << oat_file->GetLocation();
-  if (log_new_roots_ && !ContainsElement(new_bss_roots_boot_oat_files_, oat_file)) {
-    new_bss_roots_boot_oat_files_.push_back(oat_file);
+  if (!kUseReadBarrier) {
+    WriterMutexLock mu(Thread::Current(), *Locks::classlinker_classes_lock_);
+    DCHECK(!oat_file->GetBssGcRoots().empty()) << oat_file->GetLocation();
+    if (log_new_roots_ && !ContainsElement(new_bss_roots_boot_oat_files_, oat_file)) {
+      new_bss_roots_boot_oat_files_.push_back(oat_file);
+    }
+  } else {
+    LOG(FATAL) << "UNREACHABLE";
   }
 }