Mercurial > hg > jdk9-shenandoah > hotspot
changeset 9729:94b68bbd87b5
8066443: Add G1 support for promotion event
Reviewed-by: tschatzl
author | sfriberg |
---|---|
date | Wed, 02 Sep 2015 09:51:05 +0200 |
parents | 2cad024257e9 |
children | 48b57bb45fe5 |
files | src/share/vm/gc/g1/g1ParScanThreadState.cpp src/share/vm/gc/g1/g1ParScanThreadState.hpp src/share/vm/gc/shared/gcTrace.cpp src/share/vm/gc/shared/gcTrace.hpp |
diffstat | 4 files changed, 29 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/gc/g1/g1ParScanThreadState.cpp Wed Sep 02 09:14:04 2015 +0200 +++ b/src/share/vm/gc/g1/g1ParScanThreadState.cpp Wed Sep 02 09:51:05 2015 +0200 @@ -186,6 +186,21 @@ return dest(state); } +void G1ParScanThreadState::report_promotion_event(InCSetState const dest_state, + oop const old, size_t word_sz, uint age, + HeapWord * const obj_ptr, + const AllocationContext_t context) const { + G1PLAB* alloc_buf = _plab_allocator->alloc_buffer(dest_state, context); + if (alloc_buf->contains(obj_ptr)) { + _g1h->_gc_tracer_stw->report_promotion_in_new_plab_event(old->klass(), word_sz, age, + dest_state.value() == InCSetState::Old, + alloc_buf->word_sz()); + } else { + _g1h->_gc_tracer_stw->report_promotion_outside_plab_event(old->klass(), word_sz, age, + dest_state.value() == InCSetState::Old); + } +} + oop G1ParScanThreadState::copy_to_survivor_space(InCSetState const state, oop const old, markOop const old_mark) { @@ -219,6 +234,10 @@ return handle_evacuation_failure_par(old, old_mark); } } + if (_g1h->_gc_tracer_stw->should_report_promotion_events()) { + // The events are checked individually as part of the actual commit + report_promotion_event(dest_state, old, word_sz, age, obj_ptr, context); + } } assert(obj_ptr != NULL, "when we get here, allocation should have succeeded");
--- a/src/share/vm/gc/g1/g1ParScanThreadState.hpp Wed Sep 02 09:14:04 2015 +0200 +++ b/src/share/vm/gc/g1/g1ParScanThreadState.hpp Wed Sep 02 09:51:05 2015 +0200 @@ -173,6 +173,10 @@ bool previous_plab_refill_failed); inline InCSetState next_state(InCSetState const state, markOop const m, uint& age); + + void report_promotion_event(InCSetState const dest_state, + oop const old, size_t word_sz, uint age, + HeapWord * const obj_ptr, const AllocationContext_t context) const; public: oop copy_to_survivor_space(InCSetState const state, oop const obj, markOop const old_mark);
--- a/src/share/vm/gc/shared/gcTrace.cpp Wed Sep 02 09:14:04 2015 +0200 +++ b/src/share/vm/gc/shared/gcTrace.cpp Wed Sep 02 09:51:05 2015 +0200 @@ -173,6 +173,11 @@ _tenuring_threshold = tenuring_threshold; } +bool YoungGCTracer::should_report_promotion_events() const { + return should_report_promotion_in_new_plab_event() || + should_report_promotion_outside_plab_event(); +} + bool YoungGCTracer::should_report_promotion_in_new_plab_event() const { return should_send_promotion_in_new_plab_event(); }
--- a/src/share/vm/gc/shared/gcTrace.hpp Wed Sep 02 09:14:04 2015 +0200 +++ b/src/share/vm/gc/shared/gcTrace.hpp Wed Sep 02 09:51:05 2015 +0200 @@ -172,6 +172,7 @@ * * plab_size is the size of the newly allocated PLAB in bytes. */ + bool should_report_promotion_events() const; bool should_report_promotion_in_new_plab_event() const; bool should_report_promotion_outside_plab_event() const; void report_promotion_in_new_plab_event(Klass* klass, size_t obj_size,