# HG changeset patch # User sfriberg # Date 1441180265 -7200 # Node ID 94b68bbd87b5251c22d94f251a2f2825941ee83e # Parent 2cad024257e963dbadab2091a87009d5f2f39ad4 8066443: Add G1 support for promotion event Reviewed-by: tschatzl diff -r 2cad024257e9 -r 94b68bbd87b5 src/share/vm/gc/g1/g1ParScanThreadState.cpp --- 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"); diff -r 2cad024257e9 -r 94b68bbd87b5 src/share/vm/gc/g1/g1ParScanThreadState.hpp --- 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); diff -r 2cad024257e9 -r 94b68bbd87b5 src/share/vm/gc/shared/gcTrace.cpp --- 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(); } diff -r 2cad024257e9 -r 94b68bbd87b5 src/share/vm/gc/shared/gcTrace.hpp --- 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,