Skip to content

Commit 2ba5ed5

Browse files
committed
8240749: Shenandoah: refactor ShenandoahUtils
Reviewed-by: rkennke
1 parent f09cda2 commit 2ba5ed5

File tree

7 files changed

+41
-33
lines changed

7 files changed

+41
-33
lines changed

src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -311,17 +311,14 @@ class ShenandoahUpdateThreadRootsTask : public AbstractGangTask {
311311
private:
312312
ShenandoahThreadRoots _thread_roots;
313313
ShenandoahPhaseTimings::Phase _phase;
314+
ShenandoahGCWorkerPhase _worker_phase;
314315
public:
315316
ShenandoahUpdateThreadRootsTask(bool is_par, ShenandoahPhaseTimings::Phase phase) :
316317
AbstractGangTask("Shenandoah Update Thread Roots"),
317318
_thread_roots(is_par),
318-
_phase(phase) {
319-
ShenandoahHeap::heap()->phase_timings()->record_workers_start(_phase);
320-
}
319+
_phase(phase),
320+
_worker_phase(phase) {}
321321

322-
~ShenandoahUpdateThreadRootsTask() {
323-
ShenandoahHeap::heap()->phase_timings()->record_workers_end(_phase);
324-
}
325322
void work(uint worker_id) {
326323
ShenandoahUpdateRefsClosure cl;
327324
_thread_roots.oops_do(&cl, NULL, worker_id);

src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2176,9 +2176,10 @@ void ShenandoahHeap::stw_process_weak_roots(bool full_gc) {
21762176
ShenandoahPhaseTimings::Phase timing_phase = full_gc ?
21772177
ShenandoahPhaseTimings::full_gc_purge_par :
21782178
ShenandoahPhaseTimings::purge_par;
2179-
// Cleanup weak roots
21802179
ShenandoahGCPhase phase(timing_phase);
2181-
phase_timings()->record_workers_start(timing_phase);
2180+
ShenandoahGCWorkerPhase worker_phase(timing_phase);
2181+
2182+
// Cleanup weak roots
21822183
if (has_forwarded_objects()) {
21832184
ShenandoahForwardedIsAliveClosure is_alive;
21842185
ShenandoahUpdateRefsClosure keep_alive;
@@ -2197,7 +2198,6 @@ void ShenandoahHeap::stw_process_weak_roots(bool full_gc) {
21972198
#endif
21982199
_workers->run_task(&cleaning_task);
21992200
}
2200-
phase_timings()->record_workers_end(timing_phase);
22012201
}
22022202

22032203
void ShenandoahHeap::parallel_cleaning(bool full_gc) {

src/hotspot/share/gc/shenandoah/shenandoahPhaseTimings.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,8 @@ class ShenandoahPhaseTimings : public CHeapObj<mtGC> {
174174

175175
enum Phase {
176176
SHENANDOAH_GC_PHASE_DO(GC_PHASE_DECLARE_ENUM)
177-
_num_phases
177+
_num_phases,
178+
_invalid_phase = _num_phases
178179
};
179180

180181
enum GCParPhases {

src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.cpp

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -174,14 +174,9 @@ void ShenandoahConcurrentStringDedupRoots::oops_do(BoolObjectClosure* is_alive,
174174

175175
ShenandoahRootProcessor::ShenandoahRootProcessor(ShenandoahPhaseTimings::Phase phase) :
176176
_heap(ShenandoahHeap::heap()),
177-
_phase(phase) {
177+
_phase(phase),
178+
_worker_phase(phase) {
178179
assert(SafepointSynchronize::is_at_safepoint(), "Must at safepoint");
179-
_heap->phase_timings()->record_workers_start(_phase);
180-
}
181-
182-
ShenandoahRootProcessor::~ShenandoahRootProcessor() {
183-
assert(SafepointSynchronize::is_at_safepoint(), "Must at safepoint");
184-
_heap->phase_timings()->record_workers_end(_phase);
185180
}
186181

187182
ShenandoahRootEvacuator::ShenandoahRootEvacuator(uint n_workers,

src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "gc/shenandoah/shenandoahHeap.hpp"
3232
#include "gc/shenandoah/shenandoahPhaseTimings.hpp"
3333
#include "gc/shenandoah/shenandoahSharedVariables.hpp"
34+
#include "gc/shenandoah/shenandoahUtils.hpp"
3435
#include "memory/iterator.hpp"
3536

3637
class ShenandoahSerialRoot {
@@ -221,9 +222,9 @@ class ShenandoahRootProcessor : public StackObj {
221222
private:
222223
ShenandoahHeap* const _heap;
223224
const ShenandoahPhaseTimings::Phase _phase;
225+
const ShenandoahGCWorkerPhase _worker_phase;
224226
public:
225227
ShenandoahRootProcessor(ShenandoahPhaseTimings::Phase phase);
226-
~ShenandoahRootProcessor();
227228

228229
ShenandoahHeap* heap() const { return _heap; }
229230
};

src/hotspot/share/gc/shenandoah/shenandoahUtils.cpp

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,13 @@
3737
#include "gc/shenandoah/shenandoahUtils.hpp"
3838
#include "utilities/debug.hpp"
3939

40-
ShenandoahPhaseTimings::Phase ShenandoahGCPhase::_current_phase = ShenandoahGCPhase::_invalid_phase;
40+
ShenandoahPhaseTimings::Phase ShenandoahGCPhase::_current_phase = ShenandoahPhaseTimings::_invalid_phase;
4141

4242
ShenandoahGCSession::ShenandoahGCSession(GCCause::Cause cause) :
4343
_heap(ShenandoahHeap::heap()),
4444
_timer(_heap->gc_timer()),
4545
_tracer(_heap->tracer()) {
46-
assert(!ShenandoahGCPhase::is_valid_phase(ShenandoahGCPhase::current_phase()),
47-
"No current GC phase");
46+
assert(!ShenandoahGCPhase::is_current_phase_valid(), "No current GC phase");
4847

4948
_heap->set_gc_cause(cause);
5049
_timer->register_gc_start();
@@ -70,8 +69,7 @@ ShenandoahGCSession::~ShenandoahGCSession() {
7069
_timer->register_gc_end();
7170
_heap->trace_heap(GCWhen::AfterGC, _tracer);
7271
_tracer->report_gc_end(_timer->gc_end(), _timer->time_partitions());
73-
assert(!ShenandoahGCPhase::is_valid_phase(ShenandoahGCPhase::current_phase()),
74-
"No current GC phase");
72+
assert(!ShenandoahGCPhase::is_current_phase_valid(), "No current GC phase");
7573
_heap->set_gc_cause(GCCause::_no_gc);
7674
}
7775

@@ -101,8 +99,8 @@ ShenandoahGCPauseMark::~ShenandoahGCPauseMark() {
10199
}
102100

103101
ShenandoahGCPhase::ShenandoahGCPhase(const ShenandoahPhaseTimings::Phase phase) :
104-
_heap(ShenandoahHeap::heap()), _phase(phase) {
105-
assert(!Thread::current()->is_Worker_thread() &&
102+
_timings(ShenandoahHeap::heap()->phase_timings()), _phase(phase) {
103+
assert(!Thread::current()->is_Worker_thread() &&
106104
(Thread::current()->is_VM_thread() ||
107105
Thread::current()->is_ConcurrentGC_thread()),
108106
"Must be set by these threads");
@@ -112,12 +110,12 @@ ShenandoahGCPhase::ShenandoahGCPhase(const ShenandoahPhaseTimings::Phase phase)
112110
}
113111

114112
ShenandoahGCPhase::~ShenandoahGCPhase() {
115-
_heap->phase_timings()->record_phase_time(_phase, os::elapsedTime() - _start);
113+
_timings->record_phase_time(_phase, os::elapsedTime() - _start);
116114
_current_phase = _parent_phase;
117115
}
118116

119-
bool ShenandoahGCPhase::is_valid_phase(ShenandoahPhaseTimings::Phase phase) {
120-
return phase >= 0 && phase < ShenandoahPhaseTimings::_num_phases;
117+
bool ShenandoahGCPhase::is_current_phase_valid() {
118+
return _current_phase < ShenandoahPhaseTimings::_num_phases;
121119
}
122120

123121
bool ShenandoahGCPhase::is_root_work_phase() {
@@ -137,6 +135,15 @@ bool ShenandoahGCPhase::is_root_work_phase() {
137135
}
138136
}
139137

138+
ShenandoahGCWorkerPhase::ShenandoahGCWorkerPhase(const ShenandoahPhaseTimings::Phase phase) :
139+
_timings(ShenandoahHeap::heap()->phase_timings()), _phase(phase) {
140+
_timings->record_workers_start(_phase);
141+
}
142+
143+
ShenandoahGCWorkerPhase::~ShenandoahGCWorkerPhase() {
144+
_timings->record_workers_end(_phase);
145+
}
146+
140147
ShenandoahWorkerSession::ShenandoahWorkerSession(uint worker_id) : _worker_id(worker_id) {
141148
Thread* thr = Thread::current();
142149
assert(ShenandoahThreadLocalData::worker_id(thr) == ShenandoahThreadLocalData::INVALID_WORKER_ID, "Already set");

src/hotspot/share/gc/shenandoah/shenandoahUtils.hpp

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,9 @@ class ShenandoahGCSession : public StackObj {
5656

5757
class ShenandoahGCPhase : public StackObj {
5858
private:
59-
static const ShenandoahPhaseTimings::Phase _invalid_phase = ShenandoahPhaseTimings::_num_phases;
60-
static ShenandoahPhaseTimings::Phase _current_phase;
59+
static ShenandoahPhaseTimings::Phase _current_phase;
6160

62-
ShenandoahHeap* const _heap;
61+
ShenandoahPhaseTimings* const _timings;
6362
const ShenandoahPhaseTimings::Phase _phase;
6463
ShenandoahPhaseTimings::Phase _parent_phase;
6564
double _start;
@@ -70,11 +69,19 @@ class ShenandoahGCPhase : public StackObj {
7069

7170
static ShenandoahPhaseTimings::Phase current_phase() { return _current_phase; }
7271

73-
static bool is_valid_phase(ShenandoahPhaseTimings::Phase phase);
74-
static bool is_current_phase_valid() { return is_valid_phase(current_phase()); }
72+
static bool is_current_phase_valid();
7573
static bool is_root_work_phase();
7674
};
7775

76+
class ShenandoahGCWorkerPhase : public StackObj {
77+
private:
78+
ShenandoahPhaseTimings* const _timings;
79+
const ShenandoahPhaseTimings::Phase _phase;
80+
public:
81+
ShenandoahGCWorkerPhase(ShenandoahPhaseTimings::Phase phase);
82+
~ShenandoahGCWorkerPhase();
83+
};
84+
7885
// Aggregates all the things that should happen before/after the pause.
7986
class ShenandoahGCPauseMark : public StackObj {
8087
private:

0 commit comments

Comments
 (0)