package fr.imag.adele.apam.mainApam;
import fr.imag.adele.apam.Apam;
import fr.imag.adele.apam.ApamComponent;
import fr.imag.adele.apam.CST;
import fr.imag.adele.apam.Implementation;
import fr.imag.adele.apam.Instance;
import fr.imag.adele.apam.Link;
import fr.imag.adele.apam.test.PerfWireSpec;
import fr.imag.adele.apam.test.s1.S1;
public class perfWire implements Runnable, ApamComponent, PerfWireSpec {
// injected
Apam apam;
S1 simpleDep ;
S1 constraintDep ;
S1 preferenceDep ;
//S1 testSimple ;
Instance thisInstance ;
S1 testReaction ;
//Getter to automate the test using pax
public S1 getFieldSimpleDep() {
return simpleDep;
}
//Setter to automate the test using pax
public void resetFieldSimpleDep() {
simpleDep = null;
}
//Getter to automate the test using pax
public S1 getFieldConstraintDep() {
return constraintDep;
}
//Setter to automate the test using pax
public void resetFieldConstraintDep() {
constraintDep = null;
}
//Getter to automate the test using pax
public S1 getFieldPreferenceDep() {
return preferenceDep;
}
//Setter to automate the test using pax
public void resetFieldPreferenceDep() {
preferenceDep = null;
}
//Getter to automate the test using pax
public S1 getFieldTestReaction() {
return testReaction;
}
//Getter to automate the test using pax
public Instance getFieldThisInstance() {
return thisInstance;
}
@Override
public void testReactionSimple() {
}
@Override
public void testReaction () {
System.out.println("=========== start testReaction test");
System.out.println("creating 2 instances");
Implementation implS1 = CST.apamResolver.findImplByName(null,"S1ImplEmpty");
Instance s1 = implS1.createInstance(null, null);
Instance s2 = implS1.createInstance(null, null);
Instance test = CST.componentBroker.getInstService(testReaction) ;
System.out.println("connected to " + test.getName());
if (test == s1)
s2.setProperty("debit", 100) ;
else
s1.setProperty("debit", 100) ;
thisInstance.setProperty("need", 20) ;
test = CST.componentBroker.getInstService(testReaction) ;
System.out.println("connected to " + test.getName());
// =========== start testReaction test
// creating 2 instances
// connected to S1ImplEmpty-0
// connected to S1ImplEmpty-1
}
@Override
public void testPerfLink () {
System.out.println("=========== start testPerfLink test");
Implementation impl= CST.apamResolver.findImplByName(null,"S2Impl");
long overHead = 0 ;
long fin ;
long duree ;
long deb ;
int nb = 1000;
int nbInst = 0 ;
System.out.println("creating 2 instances");
Implementation implS1 = CST.apamResolver.findImplByName(null,"S1ImplEmpty");
implS1.createInstance(null, null);
nbInst++ ;
implS1.createInstance(null, null);
nbInst++ ;
Instance test = null ;
String s ;
Link l ;
for (int k = 0; k < 10; k++) {
System.out.println("creating 1000 instances");
for (int i = 0; i < 100; i++) {
test = implS1.createInstance(null, null);
nbInst++ ;
}
test.setProperty("debit", 2000) ;
for (int j = 0; j < 10; j++) {
deb = System.nanoTime();
for (int i = 0; i < nb; i++) {
simpleDep.getName();
simpleDep = null ;
// l = thisInstance.getLink("testSimple") ;
// l.reevaluate(true, true) ;
}
fin = System.nanoTime();
duree = (fin - deb) ;
System.out.println("Nombre d'instances " + nbInst + " : duree de " + nb + " resolution sans contrainte : " + duree/1000000 + " milli secondes");
//Contrainte
deb = System.nanoTime();
for (int i = 0; i < nb; i++) {
constraintDep.getName();
constraintDep = null ;
// l = thisInstance.getLink("testPerf") ;
// l.reevaluate(true, true) ;
}
fin = System.nanoTime();
duree = (fin - deb - overHead) ;
System.out.println("Nombre d'instances " + nbInst + " : duree de " + nb + " resolution avec contrainte : " + duree/1000000 + " milli secondes");
//predference
deb = System.nanoTime();
for (int i = 0; i < nb; i++) {
preferenceDep.getName() ; //resolve if pointer is null
preferenceDep = null; //remove the link
// l = thisInstance.getLink("testPerfPrefere") ;
// l.reevaluate(true, true) ;
}
fin = System.nanoTime();
duree = (fin - deb - overHead) ;
System.out.println("Nombre d'instances " + nbInst + " : duree de " + nb + " resolution avec preference : " + duree/1000000 + " milli secondes");
deb = System.nanoTime();
// System.out.println(testSimple.getName());
for (int i = 0; i < nb; i++) {
test = CST.componentBroker.getInstService(simpleDep) ;
test.setProperty("debit", 10) ;
test.setProperty("debit", 20) ;
s = simpleDep.getName() ;
// System.out.println(s);
}
fin = System.nanoTime();
overHead = (fin - deb) ;
System.out.println("Nombre d'instances " + nbInst + " : duree de " + nb + " overhead : " + overHead/1000000 + " milli secondes");
deb = System.nanoTime();
// System.out.println(testPerf.getName());
// PAxizer ce test (le for) : Fait !
for (int i = 0; i < nb; i++) {
test = CST.componentBroker.getInstService(simpleDep) ;
test.setProperty("debit", 2) ;
s= simpleDep.getName() ;
test.setProperty("debit", 10) ;
//System.out.println(s);
}
fin = System.nanoTime();
duree = (fin - deb- overHead) ;
System.out.println("Nombre d'instances " + nbInst + " : duree de " + nb + " appels avec contrainte et changement de dep : " + duree/1000000 + " milli secondes");
}
}
//=========== start testPerfLink test
// Nombre d'instances 2 : duree de 1000 appels avec changement de dependance : 221 milli secondes
// creating 100 instances
// Nombre d'instances 102 : duree de 1000 appels sans changement : 10 milli secondes
// Nombre d'instances 102 : duree de 1000 appels avec contrainte et changement de dep : 20 milli secondes
// Nombre d'instances 102 : duree de 1000 changement de dep et preference : 121 milli secondes
// creating 100 instances
// Nombre d'instances 202 : duree de 1000 appels sans changement : 7 milli secondes
// Nombre d'instances 202 : duree de 1000 appels avec contrainte et changement de dep : 56 milli secondes
// Nombre d'instances 202 : duree de 1000 changement de dep et preference : 207 milli secondes
// creating 100 instances
// Nombre d'instances 302 : duree de 1000 appels sans changement : 6 milli secondes
// Nombre d'instances 302 : duree de 1000 appels avec contrainte et changement de dep : 64 milli secondes
// Nombre d'instances 302 : duree de 1000 changement de dep et preference : 265 milli secondes
// creating 100 instances
// Nombre d'instances 402 : duree de 1000 appels sans changement : 9 milli secondes
// Nombre d'instances 402 : duree de 1000 appels avec contrainte et changement de dep : 30 milli secondes
// Nombre d'instances 402 : duree de 1000 changement de dep et preference : 351 milli secondes
// creating 100 instances
// Nombre d'instances 502 : duree de 1000 appels sans changement : 8 milli secondes
// Nombre d'instances 502 : duree de 1000 appels avec contrainte et changement de dep : 34 milli secondes
// Nombre d'instances 502 : duree de 1000 changement de dep et preference : 474 milli secondes
// creating 100 instances
// Nombre d'instances 602 : duree de 1000 appels sans changement : 8 milli secondes
// Nombre d'instances 602 : duree de 1000 appels avec contrainte et changement de dep : 18 milli secondes
// Nombre d'instances 602 : duree de 1000 changement de dep et preference : 519 milli secondes
// creating 100 instances
// Nombre d'instances 702 : duree de 1000 appels sans changement : 10 milli secondes
// Nombre d'instances 702 : duree de 1000 appels avec contrainte et changement de dep : 26 milli secondes
// Nombre d'instances 702 : duree de 1000 changement de dep et preference : 658 milli secondes
// creating 100 instances
// Nombre d'instances 802 : duree de 1000 appels sans changement : 10 milli secondes
// Nombre d'instances 802 : duree de 1000 appels avec contrainte et changement de dep : 15 milli secondes
// Nombre d'instances 802 : duree de 1000 changement de dep et preference : 978 milli secondes
// creating 100 instances
// Nombre d'instances 902 : duree de 1000 appels sans changement : 11 milli secondes
// Nombre d'instances 902 : duree de 1000 appels avec contrainte et changement de dep : 26 milli secondes
// Nombre d'instances 902 : duree de 1000 changement de dep et preference : 976 milli secondes
// creating 100 instances
// Nombre d'instances 1002 : duree de 1000 appels sans changement : 12 milli secondes
// Nombre d'instances 1002 : duree de 1000 appels avec contrainte et changement de dep : 16 milli secondes
// Nombre d'instances 1002 : duree de 1000 changement de dep et preference : 1189 milli secondes
}
public void resolWithInstantiation () {
long fin ;
long duree ;
long deb ;
int nb = 1000;
// int nbInst = 0 ;
Instance test ;
String s ;
deb = System.nanoTime();
test = CST.componentBroker.getInstService(constraintDep) ;
fin = System.nanoTime();
System.out.println(constraintDep.getName());
duree = (fin - deb) ;
System.out.println("Time for first resolution : deploying and instantiating. : " + duree/1000000 + " milli secondes");
deb = System.nanoTime();
for (int i = 0; i < nb; i++) {
test = CST.componentBroker.getInstService(constraintDep) ;
test.setProperty("debit", 2) ;
s= constraintDep.getName() ;
// System.out.println(s);
}
fin = System.nanoTime();
duree = (fin - deb) ;
System.out.println("Duree de " + nb + " appels avec instantiation, contrainte et changement de dep : " + duree/1000000 + " milli secondes");
// S1ImplEmpty-0
// Time for first resolution : deploying and instantiating. : 314 milli secondes
// Duree de 1000 appels avec instantiation, contrainte et changement de dep : 9590 milli secondes
}
@Override
public void run() {
System.out.println("Starting test perf Link");
// resolWithInstantiation () ;
// testReactionSimple () ;
// testReaction () ;
// testPerfLink () ;
}
@Override
public void apamInit(Instance apamInstance) {
thisInstance = apamInstance ;
new Thread(this, "MainApam perftest").start();
}
@Override
public void apamRemove() {
}
}