| 1 4 package com.tctest.performance.faulting; 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 DualQueueFaultTestApp extends AbstractDualQueueFaultTestApp { 18 19 private final BlockingQueue rootQueue1; 20 private final BlockingQueue rootQueue2; 21 22 public DualQueueFaultTestApp(String appId, ApplicationConfig cfg, ListenerProvider listenerProvider) { 23 super(appId, cfg, listenerProvider); 24 rootQueue1 = new LinkedBlockingQueue (100); 25 rootQueue2 = new LinkedBlockingQueue (100); 26 } 27 28 public static void visitL1DSOConfig(ConfigVisitor visitor, DSOClientConfigHelper config) { 29 TransparencyClassSpec spec = visitConfig(visitor, config); 30 spec = config.getOrCreateSpec(Metronome.class.getName()); 31 String className = DualQueueFaultTestApp.class.getName(); 32 spec = config.getOrCreateSpec(className); 33 String methodExpression = "* " + className + "*.*(..)"; 34 config.addWriteAutolock(methodExpression); 35 spec.addRoot("rootQueue1", "rootQueue1"); 36 spec.addRoot("rootQueue2", "rootQueue2"); 37 } 38 39 public static void visitDSOApplicationConfig(ConfigVisitor visitor, DSOApplicationConfig config) { 40 visitConfig(visitor, config); 41 config.addIncludePattern(Metronome.class.getName()); 42 String className = DualQueueFaultTestApp.class.getName(); 43 config.addIncludePattern(className); 44 String methodExpression = "* " + className + "*.*(..)"; 45 config.addWriteAutolock(methodExpression); 46 config.addRoot("rootQueue1", className + ".rootQueue1"); 47 config.addRoot("rootQueue2", className + ".rootQueue2"); 48 } 49 50 protected void populate1(Object data) throws InterruptedException { 52 if (data instanceof Metronome) { 53 synchronized (data) { 54 ((Metronome) data).starttime = System.nanoTime(); 55 } 56 } 57 rootQueue1.put(data); 58 } 59 protected void populate2(Object data) throws InterruptedException { 60 if (data instanceof Metronome) { 61 synchronized (data) { 62 ((Metronome) data).starttime = System.nanoTime(); 63 } 64 } 65 rootQueue2.put(data); 66 } 67 68 protected void retrieve1() throws InterruptedException { 69 Object data; 70 data = rootQueue1.take(); 71 if (data instanceof Metronome) { 72 synchronized (data) { 73 ((Metronome) data).endtime = System.nanoTime(); 74 ((Metronome) data).object = null; } 76 results1().add(data); 77 } 78 } 79 80 protected void retrieve2() throws InterruptedException { 81 Object data; 82 data = rootQueue2.take(); 83 if (data instanceof Metronome) { 84 synchronized (data) { 85 ((Metronome) data).endtime = System.nanoTime(); 86 ((Metronome) data).object = null; } 88 results2().add(data); 89 } 90 } 91 92 protected String title() { 93 return "Dual Shared Queue Faulting Throughput"; 94 } 95 } 96 | Popular Tags |