/*
* This code is distributed under The GNU Lesser General Public License (LGPLv3)
* Please visit GNU site for LGPLv3 http://www.gnu.org/copyleft/lesser.html
*
* Copyright Denis Pavlov 2009
* Web: http://www.genericdtoassembler.org
* SVN: https://svn.code.sf.net/p/geda-genericdto/code/trunk/
* SVN (mirror): http://geda-genericdto.googlecode.com/svn/trunk/
*/
package com.inspiresoftware.lib.dto.geda.performance;
import com.inspiresoftware.lib.dto.geda.adapter.BeanFactory;
import com.inspiresoftware.lib.dto.geda.assembler.Assembler;
import com.inspiresoftware.lib.dto.geda.assembler.DTOAssembler;
import com.inspiresoftware.lib.dto.geda.performance.dto.Level1Dto;
import com.inspiresoftware.lib.dto.geda.performance.dto.Level2Dto;
import com.inspiresoftware.lib.dto.geda.performance.dto.Level3Dto;
import com.inspiresoftware.lib.dto.geda.performance.entity.Level1Entity;
import org.junit.Ignore;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* Test thread for level 1 full tree test.
*
* @author DPavlov
*/
@Ignore
public class PerformanceTestLevel1Thread implements Runnable {
private final Sampler sampler = new Sampler();
private final int lvl1;
private final int lvl2;
private final ShutdownListener listener;
private final StringBuilder out = new StringBuilder();
public PerformanceTestLevel1Thread(final int lvl1, final int lvl2, final ShutdownListener listener) {
this.lvl1 = lvl1;
this.lvl2 = lvl2;
this.listener = listener;
this.listener.addObservable(this);
}
public void run() {
try {
MemUtils.statsToStream(out);
final int lvl2Count = (lvl2 * lvl1 * 5);
final int lvl3Count = (lvl2 * lvl1 * 5 * 5);
final int allCount = lvl1 + lvl2Count + lvl3Count;
final Date start = new Date();
out.append(start + " - Initializing GeDA performance test on " + allCount + " entities\n");
final List<Level1Entity> testSample = sampler.getLevel1Entities(1, lvl1, lvl2);
final Date assemberStart = new Date();
out.append(assemberStart + " - Finished creating objects in " + (assemberStart.getTime() - start.getTime()) + " millis\n");
out.append(assemberStart + " - Initializing assembler\n");
final Assembler assembler = DTOAssembler.newAssembler(Level1Dto.class, Level1Entity.class);
final Date assemberEnd = new Date();
out.append(assemberEnd + " - Initialized assembler in " + (assemberEnd.getTime() - assemberStart.getTime()) + " millis\n");
List<Level1Dto> dtos = new ArrayList<Level1Dto>();
long assemblyMillis = 0L;
try {
final Date startProcess = new Date();
out.append(startProcess + " - started assembly on "
+ lvl1 + " lvl1, "
+ lvl2Count + " lvl2, and "
+ lvl3Count + " lvl3 entities (total of "
+ allCount + " entities\n");
assembler.assembleDtos(dtos, testSample, null, getFactory());
final Date end = new Date();
assemblyMillis = (end.getTime() - startProcess.getTime());
out.append(end + " - finished in " + assemblyMillis + " millis\n");
dtos = null;
} catch (Exception iae) {
out.append(iae.getMessage()).append("\n");
if (iae.getCause() != null) {
out.append(iae.getCause().getMessage()).append("\n");
}
iae.printStackTrace();
}
final Date startManual = new Date();
out.append(startManual + " - trying manual copy\n");
final List<Level1Dto> manualDto = new ArrayList<Level1Dto>();
for (Level1Entity entity : testSample) {
manualDto.add(new Level1Dto(entity));
}
final Date endManual = new Date();
final long manualMillis = (endManual.getTime() - startManual.getTime());
out.append(endManual + " - finished manual copy in " + manualMillis + " millis\n");
out.append("Performance " + ((double) manualMillis / (double) assemblyMillis) * 100 + "%\n");
} finally {
this.listener.notifyFinished(this);
}
}
private BeanFactory getFactory() {
return new BeanFactory() {
public Class getClazz(final String entityBeanKey) {
return null;
}
public Object get(String entityBeanKey) {
if ("lvl1".equals(entityBeanKey)) {
return new Level1Dto();
} else if ("lvl2".equals(entityBeanKey)) {
return new Level2Dto();
} else if ("lvl3".equals(entityBeanKey)) {
return new Level3Dto();
}
return null;
}
};
}
/** {@inheritDoc} */
@Override
public String toString() {
return out.toString();
}
}