8246612: Shenandoah: add timing tracking to ShenandoahStringDedupRoots

Reviewed-by: shade
This commit is contained in:
Zhengyu Gu 2020-06-04 15:01:04 -04:00
parent 9cadf1a004
commit 1b59097077
3 changed files with 18 additions and 5 deletions

View file

@ -1663,7 +1663,8 @@ public:
ShenandoahConcurrentRootsEvacUpdateTask(ShenandoahPhaseTimings::Phase phase) : ShenandoahConcurrentRootsEvacUpdateTask(ShenandoahPhaseTimings::Phase phase) :
AbstractGangTask("Shenandoah Evacuate/Update Concurrent Strong Roots Task"), AbstractGangTask("Shenandoah Evacuate/Update Concurrent Strong Roots Task"),
_vm_roots(phase), _vm_roots(phase),
_cld_roots(phase, ShenandoahHeap::heap()->workers()->active_workers()) {} _cld_roots(phase, ShenandoahHeap::heap()->workers()->active_workers()),
_dedup_roots(phase) {}
void work(uint worker_id) { void work(uint worker_id) {
ShenandoahConcurrentWorkerSession worker_session(worker_id); ShenandoahConcurrentWorkerSession worker_session(worker_id);

View file

@ -149,7 +149,8 @@ void ShenandoahStringDedupRoots::oops_do(BoolObjectClosure* is_alive, OopClosure
} }
} }
ShenandoahConcurrentStringDedupRoots::ShenandoahConcurrentStringDedupRoots() { ShenandoahConcurrentStringDedupRoots::ShenandoahConcurrentStringDedupRoots(ShenandoahPhaseTimings::Phase phase) :
_phase(phase) {
if (ShenandoahStringDedup::is_enabled()) { if (ShenandoahStringDedup::is_enabled()) {
StringDedupTable_lock->lock_without_safepoint_check(); StringDedupTable_lock->lock_without_safepoint_check();
StringDedupQueue_lock->lock_without_safepoint_check(); StringDedupQueue_lock->lock_without_safepoint_check();
@ -171,9 +172,16 @@ void ShenandoahConcurrentStringDedupRoots::oops_do(BoolObjectClosure* is_alive,
assert_locked_or_safepoint_weak(StringDedupTable_lock); assert_locked_or_safepoint_weak(StringDedupTable_lock);
StringDedupUnlinkOrOopsDoClosure sd_cl(is_alive, keep_alive); StringDedupUnlinkOrOopsDoClosure sd_cl(is_alive, keep_alive);
{
ShenandoahWorkerTimingsTracker x(_phase, ShenandoahPhaseTimings::StringDedupQueueRoots, worker_id);
StringDedupQueue::unlink_or_oops_do(&sd_cl); StringDedupQueue::unlink_or_oops_do(&sd_cl);
}
{
ShenandoahWorkerTimingsTracker x(_phase, ShenandoahPhaseTimings::StringDedupTableRoots, worker_id);
StringDedupTable::unlink_or_oops_do(&sd_cl, worker_id); StringDedupTable::unlink_or_oops_do(&sd_cl, worker_id);
} }
}
} }
ShenandoahCodeCacheRoots::ShenandoahCodeCacheRoots(ShenandoahPhaseTimings::Phase phase) : _phase(phase) { ShenandoahCodeCacheRoots::ShenandoahCodeCacheRoots(ShenandoahPhaseTimings::Phase phase) : _phase(phase) {
@ -360,6 +368,7 @@ ShenandoahHeapIterationRootScanner::ShenandoahHeapIterationRootScanner() :
_cld_roots(ShenandoahPhaseTimings::heap_iteration_roots, 1), _cld_roots(ShenandoahPhaseTimings::heap_iteration_roots, 1),
_serial_weak_roots(ShenandoahPhaseTimings::heap_iteration_roots), _serial_weak_roots(ShenandoahPhaseTimings::heap_iteration_roots),
_weak_roots(ShenandoahPhaseTimings::heap_iteration_roots), _weak_roots(ShenandoahPhaseTimings::heap_iteration_roots),
_dedup_roots(ShenandoahPhaseTimings::heap_iteration_roots),
_code_roots(ShenandoahPhaseTimings::heap_iteration_roots) { _code_roots(ShenandoahPhaseTimings::heap_iteration_roots) {
} }

View file

@ -205,8 +205,11 @@ public:
}; };
class ShenandoahConcurrentStringDedupRoots { class ShenandoahConcurrentStringDedupRoots {
private:
ShenandoahPhaseTimings::Phase _phase;
public: public:
ShenandoahConcurrentStringDedupRoots(); ShenandoahConcurrentStringDedupRoots(ShenandoahPhaseTimings::Phase phase);
~ShenandoahConcurrentStringDedupRoots(); ~ShenandoahConcurrentStringDedupRoots();
void oops_do(BoolObjectClosure* is_alive, OopClosure* keep_alive, uint worker_id); void oops_do(BoolObjectClosure* is_alive, OopClosure* keep_alive, uint worker_id);