mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-26 22:34:27 +02:00
8244180: Shenandoah: carry Phase to ShWorkerTimingsTracker explicitly
Reviewed-by: zgu
This commit is contained in:
parent
1e1c724c0d
commit
38e6f3665c
13 changed files with 177 additions and 116 deletions
|
@ -42,13 +42,14 @@
|
|||
#include "runtime/thread.hpp"
|
||||
#include "services/management.hpp"
|
||||
|
||||
ShenandoahSerialRoot::ShenandoahSerialRoot(ShenandoahSerialRoot::OopsDo oops_do, ShenandoahPhaseTimings::ParPhase par_phase) :
|
||||
_oops_do(oops_do), _par_phase(par_phase) {
|
||||
ShenandoahSerialRoot::ShenandoahSerialRoot(ShenandoahSerialRoot::OopsDo oops_do,
|
||||
ShenandoahPhaseTimings::Phase phase, ShenandoahPhaseTimings::ParPhase par_phase) :
|
||||
_oops_do(oops_do), _phase(phase), _par_phase(par_phase) {
|
||||
}
|
||||
|
||||
void ShenandoahSerialRoot::oops_do(OopClosure* cl, uint worker_id) {
|
||||
if (_claimed.try_set()) {
|
||||
ShenandoahWorkerTimingsTracker timer(_par_phase, worker_id);
|
||||
ShenandoahWorkerTimingsTracker timer(_phase, _par_phase, worker_id);
|
||||
_oops_do(cl);
|
||||
}
|
||||
}
|
||||
|
@ -58,12 +59,12 @@ static void system_dictionary_oops_do(OopClosure* cl) {
|
|||
SystemDictionary::oops_do(cl, false);
|
||||
}
|
||||
|
||||
ShenandoahSerialRoots::ShenandoahSerialRoots() :
|
||||
_universe_root(&Universe::oops_do, ShenandoahPhaseTimings::UniverseRoots),
|
||||
_object_synchronizer_root(&ObjectSynchronizer::oops_do, ShenandoahPhaseTimings::ObjectSynchronizerRoots),
|
||||
_management_root(&Management::oops_do, ShenandoahPhaseTimings::ManagementRoots),
|
||||
_system_dictionary_root(&system_dictionary_oops_do, ShenandoahPhaseTimings::SystemDictionaryRoots),
|
||||
_jvmti_root(&JvmtiExport::oops_do, ShenandoahPhaseTimings::JVMTIRoots) {
|
||||
ShenandoahSerialRoots::ShenandoahSerialRoots(ShenandoahPhaseTimings::Phase phase) :
|
||||
_universe_root(&Universe::oops_do, phase, ShenandoahPhaseTimings::UniverseRoots),
|
||||
_object_synchronizer_root(&ObjectSynchronizer::oops_do, phase, ShenandoahPhaseTimings::ObjectSynchronizerRoots),
|
||||
_management_root(&Management::oops_do, phase, ShenandoahPhaseTimings::ManagementRoots),
|
||||
_system_dictionary_root(&system_dictionary_oops_do, phase, ShenandoahPhaseTimings::SystemDictionaryRoots),
|
||||
_jvmti_root(&JvmtiExport::oops_do, phase, ShenandoahPhaseTimings::JVMTIRoots) {
|
||||
}
|
||||
|
||||
void ShenandoahSerialRoots::oops_do(OopClosure* cl, uint worker_id) {
|
||||
|
@ -74,26 +75,27 @@ void ShenandoahSerialRoots::oops_do(OopClosure* cl, uint worker_id) {
|
|||
_jvmti_root.oops_do(cl, worker_id);
|
||||
}
|
||||
|
||||
ShenandoahWeakSerialRoot::ShenandoahWeakSerialRoot(ShenandoahWeakSerialRoot::WeakOopsDo weak_oops_do, ShenandoahPhaseTimings::ParPhase par_phase) :
|
||||
_weak_oops_do(weak_oops_do), _par_phase(par_phase) {
|
||||
ShenandoahWeakSerialRoot::ShenandoahWeakSerialRoot(ShenandoahWeakSerialRoot::WeakOopsDo weak_oops_do,
|
||||
ShenandoahPhaseTimings::Phase phase, ShenandoahPhaseTimings::ParPhase par_phase) :
|
||||
_weak_oops_do(weak_oops_do), _phase(phase), _par_phase(par_phase) {
|
||||
}
|
||||
|
||||
void ShenandoahWeakSerialRoot::weak_oops_do(BoolObjectClosure* is_alive, OopClosure* keep_alive, uint worker_id) {
|
||||
if (_claimed.try_set()) {
|
||||
ShenandoahWorkerTimingsTracker timer(_par_phase, worker_id);
|
||||
ShenandoahWorkerTimingsTracker timer(_phase, _par_phase, worker_id);
|
||||
_weak_oops_do(is_alive, keep_alive);
|
||||
}
|
||||
}
|
||||
|
||||
#if INCLUDE_JVMTI
|
||||
ShenandoahJVMTIWeakRoot::ShenandoahJVMTIWeakRoot() :
|
||||
ShenandoahWeakSerialRoot(&JvmtiExport::weak_oops_do, ShenandoahPhaseTimings::JVMTIWeakRoots) {
|
||||
ShenandoahJVMTIWeakRoot::ShenandoahJVMTIWeakRoot(ShenandoahPhaseTimings::Phase phase) :
|
||||
ShenandoahWeakSerialRoot(&JvmtiExport::weak_oops_do, phase, ShenandoahPhaseTimings::JVMTIWeakRoots) {
|
||||
}
|
||||
#endif // INCLUDE_JVMTI
|
||||
|
||||
#if INCLUDE_JFR
|
||||
ShenandoahJFRWeakRoot::ShenandoahJFRWeakRoot() :
|
||||
ShenandoahWeakSerialRoot(&Jfr::weak_oops_do, ShenandoahPhaseTimings::JFRWeakRoots) {
|
||||
ShenandoahJFRWeakRoot::ShenandoahJFRWeakRoot(ShenandoahPhaseTimings::Phase phase) :
|
||||
ShenandoahWeakSerialRoot(&Jfr::weak_oops_do, phase, ShenandoahPhaseTimings::JFRWeakRoots) {
|
||||
}
|
||||
#endif // INCLUDE_JFR
|
||||
|
||||
|
@ -107,18 +109,19 @@ void ShenandoahSerialWeakRoots::weak_oops_do(OopClosure* cl, uint worker_id) {
|
|||
weak_oops_do(&always_true, cl, worker_id);
|
||||
}
|
||||
|
||||
ShenandoahThreadRoots::ShenandoahThreadRoots(bool is_par) : _is_par(is_par) {
|
||||
ShenandoahThreadRoots::ShenandoahThreadRoots(ShenandoahPhaseTimings::Phase phase, bool is_par) :
|
||||
_phase(phase), _is_par(is_par) {
|
||||
Threads::change_thread_claim_token();
|
||||
}
|
||||
|
||||
void ShenandoahThreadRoots::oops_do(OopClosure* oops_cl, CodeBlobClosure* code_cl, uint worker_id) {
|
||||
ShenandoahWorkerTimingsTracker timer(ShenandoahPhaseTimings::ThreadRoots, worker_id);
|
||||
ShenandoahWorkerTimingsTracker timer(_phase, ShenandoahPhaseTimings::ThreadRoots, worker_id);
|
||||
ResourceMark rm;
|
||||
Threads::possibly_parallel_oops_do(_is_par, oops_cl, code_cl);
|
||||
}
|
||||
|
||||
void ShenandoahThreadRoots::threads_do(ThreadClosure* tc, uint worker_id) {
|
||||
ShenandoahWorkerTimingsTracker timer(ShenandoahPhaseTimings::ThreadRoots, worker_id);
|
||||
ShenandoahWorkerTimingsTracker timer(_phase, ShenandoahPhaseTimings::ThreadRoots, worker_id);
|
||||
ResourceMark rm;
|
||||
Threads::possibly_parallel_threads_do(_is_par, tc);
|
||||
}
|
||||
|
@ -127,7 +130,7 @@ ShenandoahThreadRoots::~ShenandoahThreadRoots() {
|
|||
Threads::assert_all_threads_claimed();
|
||||
}
|
||||
|
||||
ShenandoahStringDedupRoots::ShenandoahStringDedupRoots() {
|
||||
ShenandoahStringDedupRoots::ShenandoahStringDedupRoots(ShenandoahPhaseTimings::Phase phase) : _phase(phase) {
|
||||
if (ShenandoahStringDedup::is_enabled()) {
|
||||
StringDedup::gc_prologue(false);
|
||||
}
|
||||
|
@ -141,7 +144,7 @@ ShenandoahStringDedupRoots::~ShenandoahStringDedupRoots() {
|
|||
|
||||
void ShenandoahStringDedupRoots::oops_do(BoolObjectClosure* is_alive, OopClosure* keep_alive, uint worker_id) {
|
||||
if (ShenandoahStringDedup::is_enabled()) {
|
||||
ShenandoahStringDedup::parallel_oops_do(is_alive, keep_alive, worker_id);
|
||||
ShenandoahStringDedup::parallel_oops_do(_phase, is_alive, keep_alive, worker_id);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -184,7 +187,14 @@ ShenandoahRootEvacuator::ShenandoahRootEvacuator(uint n_workers,
|
|||
bool stw_roots_processing,
|
||||
bool stw_class_unloading) :
|
||||
ShenandoahRootProcessor(phase),
|
||||
_thread_roots(n_workers > 1),
|
||||
_serial_roots(phase),
|
||||
_vm_roots(phase),
|
||||
_cld_roots(phase),
|
||||
_thread_roots(phase, n_workers > 1),
|
||||
_serial_weak_roots(phase),
|
||||
_weak_roots(phase),
|
||||
_dedup_roots(phase),
|
||||
_code_roots(phase),
|
||||
_stw_roots_processing(stw_roots_processing),
|
||||
_stw_class_unloading(stw_class_unloading) {
|
||||
}
|
||||
|
@ -217,12 +227,26 @@ void ShenandoahRootEvacuator::roots_do(uint worker_id, OopClosure* oops) {
|
|||
|
||||
ShenandoahRootUpdater::ShenandoahRootUpdater(uint n_workers, ShenandoahPhaseTimings::Phase phase) :
|
||||
ShenandoahRootProcessor(phase),
|
||||
_thread_roots(n_workers > 1) {
|
||||
_serial_roots(phase),
|
||||
_vm_roots(phase),
|
||||
_cld_roots(phase),
|
||||
_thread_roots(phase, n_workers > 1),
|
||||
_serial_weak_roots(phase),
|
||||
_weak_roots(phase),
|
||||
_dedup_roots(phase),
|
||||
_code_roots(phase) {
|
||||
}
|
||||
|
||||
ShenandoahRootAdjuster::ShenandoahRootAdjuster(uint n_workers, ShenandoahPhaseTimings::Phase phase) :
|
||||
ShenandoahRootProcessor(phase),
|
||||
_thread_roots(n_workers > 1) {
|
||||
_serial_roots(phase),
|
||||
_vm_roots(phase),
|
||||
_cld_roots(phase),
|
||||
_thread_roots(phase, n_workers > 1),
|
||||
_serial_weak_roots(phase),
|
||||
_weak_roots(phase),
|
||||
_dedup_roots(phase),
|
||||
_code_roots(phase) {
|
||||
assert(ShenandoahHeap::heap()->is_full_gc_in_progress(), "Full GC only");
|
||||
}
|
||||
|
||||
|
@ -247,9 +271,15 @@ void ShenandoahRootAdjuster::roots_do(uint worker_id, OopClosure* oops) {
|
|||
_dedup_roots.oops_do(&always_true, oops, worker_id);
|
||||
}
|
||||
|
||||
ShenandoahHeapIterationRootScanner::ShenandoahHeapIterationRootScanner() :
|
||||
ShenandoahHeapIterationRootScanner::ShenandoahHeapIterationRootScanner() :
|
||||
ShenandoahRootProcessor(ShenandoahPhaseTimings::heap_iteration_roots),
|
||||
_thread_roots(false /*is par*/) {
|
||||
_serial_roots(ShenandoahPhaseTimings::heap_iteration_roots),
|
||||
_thread_roots(ShenandoahPhaseTimings::heap_iteration_roots, false /*is par*/),
|
||||
_vm_roots(ShenandoahPhaseTimings::heap_iteration_roots),
|
||||
_cld_roots(ShenandoahPhaseTimings::heap_iteration_roots),
|
||||
_serial_weak_roots(ShenandoahPhaseTimings::heap_iteration_roots),
|
||||
_weak_roots(ShenandoahPhaseTimings::heap_iteration_roots),
|
||||
_code_roots(ShenandoahPhaseTimings::heap_iteration_roots) {
|
||||
}
|
||||
|
||||
void ShenandoahHeapIterationRootScanner::roots_do(OopClosure* oops) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue