1 4 package com.tctest.performance.throughput; 5 6 import com.tc.object.config.ConfigVisitor; 7 import com.tc.object.config.DSOApplicationConfig; 8 import com.tc.object.config.DSOClientConfigHelper; 9 import com.tc.object.config.TransparencyClassSpec; 10 import com.tc.simulator.app.ApplicationConfig; 11 import com.tc.simulator.listener.ListenerProvider; 12 import com.tctest.performance.generate.load.Metronome; 13 14 import java.util.concurrent.BlockingQueue ; 15 import java.util.concurrent.LinkedBlockingQueue ; 16 17 public final class DualQueueThroughputTestApp extends AbstractDualQueueThroughputTestApp { 18 19 private final BlockingQueue rootQueue1; 20 private final BlockingQueue rootQueue2; 21 22 public DualQueueThroughputTestApp(String appId, ApplicationConfig cfg, ListenerProvider listenerProvider) { 23 super(appId, cfg, listenerProvider); 24 rootQueue1 = new LinkedBlockingQueue (); 25 rootQueue2 = new LinkedBlockingQueue (); 26 } 27 28 public static void visitL1DSOConfig(ConfigVisitor visitor, DSOClientConfigHelper config) { 29 TransparencyClassSpec spec = config.getOrCreateSpec(Metronome.class.getName()); 30 String className = DualQueueThroughputTestApp.class.getName(); 31 spec = config.getOrCreateSpec(className); 32 String methodExpression = "* " + className + "*.*(..)"; 33 config.addWriteAutolock(methodExpression); 34 spec.addRoot("rootQueue1", "rootQueue1"); 35 spec.addRoot("rootQueue2", "rootQueue2"); 36 } 37 38 public static void visitDSOApplicationConfig(ConfigVisitor visitor, DSOApplicationConfig config) { 39 config.addIncludePattern(Metronome.class.getName()); 40 String className = DualQueueThroughputTestApp.class.getName(); 41 config.addIncludePattern(className); 42 String methodExpression = "* " + className + "*.*(..)"; 43 config.addWriteAutolock(methodExpression); 44 config.addRoot("rootQueue1", className + ".rootQueue1"); 45 config.addRoot("rootQueue2", className + ".rootQueue2"); 46 } 47 48 protected void populate1(Object data) throws InterruptedException { 50 if (data instanceof Metronome) { 51 synchronized (data) { 52 ((Metronome) data).starttime = System.nanoTime(); 53 } 54 } 55 rootQueue1.put(data); 56 } 57 58 protected void populate2(Object data) throws InterruptedException { 59 if (data instanceof Metronome) { 60 synchronized (data) { 61 ((Metronome) data).starttime = System.nanoTime(); 62 } 63 } 64 rootQueue2.put(data); 65 } 66 67 protected void retrieve1() throws InterruptedException { 68 Object data; 69 data = rootQueue1.take(); 70 if (data instanceof Metronome) { 71 synchronized (data) { 72 ((Metronome) data).endtime = System.nanoTime(); 73 } 74 results1().add(data); 75 } 76 } 77 78 protected void retrieve2() throws InterruptedException { 79 Object data; 80 data = rootQueue2.take(); 81 if (data instanceof Metronome) { 82 synchronized (data) { 83 ((Metronome) data).endtime = System.nanoTime(); 84 } 85 results2().add(data); 86 } 87 } 88 89 protected String title() { 90 return "Dual Shared Queue Throughput"; 91 } 92 } 93 | Popular Tags |