changeset 2016:145331068b53

Better Shenandoah GC support in vm-gc plugin. Reviewed-by: neugens Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2016-August/020747.html PR3155
author Severin Gehwolf <sgehwolf@redhat.com>
date Tue, 30 Aug 2016 15:28:28 +0200
parents 2722ffe3454e
children 82fffb91b91a
files vm-gc/client-core/src/main/java/com/redhat/thermostat/vm/gc/client/core/internal/VmGcController.java vm-gc/client-core/src/main/java/com/redhat/thermostat/vm/gc/client/locale/LocaleResources.java vm-gc/client-core/src/main/resources/com/redhat/thermostat/vm/gc/client/locale/strings.properties vm-gc/common/src/main/java/com/redhat/thermostat/vm/gc/common/GcCommonNameMapper.java vm-gc/common/src/test/java/com/redhat/thermostat/vm/gc/common/GcCommonNameMapperTest.java
diffstat 5 files changed, 37 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/vm-gc/client-core/src/main/java/com/redhat/thermostat/vm/gc/client/core/internal/VmGcController.java	Tue Aug 30 10:05:18 2016 -0400
+++ b/vm-gc/client-core/src/main/java/com/redhat/thermostat/vm/gc/client/core/internal/VmGcController.java	Tue Aug 30 15:28:28 2016 +0200
@@ -192,10 +192,13 @@
          timer.stop();
     }
 
-    // FIXME
-    private LocalizedString chartName(String collectorName, String generationName) {
-        return translator.localize(LocaleResources.VM_GC_COLLECTOR_OVER_GENERATION,
+    private LocalizedString chartName(String collectorName, String generationName, boolean isGenerational) {
+        if (isGenerational) {
+            return translator.localize(LocaleResources.VM_GC_COLLECTOR_OVER_GENERATION,
                 collectorName, generationName);
+        } else {
+            return translator.localize(LocaleResources.VM_GC_COLLECTOR_NON_GENERATIONAL, collectorName);
+        }
     }
 
     private synchronized void doUpdateCollectorData() {
@@ -231,15 +234,26 @@
             }
             lastValueSeen.put(collector, stat);
         }
+        final boolean isGenerational = isGenerationalCollector(commonName);
         for (Map.Entry<String, List<IntervalTimeData<Double>>> entry : dataToAdd.entrySet()) {
             String name = entry.getKey();
             if (!addedCollectors.contains(name)) {
-                view.addChart(name, chartName(name, getCollectorGeneration(name)), "ms");
+                view.addChart(name, chartName(name, getCollectorGeneration(name), isGenerational), "ms");
                 addedCollectors.add(name);
             }
             view.addData(entry.getKey(), entry.getValue());
         }
     }
+    
+    private boolean isGenerationalCollector(CollectorCommonName commonName) {
+        switch (commonName) {
+        case SHENANDOAH:
+            return false;
+        default:
+            // Default to generational
+            return true;
+        }
+    }
 
     private CollectorCommonName getCommonName() {
         Set<String> distinctCollectors = gcDao.getDistinctCollectorNames(ref);
--- a/vm-gc/client-core/src/main/java/com/redhat/thermostat/vm/gc/client/locale/LocaleResources.java	Tue Aug 30 10:05:18 2016 -0400
+++ b/vm-gc/client-core/src/main/java/com/redhat/thermostat/vm/gc/client/locale/LocaleResources.java	Tue Aug 30 15:28:28 2016 +0200
@@ -53,6 +53,7 @@
     
     VM_GC_TITLE,
     VM_GC_COLLECTOR_OVER_GENERATION,
+    VM_GC_COLLECTOR_NON_GENERATIONAL,
     VM_GC_COLLECTOR_CHART_REAL_TIME_LABEL,
     VM_GC_COLLECTOR_CHART_GC_TIME_LABEL,
     VM_GC_CONFIGURED_COLLECTOR,
--- a/vm-gc/client-core/src/main/resources/com/redhat/thermostat/vm/gc/client/locale/strings.properties	Tue Aug 30 10:05:18 2016 -0400
+++ b/vm-gc/client-core/src/main/resources/com/redhat/thermostat/vm/gc/client/locale/strings.properties	Tue Aug 30 15:28:28 2016 +0200
@@ -12,6 +12,8 @@
 
 VM_GC_TITLE = Garbage Collection in the VM
 VM_GC_COLLECTOR_OVER_GENERATION = Collector {0} running on {1}
+# Use the name of the collector verbatim
+VM_GC_COLLECTOR_NON_GENERATIONAL = {0}
 VM_GC_COLLECTOR_CHART_REAL_TIME_LABEL = Time
 VM_GC_COLLECTOR_CHART_GC_TIME_LABEL = GC Time ({0})
 VM_GC_CONFIGURED_COLLECTOR = Configured Garbage Collector:
--- a/vm-gc/common/src/main/java/com/redhat/thermostat/vm/gc/common/GcCommonNameMapper.java	Tue Aug 30 10:05:18 2016 -0400
+++ b/vm-gc/common/src/main/java/com/redhat/thermostat/vm/gc/common/GcCommonNameMapper.java	Tue Aug 30 15:28:28 2016 +0200
@@ -56,6 +56,8 @@
         CONCURRENT_COLLECTOR("Concurrent Collector (Concurrent Mark and Sweep)"),
         /** Mark Sweep Compact Collector: {@code -XX:+UseParNewGC} */
         MARK_SWEEP_COMPACT("Mark Sweep Compact Collector"),
+        /** Shenandoah Collector: {@code -XX:+UseShenandoahGC} */
+        SHENANDOAH("Shenandoah Collector"),
         UNKNOWN_COLLECTOR("Unknown Collector");
         
         private String humanReadableName;
@@ -98,6 +100,13 @@
         concurrentColls.add("CMS");
         concurrentColls.add("PCopy");
         commonNameMap.put(concurrentColls, CollectorCommonName.CONCURRENT_COLLECTOR);
+        // Shenandoah collector has 3 exposed sub collectors even though
+        // it's non-generational
+        Set<String> shenandoahColls = new HashSet<>(3);
+        shenandoahColls.add("Shenandoah concurrent phases");
+        shenandoahColls.add("Shenandoah pauses");
+        shenandoahColls.add("Shenandoah full GC pauses");
+        commonNameMap.put(shenandoahColls, CollectorCommonName.SHENANDOAH);
     }
 
     /**
--- a/vm-gc/common/src/test/java/com/redhat/thermostat/vm/gc/common/GcCommonNameMapperTest.java	Tue Aug 30 10:05:18 2016 -0400
+++ b/vm-gc/common/src/test/java/com/redhat/thermostat/vm/gc/common/GcCommonNameMapperTest.java	Tue Aug 30 15:28:28 2016 +0200
@@ -71,6 +71,12 @@
         actual = mapper.mapToCommonName(distinctSet);
         assertEquals("'MSC' + 'Copy' should map to serial collector",
                 CollectorCommonName.SERIAL_COLLECTOR, actual);
+        distinctSet = getDistinctColNames("Shenandoah concurrent phases",
+                                          "Shenandoah pauses",
+                                          "Shenandoah full GC pauses");
+        actual = mapper.mapToCommonName(distinctSet);
+        assertEquals("Should map to shenandoah GC",
+                CollectorCommonName.SHENANDOAH, actual);
     }
     
     @Test
@@ -80,6 +86,7 @@
         assertEquals("Garbage-First Collector (G1)", CollectorCommonName.G1.getHumanReadableString());
         assertEquals("Concurrent Collector (Concurrent Mark and Sweep)", CollectorCommonName.CONCURRENT_COLLECTOR.getHumanReadableString());
         assertEquals("Mark Sweep Compact Collector", CollectorCommonName.MARK_SWEEP_COMPACT.getHumanReadableString());
+        assertEquals("Shenandoah Collector", CollectorCommonName.SHENANDOAH.getHumanReadableString());
         assertEquals("Unknown Collector", CollectorCommonName.UNKNOWN_COLLECTOR.getHumanReadableString());
     }