Improve logging in Sticky-Bit CC collector.
Test: ART run-tests & gtests, libcore tests, JDWP tests (host & device)
Test: Device/emulator boot test
Bug: 67628039
Bug: 12687968
Change-Id: Id8232a47410ac7fada0a87cf142e7e437572d031
diff --git a/runtime/gc/collector/concurrent_copying.cc b/runtime/gc/collector/concurrent_copying.cc
index c12424b..29e30f8 100644
--- a/runtime/gc/collector/concurrent_copying.cc
+++ b/runtime/gc/collector/concurrent_copying.cc
@@ -371,7 +371,8 @@
}
BindBitmaps();
if (kVerboseMode) {
- LOG(INFO) << "force_evacuate_all=" << force_evacuate_all_;
+ LOG(INFO) << "young_gen=" << std::boolalpha << young_gen_ << std::noboolalpha;
+ LOG(INFO) << "force_evacuate_all=" << std::boolalpha << force_evacuate_all_ << std::noboolalpha;
LOG(INFO) << "Largest immune region: " << immune_spaces_.GetLargestImmuneRegion().Begin()
<< "-" << immune_spaces_.GetLargestImmuneRegion().End();
for (space::ContinuousSpace* space : immune_spaces_.GetSpaces()) {
@@ -872,6 +873,9 @@
gc_grays_immune_objects_ = false;
}
if (kEnableGenerationalConcurrentCopyingCollection && young_gen_) {
+ if (kVerboseMode) {
+ LOG(INFO) << "GC ScanCardsForSpace";
+ }
TimingLogger::ScopedTiming split2("ScanCardsForSpace", GetTimings());
WriterMutexLock rmu(Thread::Current(), *Locks::heap_bitmap_lock_);
CHECK_EQ(done_scanning_.load(std::memory_order_relaxed), false);
@@ -909,6 +913,9 @@
}
// Done scanning unevac space.
done_scanning_.store(true, std::memory_order_seq_cst);
+ if (kVerboseMode) {
+ LOG(INFO) << "GC end of ScanCardsForSpace";
+ }
}
{
// For a sticky-bit collection, this phase needs to be after the card scanning since the
@@ -2120,15 +2127,27 @@
LOG(FATAL_WITHOUT_ABORT) << DumpHeapReference(obj, offset, ref);
if (obj != nullptr) {
LogFromSpaceRefHolder(obj, offset);
- LOG(ERROR) << "UNEVAC " << region_space_->IsInUnevacFromSpace(obj) << " "
- << obj << " " << obj->GetMarkBit();
+ LOG(FATAL_WITHOUT_ABORT) << "UNEVAC " << region_space_->IsInUnevacFromSpace(obj) << " "
+ << obj << " " << obj->GetMarkBit();
if (region_space_->HasAddress(obj)) {
- region_space_->DumpRegionForObject(LOG_STREAM(ERROR), obj);
+ region_space_->DumpRegionForObject(LOG_STREAM(FATAL_WITHOUT_ABORT), obj);
}
- LOG(ERROR) << "CARD " << static_cast<size_t>(
+ LOG(FATAL_WITHOUT_ABORT) << "CARD " << static_cast<size_t>(
*Runtime::Current()->GetHeap()->GetCardTable()->CardFromAddr(
reinterpret_cast<uint8_t*>(obj)));
- LOG(ERROR) << "BITMAP " << region_space_bitmap_->Test(obj);
+ if (region_space_->HasAddress(obj)) {
+ LOG(FATAL_WITHOUT_ABORT) << "BITMAP " << region_space_bitmap_->Test(obj);
+ } else {
+ accounting::ContinuousSpaceBitmap* mark_bitmap =
+ heap_mark_bitmap_->GetContinuousSpaceBitmap(obj);
+ if (mark_bitmap != nullptr) {
+ LOG(FATAL_WITHOUT_ABORT) << "BITMAP " << mark_bitmap->Test(obj);
+ } else {
+ accounting::LargeObjectBitmap* los_bitmap =
+ heap_mark_bitmap_->GetLargeObjectBitmap(obj);
+ LOG(FATAL_WITHOUT_ABORT) << "BITMAP " << los_bitmap->Test(obj);
+ }
+ }
}
ref->GetLockWord(false).Dump(LOG_STREAM(FATAL_WITHOUT_ABORT));
LOG(FATAL_WITHOUT_ABORT) << "Non-free regions:";