--- old/src/hotspot/share/gc/shenandoah/shenandoahHeapRegion.cpp 2019-05-10 10:58:29.551384080 -0400 +++ new/src/hotspot/share/gc/shenandoah/shenandoahHeapRegion.cpp 2019-05-10 10:58:29.239386111 -0400 @@ -30,6 +30,7 @@ #include "gc/shenandoah/shenandoahMarkingContext.inline.hpp" #include "gc/shenandoah/shenandoahTraversalGC.hpp" #include "gc/shared/space.inline.hpp" +#include "jfr/jfrEvents.hpp" #include "memory/iterator.inline.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.hpp" @@ -93,7 +94,7 @@ case _empty_uncommitted: do_commit(); case _empty_committed: - _state = _regular; + set_state(_regular); case _regular: case _pinned: return; @@ -114,10 +115,10 @@ case _cset: case _humongous_start: case _humongous_cont: - _state = _regular; + set_state(_regular); return; case _pinned_cset: - _state = _pinned; + set_state(_pinned); return; case _regular: case _pinned: @@ -133,7 +134,7 @@ case _empty_uncommitted: do_commit(); case _empty_committed: - _state = _humongous_start; + set_state(_humongous_start); return; default: report_illegal_transition("humongous start allocation"); @@ -149,7 +150,7 @@ case _regular: case _humongous_start: case _humongous_cont: - _state = _humongous_start; + set_state(_humongous_start); return; default: report_illegal_transition("humongous start bypass"); @@ -162,7 +163,7 @@ case _empty_uncommitted: do_commit(); case _empty_committed: - _state = _humongous_cont; + set_state(_humongous_cont); return; default: report_illegal_transition("humongous continuation allocation"); @@ -178,7 +179,7 @@ case _regular: case _humongous_start: case _humongous_cont: - _state = _humongous_cont; + set_state(_humongous_cont); return; default: report_illegal_transition("humongous continuation bypass"); @@ -190,14 +191,14 @@ switch (_state) { case _regular: assert (_critical_pins == 0, "sanity"); - _state = _pinned; + set_state(_pinned); case _pinned_cset: case _pinned: _critical_pins++; return; case _humongous_start: assert (_critical_pins == 0, "sanity"); - _state = _pinned_humongous_start; + set_state(_pinned_humongous_start); case _pinned_humongous_start: _critical_pins++; return; @@ -219,7 +220,7 @@ assert (_critical_pins > 0, "sanity"); _critical_pins--; if (_critical_pins == 0) { - _state = _regular; + set_state(_regular); } return; case _regular: @@ -231,14 +232,14 @@ assert (_critical_pins > 0, "sanity"); _critical_pins--; if (_critical_pins == 0) { - _state = _cset; + set_state(_cset); } return; case _pinned_humongous_start: assert (_critical_pins > 0, "sanity"); _critical_pins--; if (_critical_pins == 0) { - _state = _humongous_start; + set_state(_humongous_start); } return; default: @@ -250,7 +251,7 @@ _heap->assert_heaplock_owned_by_current_thread(); switch (_state) { case _regular: - _state = _cset; + set_state(_cset); case _cset: return; default: @@ -268,7 +269,7 @@ // Reclaiming humongous regions case _regular: // Immediate region reclaim - _state = _trash; + set_state(_trash); return; default: report_illegal_transition("trashing"); @@ -287,7 +288,7 @@ _heap->assert_heaplock_owned_by_current_thread(); switch (_state) { case _trash: - _state = _empty_committed; + set_state(_empty_committed); _empty_time = os::elapsedTime(); return; default: @@ -300,7 +301,7 @@ switch (_state) { case _empty_committed: do_uncommit(); - _state = _empty_uncommitted; + set_state(_empty_uncommitted); return; default: report_illegal_transition("uncommiting"); @@ -314,7 +315,7 @@ switch (_state) { case _empty_uncommitted: do_commit(); - _state = _empty_committed; + set_state(_empty_committed); return; default: report_illegal_transition("commit bypass"); @@ -679,3 +680,16 @@ } _heap->decrease_committed(ShenandoahHeapRegion::region_size_bytes()); } + +void ShenandoahHeapRegion::set_state(RegionState to) { + EventShenandoahHeapRegionStateChange evt; + if (evt.should_commit()){ + evt.set_index(region_number()); + evt.set_start((uintptr_t)bottom()); + evt.set_used(used()); + evt.set_from(_state); + evt.set_to(to); + evt.commit(); + } + _state = to; +}