blob: acc53f68d110ecbfcf1ce40350f8e1a16e2ef459 [file] [log] [blame]
/*
* Copyright (c) 2012, 2013 Eike Stepper (Berlin, Germany) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Martin Fluegge - initial API and implementation
*/
package org.eclipse.emf.cdo.tests;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.tests.config.impl.ConfigTest.Requires;
import org.eclipse.emf.cdo.tests.model1.Customer;
import org.eclipse.emf.cdo.tests.model1.SalesOrder;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.net4j.util.io.IOUtil;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.EcoreFactory;
import org.eclipse.emf.ecore.EcorePackage;
import org.junit.AfterClass;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* @author Martin Fluegge
*/
@Requires("excluded")
public class MartinsPerformanceTest extends AbstractCDOTest
{
protected static EClass mapContainerEClass;
private static Map<String, TimeTaker> results = new HashMap<String, TimeTaker>();
public void testSimpleTestNoCommit() throws Exception
{
TimeTaker t = start("testSimpleTestNoCommit");
getModel1Factory().createCustomer();
for (int i = 0; i < 50000; i++)
{
Customer customer = getModel1Factory().createCustomer();
customer.setCity("Barovia");
customer.setName("Strahd von Zarovich");
customer.setStreet("Necromancer Road 5");
for (int c = 0; c < 50; c++)
{
SalesOrder salesOrder = getModel1Factory().createSalesOrder();
salesOrder.setCustomer(customer);
salesOrder.setId(c);
}
}
finish(t);
msg(t.getTiming());
}
public void testSimpleTestWithCommit() throws Exception
{
TimeTaker t = start("testBasicCommitPerformance");
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
getModel1Factory().createCustomer();
for (int i = 0; i < 500; i++)
{
Customer customer = getModel1Factory().createCustomer();
customer.setCity("Barovia");
customer.setName("Strahd von Zarovich");
customer.setStreet("Necromancer Road 5");
for (int c = 0; c < 5; c++)
{
SalesOrder salesOrder = getModel1Factory().createSalesOrder();
salesOrder.setCustomer(customer);
salesOrder.setId(c);
resource.getContents().add(salesOrder);
}
resource.getContents().add(customer);
}
transaction.commit();
finish(t);
msg(t.getTiming());
}
// public void testDynamicPerformance() throws Exception
// {
//
// TimeTaker t = start("testDynamicPerformance");
// CDOSession session = openSession();
// CDOTransaction transaction = session.openTransaction();
// EPackage dynamicMapEPackge = createPackage();
// EFactory dynamicMapEFactoryInstance = dynamicMapEPackge.getEFactoryInstance();
//
// CDOResource resource = transaction.createResource(getResourcePath("/test1"));
// for (int i = 0; i < 5000; i++)
// {
//
// EObject mapContainer = dynamicMapEFactoryInstance
// .create((EClass)dynamicMapEPackge.getEClassifier("MapContainer"));
//
// resource.getContents().add(mapContainer);
//
// }
// transaction.commit();
//
// finish(t);
// }
public void testLoadAnStoreDataPerformance() throws Exception
{
TimeTaker t = start("testLoadAnStoreDataPerformance");
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
getModel1Factory().createCustomer();
for (int i = 0; i < 500; i++)
{
Customer customer = getModel1Factory().createCustomer();
customer.setCity("Barovia");
customer.setName("Strahd von Zarovich");
customer.setStreet("Necromancer Road 5");
for (int c = 0; c < 5; c++)
{
SalesOrder salesOrder = getModel1Factory().createSalesOrder();
salesOrder.setCustomer(customer);
salesOrder.setId(c);
resource.getContents().add(salesOrder);
}
resource.getContents().add(customer);
}
transaction.commit();
session.close();
}
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.getResource(getResourcePath("/test1"));
int i = 0;
for (EObject o : resource.getContents())
{
if (o instanceof Customer)
{
Customer customer = (Customer)o;
customer.setCity("Dargaard");
customer.setName("Lord Soth");
customer.setStreet("Death Knight Alley 7");
for (SalesOrder salesOrder : customer.getSalesOrders())
{
salesOrder.setId(salesOrder.getId() + 1);
}
i++;
}
}
assertEquals(500, i);
transaction.commit();
session.close();
}
finish(t);
msg(t.getTiming());
}
public void testLoadAnStoreDataPreAddPerformance() throws Exception
{
TimeTaker t = start("testLoadAnStoreDataPreAddPerformance");
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
getModel1Factory().createCustomer();
for (int i = 0; i < 500; i++)
{
Customer customer = getModel1Factory().createCustomer();
resource.getContents().add(customer);
customer.setCity("Barovia");
customer.setName("Strahd von Zarovich");
customer.setStreet("Necromancer Road 5");
for (int c = 0; c < 5; c++)
{
SalesOrder salesOrder = getModel1Factory().createSalesOrder();
resource.getContents().add(salesOrder);
salesOrder.setCustomer(customer);
salesOrder.setId(c);
}
}
transaction.commit();
session.close();
}
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.getResource(getResourcePath("/test1"));
int i = 0;
for (EObject o : resource.getContents())
{
if (o instanceof Customer)
{
Customer customer = (Customer)o;
customer.setCity("Dargaard");
customer.setName("Lord Soth");
customer.setStreet("Death Knight Alley 7");
for (SalesOrder salesOrder : customer.getSalesOrders())
{
salesOrder.setId(salesOrder.getId() + 1);
}
i++;
}
}
assertEquals(500, i);
transaction.commit();
session.close();
}
finish(t);
msg(t.getTiming());
}
public void testAddRemove() throws Exception
{
TimeTaker t = start("testAddRemove");
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
for (int i = 0; i < 100; i++)
{
Customer customer = getModel1Factory().createCustomer();
customer.setName("Azalin Rex");
customer.setCity("Darkon");
resource.getContents().add(customer);
transaction.commit();
resource.getContents().remove(resource.getContents().size() - 1);
transaction.commit();
resource.getContents().add(customer);
transaction.commit();
}
finish(t);
msg(t.getTiming());
}
public EPackage createPackage()
{
EcoreFactory theCoreFactory = EcoreFactory.eINSTANCE;
EcorePackage theCorePackage = EcorePackage.eINSTANCE;
mapContainerEClass = theCoreFactory.createEClass();
mapContainerEClass.setName("MapContainer");
EPackage dynamicMapEPackage = createUniquePackage();
dynamicMapEPackage.getEClassifiers().add(mapContainerEClass);
EStructuralFeature name = theCoreFactory.createEAttribute();
name.setName("name");
name.setEType(theCorePackage.getEString());
mapContainerEClass.getEStructuralFeatures().add(name);
if (!isConfig(LEGACY))
{
CDOUtil.prepareDynamicEPackage(dynamicMapEPackage);
}
return dynamicMapEPackage;
}
private TimeTaker start(String testName)
{
TimeTaker t = new TimeTaker();
results.put(testName, t);
t.setStart(System.currentTimeMillis());
return t;
}
private void finish(TimeTaker t)
{
t.setEnd(System.currentTimeMillis());
}
/**
* @author Martin Fluegge
*/
private static class TimeTaker
{
private long start;
private long end;
public void setStart(long start)
{
this.start = start;
}
public void setEnd(long end)
{
this.end = end;
}
public long getTiming()
{
return end - start;
}
}
// A fake because afterClass does not seem to work :(
@AfterClass
public void testTearDown() throws IOException
{
String ext = "NATIVE";
if (isConfig(LEGACY))
{
ext = "LEGACY";
}
String location = System.getProperty("user.home") + "/cdo_Performance_" + ext + "_" + new Date().getTime() + ".csv";
System.out.println("Writing performance results to: " + location);
File file = new File(location);
FileWriter fileWriter = new FileWriter(file);
try
{
StringBuffer stringBuffer = new StringBuffer();
for (String key : results.keySet())
{
stringBuffer.append(key + ";" + results.get(key).getTiming() + "\n");
}
fileWriter.write(stringBuffer.toString());
}
finally
{
IOUtil.close(fileWriter);
}
}
}