Skip to content

Commit

Permalink
reporting done
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelmosmann committed Oct 22, 2012
1 parent a74b158 commit a3b029a
Show file tree
Hide file tree
Showing 7 changed files with 252 additions and 16 deletions.
Expand Up @@ -4,6 +4,7 @@
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

Expand Down Expand Up @@ -37,7 +38,11 @@ private int updatePositionAndCalculateDiff(int position) {
}

public ISerializedObjectTree end(Object object) {
return new ImmutableTree(currentItem);
return new ImmutableTree(stripRootNode());
}

private Item stripRootNode() {
return currentItem.children().iterator().next();
}


Expand All @@ -58,7 +63,7 @@ public ImmutableTree(Item item) {
int childSize=0;
for (Item child : item.children()) {
ImmutableTree toAdd = new ImmutableTree(child);
childSize=childSize+toAdd.childSize();
childSize=childSize+toAdd.childSize()+toAdd.size();
lchildren.add(toAdd);
}
this.children=Collections.unmodifiableList(lchildren);
Expand Down Expand Up @@ -94,7 +99,7 @@ public List<? extends ISerializedObjectTree> children() {
static class Item {

private final ItemKey key;
Map<ItemKey, Item> children=new HashMap<ItemKey, ObjectTreeTracker.Item>();
Map<ItemKey, Item> children=new LinkedHashMap<ItemKey, ObjectTreeTracker.Item>();

int size=0;

Expand Down
Expand Up @@ -13,10 +13,10 @@ public static void label(StringBuilder sb, String label, int columnSize, char fi
}

public static void label(StringBuilder sb, Ident ident, String label, int columnSize, char filler) {
for (int i=0;i<ident.count;i++) {
sb.append(ident.c);
for (int i=0;i<ident.size();i++) {
sb.append(ident.value());
}
int left=columnSize-ident.count;
int left=columnSize-ident.size();
int labelLength = label.length();
if (labelLength>left) {
sb.append(label.substring(0,left));
Expand Down Expand Up @@ -51,5 +51,13 @@ public Ident(int count, char c) {
this.count = count;
this.c = c;
}

public int size() {
return count;
}

public char value() {
return c;
}
}
}
@@ -0,0 +1,27 @@
package org.wicketstuff.pageserializer.kryo2.inspecting;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class SortedTreeSizeReport extends TreeSizeReport {

@Override
protected List<? extends ISerializedObjectTree> preProcess(
List<? extends ISerializedObjectTree> children) {

List<ISerializedObjectTree> ret=new ArrayList<ISerializedObjectTree>();
ret.addAll(children);
Collections.sort(ret,new Comparator<ISerializedObjectTree>() {
@Override
public int compare(ISerializedObjectTree o1,
ISerializedObjectTree o2) {
int s1=o1.size()+o1.childSize();
int s2=o2.size()+o2.childSize();
return s1==s2 ? 0 : s1<s2 ? 1 : -1;
}
});
return ret;
}
}
@@ -1,11 +1,59 @@
package org.wicketstuff.pageserializer.kryo2.inspecting;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.wicketstuff.pageserializer.kryo2.inspecting.Reports.Ident;

public class TreeSizeReport implements ISerializedObjectTreeProcessor {

private final static Logger LOG = LoggerFactory
.getLogger(TreeSizeReport.class);

@Override
public void process(ISerializedObjectTree tree) {
// TODO Auto-generated method stub
Ident ident=new Ident(2,' ');
int labelColumnSize=labelColumnSize(tree,ident,0,0);

StringBuilder sb=new StringBuilder();
sb.append("\n-----------------------------\n");
process(tree,sb,ident,0,tree.size()+tree.childSize(),labelColumnSize);
LOG.debug(sb.toString());
}

private void process(ISerializedObjectTree tree, StringBuilder sb,Ident ident, int level,
int allSize, int labelColumnSize) {
Reports.label(sb, new Ident(ident.size()*level,ident.value()), label(tree), labelColumnSize, '.');
Reports.rightColumn(sb, 4, '.', ""+((tree.size()+tree.childSize())*100/allSize), '<');
sb.append("%.|");
Reports.rightColumn(sb, 8, '.', ""+(tree.size()+tree.childSize()), '<');
sb.append("|");
Reports.rightColumn(sb, 8, '.', ""+tree.size(), '<');
sb.append("|");
Reports.rightColumn(sb, 8, '.', ""+tree.childSize(), '<');
sb.append("\n");

for (ISerializedObjectTree child : preProcess(tree.children())) {
process(child, sb, ident, level+1, allSize, labelColumnSize);
}
}

protected List<? extends ISerializedObjectTree> preProcess(List<? extends ISerializedObjectTree> children) {
return children;
}

private int labelColumnSize(ISerializedObjectTree tree, Ident ident, int level,
int parentColumnSize) {
int columnSize=label(tree).length()+level*ident.size();
for (ISerializedObjectTree child : tree.children()) {
columnSize=labelColumnSize(child, ident, level+1, columnSize);
}
return Math.max(columnSize, parentColumnSize);
}

private String label(ISerializedObjectTree tree) {
return (tree.type().isAnonymousClass() ? tree.type().getSuperclass().getName() : tree.type().getName()) + (tree.label()!=null ? "("+tree.label()+")" : "");
}

}
Expand Up @@ -51,7 +51,7 @@ public int compare(Entry<Class<?>, Counter> o1,

private void process(ISerializedObjectTree tree, Map<Class<?>, Counter> map) {
Counter counter=getOrCreate(map,tree.type());
counter.increment(tree.size()+tree.childSize());
counter.increment(tree.size());

for (ISerializedObjectTree child : tree.children()) {
process(child,map);
Expand Down
@@ -1,5 +1,6 @@
package org.wicketstuff.pageserializer.kryo2.inspecting;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
Expand All @@ -13,28 +14,142 @@ public class InspectingKryoTest {

@Test
public void writeStringList() {
List<String> stringList=new ArrayList<String>();
List<Object> root=new ArrayList<Object>();
String third = "III";
stringList.addAll(Arrays.asList("One","2",third,third));

List<Integer> numberList=new ArrayList<Integer>();
numberList.add(1);
numberList.add(12131);
numberList.add(12);
root.addAll(Arrays.asList("One","2",third,third));
root.add(numberList);
root.add(new BiggestDummy());

IObjectLabelizer labelizer=new IObjectLabelizer() {

@Override
public String labelFor(Object object) {
return null;
}
};
ISerializedObjectTreeProcessor treeProcessor=TreeProcessors.listOf(new TypeSizeReport(),new TreeSizeReport());
ISerializedObjectTreeProcessor treeProcessor=TreeProcessors.listOf(new TypeSizeReport(),new TreeSizeReport(),new SortedTreeSizeReport());
ISerializationListener listener = SerializationListener.listOf(new LoggingSerializationListener(),new AnalyzingSerializationListener(labelizer, treeProcessor));
InspectingKryoSerializer kryo=new InspectingKryoSerializer(Bytes.bytes(100),listener);
InspectingKryoSerializer kryo=new InspectingKryoSerializer(Bytes.bytes(1000),listener);

byte[] data=kryo.serialize(stringList);
byte[] data=kryo.serialize(root);

Assert.assertNotNull(data);

List<String> readBack=(List<String>) kryo.deserialize(data);
List<Object> readBack=(List<Object>) kryo.deserialize(data);

Assert.assertNotNull(readBack);
Assert.assertEquals(stringList, readBack);
Assert.assertEquals(root, readBack);
}

static class Dummy implements Serializable {
String name="Huauuauauaajjjajajjajj";

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Dummy other = (Dummy) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}


}

static class BiggerDummy implements Serializable {
Dummy first=new Dummy();
Dummy second=new Dummy();
String city="lebunistan";
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((city == null) ? 0 : city.hashCode());
result = prime * result + ((first == null) ? 0 : first.hashCode());
result = prime * result
+ ((second == null) ? 0 : second.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
BiggerDummy other = (BiggerDummy) obj;
if (city == null) {
if (other.city != null)
return false;
} else if (!city.equals(other.city))
return false;
if (first == null) {
if (other.first != null)
return false;
} else if (!first.equals(other.first))
return false;
if (second == null) {
if (other.second != null)
return false;
} else if (!second.equals(other.second))
return false;
return true;
}
}

static class BiggestDummy implements Serializable {
Dummy first=new Dummy();
BiggerDummy bigger=new BiggerDummy();
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((bigger == null) ? 0 : bigger.hashCode());
result = prime * result + ((first == null) ? 0 : first.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
BiggestDummy other = (BiggestDummy) obj;
if (bigger == null) {
if (other.bigger != null)
return false;
} else if (!bigger.equals(other.bigger))
return false;
if (first == null) {
if (other.first != null)
return false;
} else if (!first.equals(other.first))
return false;
return true;
}
}
}
@@ -0,0 +1,33 @@
package org.wicketstuff.pageserializer.kryo2.inspecting;

import junit.framework.Assert;

import org.junit.Test;

public class TestObjectTreeTracker {

@Test
public void testSizes() {

Object a="HA";
Object b=1;

IObjectLabelizer labelizer=new IObjectLabelizer() {

@Override
public String labelFor(Object object) {
return null;
}
};

ObjectTreeTracker tracker=new ObjectTreeTracker(labelizer,a);
tracker.newItem(0, a);
tracker.newItem(12,b);
tracker.closeItem(14, b);
tracker.closeItem(24, a);

ISerializedObjectTree tree = tracker.end(a);
Assert.assertEquals("size", 22,tree.size());
Assert.assertEquals("size", 2,tree.childSize());
}
}

0 comments on commit a3b029a

Please sign in to comment.