| /* |
| * 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); |
| } |
| } |
| } |