Mercurial > hg > graal-jvmci-8
diff src/share/vm/memory/cardTableModRefBS.cpp @ 940:8624da129f0b
6841313: G1: dirty cards of survivor regions in parallel
Reviewed-by: tonyp, iveresov
author | apetrusenko |
---|---|
date | Mon, 31 Aug 2009 05:27:29 -0700 |
parents | ff004bcd2596 |
children | 6aa7255741f3 |
line wrap: on
line diff
--- a/src/share/vm/memory/cardTableModRefBS.cpp Thu Aug 13 16:22:45 2009 -0700 +++ b/src/share/vm/memory/cardTableModRefBS.cpp Mon Aug 31 05:27:29 2009 -0700 @@ -660,6 +660,29 @@ GuaranteeNotModClosure blk(this); non_clean_card_iterate_work(mr, &blk, false); } + +// To verify a MemRegion is entirely dirty this closure is passed to +// dirty_card_iterate. If the region is dirty do_MemRegion will be +// invoked only once with a MemRegion equal to the one being +// verified. +class GuaranteeDirtyClosure: public MemRegionClosure { + CardTableModRefBS* _ct; + MemRegion _mr; + bool _result; +public: + GuaranteeDirtyClosure(CardTableModRefBS* ct, MemRegion mr) + : _ct(ct), _mr(mr), _result(false) {} + void do_MemRegion(MemRegion mr) { + _result = _mr.equals(mr); + } + bool result() const { return _result; } +}; + +void CardTableModRefBS::verify_dirty_region(MemRegion mr) { + GuaranteeDirtyClosure blk(this, mr); + dirty_card_iterate(mr, &blk); + guarantee(blk.result(), "Non-dirty cards in region that should be dirty"); +} #endif bool CardTableModRefBSForCTRS::card_will_be_scanned(jbyte cv) {