test/hotspot/gtest/gc/shared/test_preservedMarks.cpp
changeset 57777 90ead0febf56
parent 49722 a47d1e21b3f1
equal deleted inserted replaced
57774:21dccfac0ec5 57777:90ead0febf56
    40 
    40 
    41 public:
    41 public:
    42   FakeOop() : _oop() { _oop.set_mark_raw(originalMark()); }
    42   FakeOop() : _oop() { _oop.set_mark_raw(originalMark()); }
    43 
    43 
    44   oop get_oop() { return &_oop; }
    44   oop get_oop() { return &_oop; }
    45   markOop mark() { return _oop.mark_raw(); }
    45   markWord mark() { return _oop.mark_raw(); }
    46   void set_mark(markOop m) { _oop.set_mark_raw(m); }
    46   void set_mark(markWord m) { _oop.set_mark_raw(m); }
    47   void forward_to(oop obj) {
    47   void forward_to(oop obj) {
    48     markOop m = markOopDesc::encode_pointer_as_mark(obj);
    48     markWord m = markWord::encode_pointer_as_mark(obj);
    49     _oop.set_mark_raw(m);
    49     _oop.set_mark_raw(m);
    50   }
    50   }
    51 
    51 
    52   static markOop originalMark() { return markOop(markOopDesc::lock_mask_in_place); }
    52   static markWord originalMark() { return markWord(markWord::lock_mask_in_place); }
    53   static markOop changedMark()  { return markOop(0x4711); }
    53   static markWord changedMark()  { return markWord(0x4711); }
    54 };
    54 };
       
    55 
       
    56 #define ASSERT_MARK_WORD_EQ(a, b) ASSERT_EQ((a).value(), (b).value())
    55 
    57 
    56 TEST_VM(PreservedMarks, iterate_and_restore) {
    58 TEST_VM(PreservedMarks, iterate_and_restore) {
    57   // Need to disable biased locking to easily
    59   // Need to disable biased locking to easily
    58   // create oops that "must_be_preseved"
    60   // create oops that "must_be_preseved"
    59   ScopedDisabledBiasedLocking dbl;
    61   ScopedDisabledBiasedLocking dbl;
    63   FakeOop o2;
    65   FakeOop o2;
    64   FakeOop o3;
    66   FakeOop o3;
    65   FakeOop o4;
    67   FakeOop o4;
    66 
    68 
    67   // Make sure initial marks are correct.
    69   // Make sure initial marks are correct.
    68   ASSERT_EQ(o1.mark(), FakeOop::originalMark());
    70   ASSERT_MARK_WORD_EQ(o1.mark(), FakeOop::originalMark());
    69   ASSERT_EQ(o2.mark(), FakeOop::originalMark());
    71   ASSERT_MARK_WORD_EQ(o2.mark(), FakeOop::originalMark());
    70   ASSERT_EQ(o3.mark(), FakeOop::originalMark());
    72   ASSERT_MARK_WORD_EQ(o3.mark(), FakeOop::originalMark());
    71   ASSERT_EQ(o4.mark(), FakeOop::originalMark());
    73   ASSERT_MARK_WORD_EQ(o4.mark(), FakeOop::originalMark());
    72 
    74 
    73   // Change the marks and verify change.
    75   // Change the marks and verify change.
    74   o1.set_mark(FakeOop::changedMark());
    76   o1.set_mark(FakeOop::changedMark());
    75   o2.set_mark(FakeOop::changedMark());
    77   o2.set_mark(FakeOop::changedMark());
    76   ASSERT_EQ(o1.mark(), FakeOop::changedMark());
    78   ASSERT_MARK_WORD_EQ(o1.mark(), FakeOop::changedMark());
    77   ASSERT_EQ(o2.mark(), FakeOop::changedMark());
    79   ASSERT_MARK_WORD_EQ(o2.mark(), FakeOop::changedMark());
    78 
    80 
    79   // Push o1 and o2 to have their marks preserved.
    81   // Push o1 and o2 to have their marks preserved.
    80   pm.push(o1.get_oop(), o1.mark());
    82   pm.push(o1.get_oop(), o1.mark());
    81   pm.push(o2.get_oop(), o2.mark());
    83   pm.push(o2.get_oop(), o2.mark());
    82 
    84 
    90   pm.adjust_during_full_gc();
    92   pm.adjust_during_full_gc();
    91 
    93 
    92   // Restore all preserved and verify that the changed
    94   // Restore all preserved and verify that the changed
    93   // mark is now present at o3 and o4.
    95   // mark is now present at o3 and o4.
    94   pm.restore();
    96   pm.restore();
    95   ASSERT_EQ(o3.mark(), FakeOop::changedMark());
    97   ASSERT_MARK_WORD_EQ(o3.mark(), FakeOop::changedMark());
    96   ASSERT_EQ(o4.mark(), FakeOop::changedMark());
    98   ASSERT_MARK_WORD_EQ(o4.mark(), FakeOop::changedMark());
    97 }
    99 }