changeset 191:e91a7dea56df

Bug 3246: HeapStats Analyzer should show popup window in SnapShot summary Reviewed-by: ykubota https://github.com/HeapStats/heapstats/pull/51
author Yasumasa Suenaga <yasuenag@gmail.com>
date Mon, 05 Dec 2016 12:25:50 +0900
parents 0505e8809f39
children 1374722a0d15
files ChangeLog analyzer/fx/src/main/java/jp/co/ntt/oss/heapstats/plugin/builtin/snapshot/tabs/SummaryController.java analyzer/fx/src/main/resources/jp/co/ntt/oss/heapstats/plugin/builtin/snapshot/tabs/summary.fxml
diffstat 3 files changed, 38 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Sat Dec 03 23:25:27 2016 +0900
+++ b/ChangeLog	Mon Dec 05 12:25:50 2016 +0900
@@ -1,3 +1,7 @@
+2016-12-05  Yasumasa Suenaga <yasuenag@gmail.com>
+
+	* Bug 3246: HeapStats Analyzer should show popup window in SnapShot summary
+
 2016-12-03  Yasumasa Suenaga <yasuenag@gmail.com>
 
 	* Bug 3254: Incorrect time value in tooltip on SnapShot Histogram
--- a/analyzer/fx/src/main/java/jp/co/ntt/oss/heapstats/plugin/builtin/snapshot/tabs/SummaryController.java	Sat Dec 03 23:25:27 2016 +0900
+++ b/analyzer/fx/src/main/java/jp/co/ntt/oss/heapstats/plugin/builtin/snapshot/tabs/SummaryController.java	Mon Dec 05 12:25:50 2016 +0900
@@ -40,9 +40,10 @@
 import javafx.scene.chart.XYChart;
 import javafx.scene.control.TableColumn;
 import javafx.scene.control.TableView;
+import javafx.scene.control.Tooltip;
 import javafx.scene.control.cell.PropertyValueFactory;
+import javafx.scene.input.MouseEvent;
 import javafx.scene.layout.AnchorPane;
-import javafx.util.StringConverter;
 import jp.co.ntt.oss.heapstats.container.snapshot.SnapShotHeader;
 import jp.co.ntt.oss.heapstats.container.snapshot.SummaryData;
 import jp.co.ntt.oss.heapstats.utils.EpochTimeConverter;
@@ -94,6 +95,10 @@
 
     private ObjectProperty<ObservableSet<String>> currentClassNameSet;
 
+    private EpochTimeConverter epochTimeConverter;
+
+    private Tooltip tooltip;
+
     /**
      * Initializes the controller class.
      */
@@ -112,11 +117,11 @@
               .peek(c -> c.lookup(".chart").setStyle(bgcolor))
               .forEach(c -> c.getXAxis().setTickMarkVisible(HeapStatsUtils.getTickMarkerSwitch()));
 
-        StringConverter<Number> converter = new EpochTimeConverter();
+        epochTimeConverter = new EpochTimeConverter();
         Stream.of(heapChart, instanceChart, gcTimeChart, metaspaceChart)
               .map(c -> (NumberAxis)c.getXAxis())
-              .forEach(a -> a.setTickLabelFormatter(converter));
-        
+              .forEach(a -> a.setTickLabelFormatter(epochTimeConverter));
+
         initializeChartSeries();
     }
 
@@ -143,6 +148,8 @@
      */
     @SuppressWarnings("unchecked")
     private void initializeChartSeries() {
+        tooltip = new Tooltip();
+
         youngUsage = new XYChart.Series<>();
         youngUsage.setName("Young");
         oldUsage = new XYChart.Series<>();
@@ -278,6 +285,25 @@
 
             metaspaceUsage.setData(metaspaceUsageBuf);
             metaspaceCapacity.setData(metaspaceCapacityBuf);
+
+            /* Set tooltip */
+            /* Java Heap & Metaspace */
+            Stream.of(youngUsage, oldUsage, free, metaspaceUsage, metaspaceCapacity)
+                  .flatMap(s -> s.getData().stream())
+                  .peek(d -> Tooltip.install(d.getNode(), tooltip))
+                  .forEach(d -> d.getNode().addEventHandler(MouseEvent.MOUSE_ENTERED_TARGET, e -> tooltip.setText(String.format("%s: %d MB", epochTimeConverter.toString(d.getXValue()), d.getYValue()))));
+
+            /* Insatances */
+            instances.getData()
+                     .stream()
+                     .peek(d -> Tooltip.install(d.getNode(), tooltip))
+                     .forEach(d -> d.getNode().addEventHandler(MouseEvent.MOUSE_ENTERED_TARGET, e -> tooltip.setText((epochTimeConverter.toString(d.getXValue()) + ": " + d.getYValue()))));
+
+            /* GC time */
+            gcTime.getData()
+                  .stream()
+                  .peek(d -> Tooltip.install(d.getNode(), tooltip))
+                  .forEach(d -> d.getNode().addEventHandler(MouseEvent.MOUSE_ENTERED_TARGET, e -> tooltip.setText(String.format("%s: %d ms", epochTimeConverter.toString(d.getXValue()), d.getYValue()))));
         }
 
     }
--- a/analyzer/fx/src/main/resources/jp/co/ntt/oss/heapstats/plugin/builtin/snapshot/tabs/summary.fxml	Sat Dec 03 23:25:27 2016 +0900
+++ b/analyzer/fx/src/main/resources/jp/co/ntt/oss/heapstats/plugin/builtin/snapshot/tabs/summary.fxml	Mon Dec 05 12:25:50 2016 +0900
@@ -44,7 +44,7 @@
                     <items>
                         <StackPane prefHeight="150.0" prefWidth="200.0">
                             <children>
-                                <StackedAreaChart id="heapChart" fx:id="heapChart" animated="false" createSymbols="false" layoutX="-129.0" layoutY="-91.0" minHeight="0.0" title="%chart.javaheap" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
+                                <StackedAreaChart id="heapChart" fx:id="heapChart" animated="false" layoutX="-129.0" layoutY="-91.0" minHeight="0.0" title="%chart.javaheap" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                                     <xAxis>
                                         <NumberAxis side="BOTTOM" tickLabelsVisible="false" minorTickVisible="false" autoRanging="false" />
                                     </xAxis>
@@ -57,7 +57,7 @@
                         </StackPane>
                         <StackPane prefHeight="150.0" prefWidth="200.0">
                             <children>
-                                <LineChart id="instanceChart" fx:id="instanceChart" animated="false" createSymbols="false" layoutX="-149.0" layoutY="-120.0" legendVisible="false" minHeight="0.0" title="%chart.instances" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
+                                <LineChart id="instanceChart" fx:id="instanceChart" animated="false" layoutX="-149.0" layoutY="-120.0" legendVisible="false" minHeight="0.0" title="%chart.instances" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                                     <xAxis>
                                         <NumberAxis side="BOTTOM" tickLabelsVisible="false" minorTickVisible="false" visible="false" autoRanging="false" />
                                     </xAxis>
@@ -70,7 +70,7 @@
                         </StackPane>
                         <StackPane prefHeight="150.0" prefWidth="200.0">
                             <children>
-                                <LineChart id="gcTimeChart" fx:id="gcTimeChart" animated="false" createSymbols="false" layoutX="-169.0" layoutY="-120.0" legendVisible="false" minHeight="0.0" title="%chart.gctime" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
+                                <LineChart id="gcTimeChart" fx:id="gcTimeChart" animated="false" layoutX="-169.0" layoutY="-120.0" legendVisible="false" minHeight="0.0" title="%chart.gctime" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                                     <xAxis>
                                         <NumberAxis side="BOTTOM" tickLabelsVisible="false" minorTickVisible="false" autoRanging="false" />
                                     </xAxis>
@@ -83,7 +83,7 @@
                         </StackPane>
                         <StackPane prefHeight="150.0" prefWidth="200.0">
                             <children>
-                                <AreaChart id="metaspaceChart" fx:id="metaspaceChart" animated="false" createSymbols="false" layoutX="-174.0" layoutY="-166.0" minHeight="0.0" title="%chart.metaspace" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
+                                <AreaChart id="metaspaceChart" fx:id="metaspaceChart" animated="false" layoutX="-174.0" layoutY="-166.0" minHeight="0.0" title="%chart.metaspace" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                                     <xAxis>
                                         <NumberAxis side="BOTTOM" tickLabelsVisible="false" minorTickVisible="false" autoRanging="false" />
                                     </xAxis>