--- a/src/hotspot/share/gc/shenandoah/shenandoahHeapRegion.cpp Tue May 21 10:34:57 2019 +0200
+++ b/src/hotspot/share/gc/shenandoah/shenandoahHeapRegion.cpp Tue May 21 10:36:23 2019 +0200
@@ -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;
+}