< prev index next >

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

Print this page

        

@@ -125,55 +125,51 @@
   _used_after = _heap->used();
   _if_after = ShenandoahMetrics::internal_fragmentation();
   _ef_after = ShenandoahMetrics::external_fragmentation();
 }
 
-bool ShenandoahMetricsSnapshot::is_good_progress() {
-  // Under the critical threshold?
+void ShenandoahMetricsSnapshot::print() {
+  log_info(gc, ergo)("Used: before: " SIZE_FORMAT "M, after: " SIZE_FORMAT "M", _used_before/M, _used_after/M);
+  log_info(gc, ergo)("Internal frag: before: %.1f%%, after: %.1f%%", _if_before * 100, _if_after * 100);
+  log_info(gc, ergo)("External frag: before: %.1f%%, after: %.1f%%", _ef_before * 100, _ef_after * 100);
+}
+
+bool ShenandoahMetricsSnapshot::is_good_progress(const char *label) {
+  // Under the critical threshold? Declare failure.
   size_t free_actual   = _heap->free_set()->available();
   size_t free_expected = _heap->max_capacity() / 100 * ShenandoahCriticalFreeThreshold;
-  bool prog_free = free_actual >= free_expected;
-  log_info(gc, ergo)("%s progress for free space: " SIZE_FORMAT "%s, need " SIZE_FORMAT "%s",
-                     prog_free ? "Good" : "Bad",
-                     byte_size_in_proper_unit(free_actual),   proper_unit_for_byte_size(free_actual),
-                     byte_size_in_proper_unit(free_expected), proper_unit_for_byte_size(free_expected));
-  if (!prog_free) {
+  if (free_actual < free_expected) {
+    log_info(gc, ergo)("Not enough free space (" SIZE_FORMAT "M, need " SIZE_FORMAT "M) after %s",
+                       free_actual / M, free_expected / M, label);
     return false;
   }
 
-  // Freed up enough?
+  // Freed up enough? Good! Declare victory.
   size_t progress_actual   = (_used_before > _used_after) ? _used_before - _used_after : 0;
   size_t progress_expected = ShenandoahHeapRegion::region_size_bytes();
-  bool prog_used = progress_actual >= progress_expected;
-  log_info(gc, ergo)("%s progress for used space: " SIZE_FORMAT "%s, need " SIZE_FORMAT "%s",
-                     prog_used ? "Good" : "Bad",
-                     byte_size_in_proper_unit(progress_actual),   proper_unit_for_byte_size(progress_actual),
-                     byte_size_in_proper_unit(progress_expected), proper_unit_for_byte_size(progress_expected));
-  if (prog_used) {
+  if (progress_actual >= progress_expected) {
     return true;
   }
+  log_info(gc,ergo)("Not enough progress (" SIZE_FORMAT "M, need " SIZE_FORMAT "M) after %s",
+                    progress_actual / M, progress_expected / M, label);
 
-  // Internal fragmentation is down?
+  // Internal fragmentation is down? Good! Declare victory.
   double if_actual = _if_before - _if_after;
   double if_expected = 0.01; // 1% should be enough
-  bool prog_if = if_actual >= if_expected;
-  log_info(gc, ergo)("%s progress for internal fragmentation: %.1f%%, need %.1f%%",
-                     prog_if ? "Good" : "Bad",
-                     if_actual * 100, if_expected * 100);
-  if (prog_if) {
+  if (if_actual > if_expected) {
     return true;
   }
+  log_info(gc,ergo)("Not enough internal fragmentation improvement (%.1f%%, need %.1f%%) after %s",
+                    if_actual * 100, if_expected * 100, label);
 
-  // External fragmentation is down?
+  // External fragmentation is down? Good! Declare victory.
   double ef_actual = _ef_before - _ef_after;
   double ef_expected = 0.01; // 1% should be enough
-  bool prog_ef = ef_actual >= ef_expected;
-  log_info(gc, ergo)("%s progress for external fragmentation: %.1f%%, need %.1f%%",
-                     prog_ef ? "Good" : "Bad",
-                     ef_actual * 100, ef_expected * 100);
-  if (prog_ef) {
+  if (ef_actual > ef_expected) {
     return true;
   }
+  log_info(gc,ergo)("Not enough external fragmentation improvement (%.1f%%, need %.1f%%) after %s",
+                    if_actual * 100, if_expected * 100, label);
 
   // Nothing good had happened.
   return false;
 }
< prev index next >