Remove all support for Brooks read barrier.
Test: m
Bug: 177048505
Change-Id: Ifb16927455b98996c61f0b6370bae9a114bf8018
diff --git a/build/art.go b/build/art.go
index dd7895a..a6cd944 100644
--- a/build/art.go
+++ b/build/art.go
@@ -61,8 +61,8 @@
}
if !ctx.Config().IsEnvFalse("ART_USE_READ_BARRIER") && ctx.Config().ArtUseReadBarrier() {
- // Used to change the read barrier type. Valid values are BAKER, BROOKS,
- // TABLELOOKUP. The default is BAKER.
+ // Used to change the read barrier type. Valid values are BAKER, TABLELOOKUP.
+ // The default is BAKER.
barrierType := ctx.Config().GetenvWithDefault("ART_READ_BARRIER_TYPE", "BAKER")
cflags = append(cflags,
"-DART_USE_READ_BARRIER=1",
diff --git a/runtime/class_linker_test.cc b/runtime/class_linker_test.cc
index e183146..2400f9f 100644
--- a/runtime/class_linker_test.cc
+++ b/runtime/class_linker_test.cc
@@ -148,21 +148,11 @@
EXPECT_FALSE(JavaLangObject->IsSynthetic());
EXPECT_EQ(4U, JavaLangObject->NumDirectMethods());
EXPECT_EQ(11U, JavaLangObject->NumVirtualMethods());
- if (!kUseBrooksReadBarrier) {
- EXPECT_EQ(2U, JavaLangObject->NumInstanceFields());
- } else {
- EXPECT_EQ(4U, JavaLangObject->NumInstanceFields());
- }
+ EXPECT_EQ(2U, JavaLangObject->NumInstanceFields());
EXPECT_STREQ(JavaLangObject->GetInstanceField(0)->GetName(),
"shadow$_klass_");
EXPECT_STREQ(JavaLangObject->GetInstanceField(1)->GetName(),
"shadow$_monitor_");
- if (kUseBrooksReadBarrier) {
- EXPECT_STREQ(JavaLangObject->GetInstanceField(2)->GetName(),
- "shadow$_x_rb_ptr_");
- EXPECT_STREQ(JavaLangObject->GetInstanceField(3)->GetName(),
- "shadow$_x_xpadding_");
- }
EXPECT_EQ(0U, JavaLangObject->NumStaticFields());
EXPECT_EQ(0U, JavaLangObject->NumDirectInterfaces());
@@ -568,10 +558,6 @@
ObjectOffsets() : CheckOffsets<mirror::Object>(false, "Ljava/lang/Object;") {
addOffset(OFFSETOF_MEMBER(mirror::Object, klass_), "shadow$_klass_");
addOffset(OFFSETOF_MEMBER(mirror::Object, monitor_), "shadow$_monitor_");
-#ifdef USE_BROOKS_READ_BARRIER
- addOffset(OFFSETOF_MEMBER(mirror::Object, x_rb_ptr_), "shadow$_x_rb_ptr_");
- addOffset(OFFSETOF_MEMBER(mirror::Object, x_xpadding_), "shadow$_x_xpadding_");
-#endif
}
};
diff --git a/runtime/gc/collector/concurrent_copying.cc b/runtime/gc/collector/concurrent_copying.cc
index e4f8b59..af02da8 100644
--- a/runtime/gc/collector/concurrent_copying.cc
+++ b/runtime/gc/collector/concurrent_copying.cc
@@ -2331,7 +2331,7 @@
// TODO: Temporary; remove this when this is no longer needed (b/116087961).
<< " runtime->sentinel=" << Runtime::Current()->GetSentinel().Read<kWithoutReadBarrier>();
}
-#ifdef USE_BAKER_OR_BROOKS_READ_BARRIER
+#ifdef USE_BAKER_READ_BARRIER
mirror::Object* referent = nullptr;
if (UNLIKELY((to_ref->GetClass<kVerifyNone, kWithoutReadBarrier>()->IsTypeOfReferenceClass() &&
(referent = to_ref->AsReference()->GetReferent<kWithoutReadBarrier>()) != nullptr &&
diff --git a/runtime/gc/reference_queue.cc b/runtime/gc/reference_queue.cc
index 1e3cf93..568ca04 100644
--- a/runtime/gc/reference_queue.cc
+++ b/runtime/gc/reference_queue.cc
@@ -75,7 +75,7 @@
// This must be called whenever DequeuePendingReference is called.
void ReferenceQueue::DisableReadBarrierForReference(ObjPtr<mirror::Reference> ref) {
Heap* heap = Runtime::Current()->GetHeap();
- if (kUseBakerOrBrooksReadBarrier && heap->CurrentCollectorType() == kCollectorTypeCC &&
+ if (kUseBakerReadBarrier && heap->CurrentCollectorType() == kCollectorTypeCC &&
heap->ConcurrentCopyingCollector()->IsActive()) {
// Change the gray ptr we left in ConcurrentCopying::ProcessMarkStackRef() to non-gray.
// We check IsActive() above because we don't want to do this when the zygote compaction
diff --git a/runtime/mirror/object.h b/runtime/mirror/object.h
index 7b110fc..ac72745 100644
--- a/runtime/mirror/object.h
+++ b/runtime/mirror/object.h
@@ -71,7 +71,7 @@
static constexpr bool kCheckFieldAssignments = false;
// Size of Object.
-static constexpr uint32_t kObjectHeaderSize = kUseBrooksReadBarrier ? 16 : 8;
+static constexpr uint32_t kObjectHeaderSize = 8;
// C++ mirror of java.lang.Object
class MANAGED LOCKABLE Object {
@@ -775,14 +775,6 @@
// Monitor and hash code information.
uint32_t monitor_;
-#ifdef USE_BROOKS_READ_BARRIER
- // Note names use a 'x' prefix and the x_rb_ptr_ is of type int
- // instead of Object to go with the alphabetical/by-type field order
- // on the Java side.
- uint32_t x_rb_ptr_; // For the Brooks pointer.
- uint32_t x_xpadding_; // For 8-byte alignment. TODO: get rid of this.
-#endif
-
friend class art::Monitor;
friend struct art::ObjectOffsets; // for verifying offset information
friend class CopyObjectVisitor; // for CopyObject().
diff --git a/runtime/read_barrier-inl.h b/runtime/read_barrier-inl.h
index 1bcbcff..0861375 100644
--- a/runtime/read_barrier-inl.h
+++ b/runtime/read_barrier-inl.h
@@ -72,9 +72,6 @@
}
AssertToSpaceInvariant(obj, offset, ref);
return ref;
- } else if (kUseBrooksReadBarrier) {
- // To be implemented.
- return ref_addr->template AsMirrorPtr<kIsVolatile>();
} else if (kUseTableLookupReadBarrier) {
MirrorType* ref = ref_addr->template AsMirrorPtr<kIsVolatile>();
MirrorType* old_ref = ref;
@@ -123,9 +120,6 @@
}
AssertToSpaceInvariant(gc_root_source, ref);
return ref;
- } else if (kUseBrooksReadBarrier) {
- // To be implemented.
- return ref;
} else if (kUseTableLookupReadBarrier) {
Thread* self = Thread::Current();
if (self != nullptr &&
@@ -164,9 +158,6 @@
}
AssertToSpaceInvariant(gc_root_source, ref);
return ref;
- } else if (with_read_barrier && kUseBrooksReadBarrier) {
- // To be implemented.
- return ref;
} else if (with_read_barrier && kUseTableLookupReadBarrier) {
Thread* self = Thread::Current();
if (self != nullptr &&
diff --git a/runtime/read_barrier_config.h b/runtime/read_barrier_config.h
index 7067f9b..dc11d94 100644
--- a/runtime/read_barrier_config.h
+++ b/runtime/read_barrier_config.h
@@ -24,14 +24,12 @@
// Global (C) part.
// Uncomment one of the following two and the two fields in
-// Object.java (libcore) to enable baker, brooks (unimplemented), or
+// Object.java (libcore) to enable baker, or
// table-lookup read barriers.
#ifdef ART_USE_READ_BARRIER
#if ART_READ_BARRIER_TYPE_IS_BAKER
#define USE_BAKER_READ_BARRIER
-#elif ART_READ_BARRIER_TYPE_IS_BROOKS
-#define USE_BROOKS_READ_BARRIER
#elif ART_READ_BARRIER_TYPE_IS_TABLELOOKUP
#define USE_TABLE_LOOKUP_READ_BARRIER
#else
@@ -39,18 +37,10 @@
#endif
#endif // ART_USE_READ_BARRIER
-#if defined(USE_BAKER_READ_BARRIER) || defined(USE_BROOKS_READ_BARRIER)
-#define USE_BAKER_OR_BROOKS_READ_BARRIER
-#endif
-
-#if defined(USE_BAKER_READ_BARRIER) || defined(USE_BROOKS_READ_BARRIER) || defined(USE_TABLE_LOOKUP_READ_BARRIER)
+#if defined(USE_BAKER_READ_BARRIER) || defined(USE_TABLE_LOOKUP_READ_BARRIER)
#define USE_READ_BARRIER
#endif
-#if defined(USE_BAKER_READ_BARRIER) && defined(USE_BROOKS_READ_BARRIER)
-#error "Only one of Baker or Brooks can be enabled at a time."
-#endif
-
// C++-specific configuration part..
@@ -64,21 +54,13 @@
static constexpr bool kUseBakerReadBarrier = false;
#endif
-#ifdef USE_BROOKS_READ_BARRIER
-static constexpr bool kUseBrooksReadBarrier = true;
-#else
-static constexpr bool kUseBrooksReadBarrier = false;
-#endif
-
#ifdef USE_TABLE_LOOKUP_READ_BARRIER
static constexpr bool kUseTableLookupReadBarrier = true;
#else
static constexpr bool kUseTableLookupReadBarrier = false;
#endif
-static constexpr bool kUseBakerOrBrooksReadBarrier = kUseBakerReadBarrier || kUseBrooksReadBarrier;
-static constexpr bool kUseReadBarrier =
- kUseBakerReadBarrier || kUseBrooksReadBarrier || kUseTableLookupReadBarrier;
+static constexpr bool kUseReadBarrier = kUseBakerReadBarrier || kUseTableLookupReadBarrier;
// Debugging flag that forces the generation of read barriers, but
// does not trigger the use of the concurrent copying GC.