< prev index next >

src/hotspot/share/gc/g1/g1ConcurrentRefine.cpp

Print this page
rev 52689 : [mq]: tschatzl_review


 369 
 370   assert_zone_constraints_gyr(_green_zone, _yellow_zone, _red_zone);
 371   LOG_ZONES("Updated Refinement Zones: "
 372             "green: " SIZE_FORMAT ", "
 373             "yellow: " SIZE_FORMAT ", "
 374             "red: " SIZE_FORMAT,
 375             _green_zone, _yellow_zone, _red_zone);
 376 }
 377 
 378 void G1ConcurrentRefine::adjust(double update_rs_time,
 379                                 size_t update_rs_processed_buffers,
 380                                 double goal_ms) {
 381   DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
 382 
 383   if (G1UseAdaptiveConcRefinement) {
 384     update_zones(update_rs_time, update_rs_processed_buffers, goal_ms);
 385 
 386     // Change the barrier params
 387     if (max_num_threads() == 0) {
 388       // Disable dcqs notification when there are no threads to notify.
 389       dcqs.set_process_completed_buffers_threshold(DirtyCardQueueSet::_process_completed_buffers_threshold_never);
 390     } else {
 391       // Worker 0 is the primary; wakeup is via dcqs notification.
 392       STATIC_ASSERT(max_yellow_zone <= INT_MAX);
 393       size_t activate = activation_threshold(0);
 394       dcqs.set_process_completed_buffers_threshold(activate);
 395     }
 396     dcqs.set_max_completed_buffers(red_zone());
 397   }
 398 
 399   size_t curr_queue_size = dcqs.completed_buffers_num();
 400   if ((dcqs.max_completed_buffers() > 0) &&
 401       (curr_queue_size >= yellow_zone())) {
 402     dcqs.set_completed_buffers_padding(curr_queue_size);
 403   } else {
 404     dcqs.set_completed_buffers_padding(0);
 405   }
 406   dcqs.notify_if_necessary();
 407 }
 408 
 409 size_t G1ConcurrentRefine::activation_threshold(uint worker_id) const {




 369 
 370   assert_zone_constraints_gyr(_green_zone, _yellow_zone, _red_zone);
 371   LOG_ZONES("Updated Refinement Zones: "
 372             "green: " SIZE_FORMAT ", "
 373             "yellow: " SIZE_FORMAT ", "
 374             "red: " SIZE_FORMAT,
 375             _green_zone, _yellow_zone, _red_zone);
 376 }
 377 
 378 void G1ConcurrentRefine::adjust(double update_rs_time,
 379                                 size_t update_rs_processed_buffers,
 380                                 double goal_ms) {
 381   DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
 382 
 383   if (G1UseAdaptiveConcRefinement) {
 384     update_zones(update_rs_time, update_rs_processed_buffers, goal_ms);
 385 
 386     // Change the barrier params
 387     if (max_num_threads() == 0) {
 388       // Disable dcqs notification when there are no threads to notify.
 389       dcqs.set_process_completed_buffers_threshold(DirtyCardQueueSet::ProcessCompletedBuffersThresholdNever);
 390     } else {
 391       // Worker 0 is the primary; wakeup is via dcqs notification.
 392       STATIC_ASSERT(max_yellow_zone <= INT_MAX);
 393       size_t activate = activation_threshold(0);
 394       dcqs.set_process_completed_buffers_threshold(activate);
 395     }
 396     dcqs.set_max_completed_buffers(red_zone());
 397   }
 398 
 399   size_t curr_queue_size = dcqs.completed_buffers_num();
 400   if ((dcqs.max_completed_buffers() > 0) &&
 401       (curr_queue_size >= yellow_zone())) {
 402     dcqs.set_completed_buffers_padding(curr_queue_size);
 403   } else {
 404     dcqs.set_completed_buffers_padding(0);
 405   }
 406   dcqs.notify_if_necessary();
 407 }
 408 
 409 size_t G1ConcurrentRefine::activation_threshold(uint worker_id) const {


< prev index next >