Mercurial > hg > release > thermostat-1.6
changeset 1990:1ee23f6c4b50
Streamline Treemap Building
PR3059
Reviewed-by: jkang
Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2016-June/019844.html
Original-thread: http://icedtea.classpath.org/pipermail/thermostat/2015-December/017089.html
author | James Aziz <jaziz@redhat.com> |
---|---|
date | Wed, 29 Jun 2016 12:23:12 -0400 |
parents | 10e0b0fe84ef |
children | ec503206ccf5 |
files | client/swing/src/main/java/com/redhat/thermostat/client/swing/components/experimental/NodeDataExtractor.java client/swing/src/main/java/com/redhat/thermostat/client/swing/components/experimental/TreeMap.java client/swing/src/test/java/com/redhat/thermostat/client/swing/components/experimental/TreeMapTest.java vm-heap-analysis/client-swing/src/main/java/com/redhat/thermostat/vm/heap/analysis/client/swing/internal/ObjectHistogramNodeDataExtractor.java |
diffstat | 4 files changed, 29 insertions(+), 34 deletions(-) [+] |
line wrap: on
line diff
--- a/client/swing/src/main/java/com/redhat/thermostat/client/swing/components/experimental/NodeDataExtractor.java Wed Jun 29 12:23:11 2016 -0400 +++ b/client/swing/src/main/java/com/redhat/thermostat/client/swing/components/experimental/NodeDataExtractor.java Wed Jun 29 12:23:12 2016 -0400 @@ -48,10 +48,23 @@ */ public interface NodeDataExtractor<S, T> { - String getNodeSeparator(); + /** + * This method extracts and returns the nodes from the key of the {@link T} element parameter. + * + * @param element a unit, holding some weight and labelled by some key (e.g. a pathname) that + * expresses a delimited set of (hierarchical) nodes + * @return a String array, with an individual node at each index + */ + String[] getNodes(T element); - String getKey(T element); + /** + * This method returns the weight of the {@link T} element parameter. + */ double getWeight(T element); + /** + * This method extracts and returns the set of {@link T} elements which are aggregated in the + * {@link S} data parameter. + */ Collection<T> getAsCollection(S data); }
--- a/client/swing/src/main/java/com/redhat/thermostat/client/swing/components/experimental/TreeMap.java Wed Jun 29 12:23:11 2016 -0400 +++ b/client/swing/src/main/java/com/redhat/thermostat/client/swing/components/experimental/TreeMap.java Wed Jun 29 12:23:12 2016 -0400 @@ -37,7 +37,6 @@ package com.redhat.thermostat.client.swing.components.experimental; import java.util.List; -import java.util.regex.Pattern; /** * This class represents a treemap and facilitates its construction from information available in @@ -64,32 +63,22 @@ return root; } - private static <S, T> void buildTree(S data, TreeMapNode root, NodeDataExtractor<S, T> extractor) { + private static <S, T> void buildTree(S data, TreeMapNode root, + NodeDataExtractor<S, T> extractor) { - for(T element: extractor.getAsCollection(data)) { - String key = extractor.getKey(element); - String splitToken = extractor.getNodeSeparator(); - double weight = extractor.getWeight(element); - + for (T element: extractor.getAsCollection(data)) { TreeMapNode lastProcessed = root; - while (!key.equals("")) { - - String nodeId = key.split(Pattern.quote(splitToken))[0]; + for (String node : extractor.getNodes(element)) { + TreeMapNode child = searchNode(lastProcessed, node); - TreeMapNode child = searchNode(lastProcessed, nodeId); if (child == null) { - child = new TreeMapNode(nodeId, 0); + child = new TreeMapNode(node, 0); lastProcessed.addChild(child); } lastProcessed = child; - - key = key.substring(nodeId.length()); - if (key.startsWith(splitToken)) { - key = key.substring(1); - } } - lastProcessed.setRealWeight(weight); + lastProcessed.setRealWeight(extractor.getWeight(element)); } }
--- a/client/swing/src/test/java/com/redhat/thermostat/client/swing/components/experimental/TreeMapTest.java Wed Jun 29 12:23:11 2016 -0400 +++ b/client/swing/src/test/java/com/redhat/thermostat/client/swing/components/experimental/TreeMapTest.java Wed Jun 29 12:23:12 2016 -0400 @@ -42,6 +42,7 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.regex.Pattern; import org.junit.Before; import org.junit.Test; @@ -54,6 +55,7 @@ final private double SOME_ROOT_WEIGHT = 25.0; final private double DELTA = 0.01; final private double SOME_WEIGHT = 3.14; + final private String NODE_SEPARATOR = "."; private ArrayList<Pair<String, Double>> data; private TreeMapNode root; @@ -108,13 +110,8 @@ new NodeDataExtractor<ArrayList<Pair<String, Double>>, Pair<String, Double>>() { @Override - public String getNodeSeparator() { - return "."; - } - - @Override - public String getKey(Pair<String, Double> element) { - return element.getFirst(); + public String[] getNodes(Pair<String, Double> element) { + return element.getFirst().split(Pattern.quote(NODE_SEPARATOR)); } @Override
--- a/vm-heap-analysis/client-swing/src/main/java/com/redhat/thermostat/vm/heap/analysis/client/swing/internal/ObjectHistogramNodeDataExtractor.java Wed Jun 29 12:23:11 2016 -0400 +++ b/vm-heap-analysis/client-swing/src/main/java/com/redhat/thermostat/vm/heap/analysis/client/swing/internal/ObjectHistogramNodeDataExtractor.java Wed Jun 29 12:23:12 2016 -0400 @@ -37,6 +37,7 @@ package com.redhat.thermostat.vm.heap.analysis.client.swing.internal; import java.util.Collection; +import java.util.regex.Pattern; import com.redhat.thermostat.client.swing.components.experimental.NodeDataExtractor; import com.redhat.thermostat.common.utils.DescriptorConverter; @@ -46,15 +47,10 @@ public class ObjectHistogramNodeDataExtractor implements NodeDataExtractor<ObjectHistogram, HistogramRecord> { @Override - public String getNodeSeparator() { - return "."; - } - - @Override - public String getKey(HistogramRecord record) { + public String[] getNodes(HistogramRecord record) { String className = record.getClassname(); // if className is a primitive type it is converted with its full name - return DescriptorConverter.toJavaType(className); + return DescriptorConverter.toJavaType(className).split(Pattern.quote(".")); } @Override