< prev index next >

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

Print this page
rev 59956 : 8247819: G1: Process strong OopStorage entries in parallel
Reviewed-by:
Contributed-by: Erik Osterlund <erik.osterlund@oracle.com>, Stefan Karlsson <stefan.karlsson@oracle.com>, Thomas Schatzl <thomas.schatzl@oracle.com>


  52 ShenandoahPhaseTimings::ShenandoahPhaseTimings(uint max_workers) :
  53   _max_workers(max_workers) {
  54   assert(_max_workers > 0, "Must have some GC threads");
  55 
  56   // Initialize everything to sane defaults
  57   for (uint i = 0; i < _num_phases; i++) {
  58 #define SHENANDOAH_WORKER_DATA_NULL(type, title) \
  59     _worker_data[i] = NULL;
  60     SHENANDOAH_PAR_PHASE_DO(,, SHENANDOAH_WORKER_DATA_NULL)
  61 #undef SHENANDOAH_WORKER_DATA_NULL
  62     _cycle_data[i] = uninitialized();
  63   }
  64 
  65   // Then punch in the worker-related data.
  66   // Every worker phase get a bunch of internal objects, except
  67   // the very first slot, which is "<total>" and is not populated.
  68   for (uint i = 0; i < _num_phases; i++) {
  69     if (is_worker_phase(Phase(i))) {
  70       int c = 0;
  71 #define SHENANDOAH_WORKER_DATA_INIT(type, title) \
  72       if (c++ != 0) _worker_data[i + c] = new ShenandoahWorkerData(title, _max_workers);
  73       SHENANDOAH_PAR_PHASE_DO(,, SHENANDOAH_WORKER_DATA_INIT)
  74 #undef SHENANDOAH_WORKER_DATA_INIT
  75     }
  76   }
  77 
  78   _policy = ShenandoahHeap::heap()->shenandoah_policy();
  79   assert(_policy != NULL, "Can not be NULL");
  80 }
  81 
  82 ShenandoahPhaseTimings::Phase ShenandoahPhaseTimings::worker_par_phase(Phase phase, ParPhase par_phase) {
  83   assert(is_worker_phase(phase), "Phase should accept worker phase times: %s", phase_name(phase));
  84   Phase p = Phase(phase + 1 + par_phase);
  85   assert(p >= 0 && p < _num_phases, "Out of bound for: %s", phase_name(phase));
  86   return p;
  87 }
  88 
  89 ShenandoahWorkerData* ShenandoahPhaseTimings::worker_data(Phase phase, ParPhase par_phase) {
  90   Phase p = worker_par_phase(phase, par_phase);
  91   ShenandoahWorkerData* wd = _worker_data[p];
  92   assert(wd != NULL, "Counter initialized: %s", phase_name(p));




  52 ShenandoahPhaseTimings::ShenandoahPhaseTimings(uint max_workers) :
  53   _max_workers(max_workers) {
  54   assert(_max_workers > 0, "Must have some GC threads");
  55 
  56   // Initialize everything to sane defaults
  57   for (uint i = 0; i < _num_phases; i++) {
  58 #define SHENANDOAH_WORKER_DATA_NULL(type, title) \
  59     _worker_data[i] = NULL;
  60     SHENANDOAH_PAR_PHASE_DO(,, SHENANDOAH_WORKER_DATA_NULL)
  61 #undef SHENANDOAH_WORKER_DATA_NULL
  62     _cycle_data[i] = uninitialized();
  63   }
  64 
  65   // Then punch in the worker-related data.
  66   // Every worker phase get a bunch of internal objects, except
  67   // the very first slot, which is "<total>" and is not populated.
  68   for (uint i = 0; i < _num_phases; i++) {
  69     if (is_worker_phase(Phase(i))) {
  70       int c = 0;
  71 #define SHENANDOAH_WORKER_DATA_INIT(type, title) \
  72       if (c++ != 0) _worker_data[i + c] = new ShenandoahWorkerData(NULL, title, _max_workers);
  73       SHENANDOAH_PAR_PHASE_DO(,, SHENANDOAH_WORKER_DATA_INIT)
  74 #undef SHENANDOAH_WORKER_DATA_INIT
  75     }
  76   }
  77 
  78   _policy = ShenandoahHeap::heap()->shenandoah_policy();
  79   assert(_policy != NULL, "Can not be NULL");
  80 }
  81 
  82 ShenandoahPhaseTimings::Phase ShenandoahPhaseTimings::worker_par_phase(Phase phase, ParPhase par_phase) {
  83   assert(is_worker_phase(phase), "Phase should accept worker phase times: %s", phase_name(phase));
  84   Phase p = Phase(phase + 1 + par_phase);
  85   assert(p >= 0 && p < _num_phases, "Out of bound for: %s", phase_name(phase));
  86   return p;
  87 }
  88 
  89 ShenandoahWorkerData* ShenandoahPhaseTimings::worker_data(Phase phase, ParPhase par_phase) {
  90   Phase p = worker_par_phase(phase, par_phase);
  91   ShenandoahWorkerData* wd = _worker_data[p];
  92   assert(wd != NULL, "Counter initialized: %s", phase_name(p));


< prev index next >