1 4 package com.tctest.performance.faulting; 5 6 import EDU.oswego.cs.dl.util.concurrent.LinkedQueue; 7 8 import com.tc.object.config.ConfigVisitor; 9 import com.tc.object.config.DSOApplicationConfig; 10 import com.tc.object.config.DSOClientConfigHelper; 11 import com.tc.object.config.TransparencyClassSpec; 12 import com.tc.object.config.spec.LinkedQueueSpec; 13 import com.tc.simulator.app.ApplicationConfig; 14 import com.tc.simulator.listener.ListenerProvider; 15 import com.tctest.performance.generate.load.Metronome; 16 17 public final class SingleOswegoQueueFaultTestApp extends AbstractSingleQueueFaultTestApp { 18 19 private final LinkedQueue rootQueue; 20 21 public SingleOswegoQueueFaultTestApp(String appId, ApplicationConfig cfg, ListenerProvider listenerProvider) { 22 super(appId, cfg, listenerProvider); 23 rootQueue = new LinkedQueue(); 24 } 25 26 public static void visitL1DSOConfig(ConfigVisitor visitor, DSOClientConfigHelper config) { 27 TransparencyClassSpec spec = visitConfig(visitor, config); 28 spec = config.getOrCreateSpec(Metronome.class.getName()); 29 String className = SingleOswegoQueueFaultTestApp.class.getName(); 30 spec = config.getOrCreateSpec(className); 31 String methodExpression = "* " + className + "*.*(..)"; 32 config.addWriteAutolock(methodExpression); 33 spec.addRoot("rootQueue", "rootQueue"); 34 new LinkedQueueSpec().visit(visitor, config); 35 } 36 37 public static void visitDSOApplicationConfig(ConfigVisitor visitor, DSOApplicationConfig config) { 38 visitConfig(visitor, config); 39 config.addIncludePattern(Metronome.class.getName()); 40 String className = SingleOswegoQueueFaultTestApp.class.getName(); 41 config.addIncludePattern(className); 42 String methodExpression = "* " + className + "*.*(..)"; 43 config.addWriteAutolock(methodExpression); 44 config.addRoot("rootQueue", className + ".rootQueue"); 45 new LinkedQueueSpec().visit(visitor, config); 46 } 47 48 protected void populate(Object data) throws InterruptedException { 49 if (data instanceof Metronome) { 50 synchronized (data) { 51 ((Metronome) data).starttime = System.nanoTime(); 52 } 53 } 54 rootQueue.put(data); 55 } 56 57 protected void retrieve() throws InterruptedException { 58 Object data; 59 data = rootQueue.take(); 60 if (data instanceof Metronome) { 61 synchronized (data) { 62 ((Metronome) data).endtime = System.nanoTime(); 63 ((Metronome) data).object = null; } 65 results().add(data); 66 } 67 } 68 69 protected String title() { 70 return "Single Oswego Shared Queue Faulting Throughput"; 71 } 72 } 73 | Popular Tags |