658 |
658 |
659 void CardTableModRefBS::verify_clean_region(MemRegion mr) { |
659 void CardTableModRefBS::verify_clean_region(MemRegion mr) { |
660 GuaranteeNotModClosure blk(this); |
660 GuaranteeNotModClosure blk(this); |
661 non_clean_card_iterate_work(mr, &blk, false); |
661 non_clean_card_iterate_work(mr, &blk, false); |
662 } |
662 } |
|
663 |
|
664 // To verify a MemRegion is entirely dirty this closure is passed to |
|
665 // dirty_card_iterate. If the region is dirty do_MemRegion will be |
|
666 // invoked only once with a MemRegion equal to the one being |
|
667 // verified. |
|
668 class GuaranteeDirtyClosure: public MemRegionClosure { |
|
669 CardTableModRefBS* _ct; |
|
670 MemRegion _mr; |
|
671 bool _result; |
|
672 public: |
|
673 GuaranteeDirtyClosure(CardTableModRefBS* ct, MemRegion mr) |
|
674 : _ct(ct), _mr(mr), _result(false) {} |
|
675 void do_MemRegion(MemRegion mr) { |
|
676 _result = _mr.equals(mr); |
|
677 } |
|
678 bool result() const { return _result; } |
|
679 }; |
|
680 |
|
681 void CardTableModRefBS::verify_dirty_region(MemRegion mr) { |
|
682 GuaranteeDirtyClosure blk(this, mr); |
|
683 dirty_card_iterate(mr, &blk); |
|
684 guarantee(blk.result(), "Non-dirty cards in region that should be dirty"); |
|
685 } |
663 #endif |
686 #endif |
664 |
687 |
665 bool CardTableModRefBSForCTRS::card_will_be_scanned(jbyte cv) { |
688 bool CardTableModRefBSForCTRS::card_will_be_scanned(jbyte cv) { |
666 return |
689 return |
667 CardTableModRefBS::card_will_be_scanned(cv) || |
690 CardTableModRefBS::card_will_be_scanned(cv) || |