diff --git a/src/test/java/teetime/examples/throughput/MethodCallThoughputTimestampAnalysis5Test.java b/src/test/java/teetime/examples/throughput/MethodCallThoughputTimestampAnalysis5Test.java new file mode 100644 index 0000000000000000000000000000000000000000..5288049d141bb33dd95bb9da9575a713bb2b0cbb --- /dev/null +++ b/src/test/java/teetime/examples/throughput/MethodCallThoughputTimestampAnalysis5Test.java @@ -0,0 +1,77 @@ +/*************************************************************************** + * Copyright 2014 Kieker Project (http://kieker-monitoring.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ***************************************************************************/ +package teetime.examples.throughput; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Callable; + +import org.junit.Before; +import org.junit.Test; + +import teetime.examples.throughput.methodcall.MethodCallThroughputAnalysis5; +import teetime.util.StatisticsUtil; +import teetime.util.StopWatch; + +import kieker.common.logging.LogFactory; + +/** + * @author Christian Wulf + * + * @since 1.10 + */ +public class MethodCallThoughputTimestampAnalysis5Test { + + private static final int NUM_OBJECTS_TO_CREATE = 100000; + private static final int NUM_NOOP_FILTERS = 800; + + @Before + public void before() { + System.setProperty(LogFactory.CUSTOM_LOGGER_JVM, "NONE"); + } + + // 500 times faster than our new framework + // TODO check why + + @Test + public void testWithManyObjects() { + System.out.println("Testing teetime (mc) with NUM_OBJECTS_TO_CREATE=" + NUM_OBJECTS_TO_CREATE + ", NUM_NOOP_FILTERS=" + + NUM_NOOP_FILTERS + "..."); + final StopWatch stopWatch = new StopWatch(); + final List<TimestampObject> timestampObjects = new ArrayList<TimestampObject>(NUM_OBJECTS_TO_CREATE); + + final MethodCallThroughputAnalysis5 analysis = new MethodCallThroughputAnalysis5(); + analysis.setNumNoopFilters(NUM_NOOP_FILTERS); + analysis.setTimestampObjects(timestampObjects); + analysis.setInput(NUM_OBJECTS_TO_CREATE, new Callable<TimestampObject>() { + @Override + public TimestampObject call() throws Exception { + return new TimestampObject(); + } + }); + analysis.init(); + + stopWatch.start(); + try { + analysis.start(); + } finally { + stopWatch.end(); + } + + StatisticsUtil.printStatistics(stopWatch.getDurationInNs(), timestampObjects); + } + +} diff --git a/src/test/java/teetime/examples/throughput/MethodCallThoughputTimestampAnalysis6Test.java b/src/test/java/teetime/examples/throughput/MethodCallThoughputTimestampAnalysis6Test.java new file mode 100644 index 0000000000000000000000000000000000000000..4a7923f3ba9d37fbdad423f7a5d2febc494ee207 --- /dev/null +++ b/src/test/java/teetime/examples/throughput/MethodCallThoughputTimestampAnalysis6Test.java @@ -0,0 +1,77 @@ +/*************************************************************************** + * Copyright 2014 Kieker Project (http://kieker-monitoring.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ***************************************************************************/ +package teetime.examples.throughput; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Callable; + +import org.junit.Before; +import org.junit.Test; + +import teetime.examples.throughput.methodcall.MethodCallThroughputAnalysis6; +import teetime.util.StatisticsUtil; +import teetime.util.StopWatch; + +import kieker.common.logging.LogFactory; + +/** + * @author Christian Wulf + * + * @since 1.10 + */ +public class MethodCallThoughputTimestampAnalysis6Test { + + private static final int NUM_OBJECTS_TO_CREATE = 100000; + private static final int NUM_NOOP_FILTERS = 800; + + @Before + public void before() { + System.setProperty(LogFactory.CUSTOM_LOGGER_JVM, "NONE"); + } + + // 500 times faster than our new framework + // TODO check why + + @Test + public void testWithManyObjects() { + System.out.println("Testing teetime (mc) with NUM_OBJECTS_TO_CREATE=" + NUM_OBJECTS_TO_CREATE + ", NUM_NOOP_FILTERS=" + + NUM_NOOP_FILTERS + "..."); + final StopWatch stopWatch = new StopWatch(); + final List<TimestampObject> timestampObjects = new ArrayList<TimestampObject>(NUM_OBJECTS_TO_CREATE); + + final MethodCallThroughputAnalysis6 analysis = new MethodCallThroughputAnalysis6(); + analysis.setNumNoopFilters(NUM_NOOP_FILTERS); + analysis.setTimestampObjects(timestampObjects); + analysis.setInput(NUM_OBJECTS_TO_CREATE, new Callable<TimestampObject>() { + @Override + public TimestampObject call() throws Exception { + return new TimestampObject(); + } + }); + analysis.init(); + + stopWatch.start(); + try { + analysis.start(); + } finally { + stopWatch.end(); + } + + StatisticsUtil.printStatistics(stopWatch.getDurationInNs(), timestampObjects); + } + +} diff --git a/src/test/java/teetime/examples/throughput/MethodCallThoughputTimestampAnalysis7Test.java b/src/test/java/teetime/examples/throughput/MethodCallThoughputTimestampAnalysis7Test.java new file mode 100644 index 0000000000000000000000000000000000000000..7d816c11d38d3d96a128b669b6dcc6a6231ddaeb --- /dev/null +++ b/src/test/java/teetime/examples/throughput/MethodCallThoughputTimestampAnalysis7Test.java @@ -0,0 +1,78 @@ +/*************************************************************************** + * Copyright 2014 Kieker Project (http://kieker-monitoring.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ***************************************************************************/ +package teetime.examples.throughput; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Callable; + +import org.junit.Before; +import org.junit.Test; + +import teetime.examples.throughput.methodcall.MethodCallThroughputAnalysis6; +import teetime.examples.throughput.methodcall.MethodCallThroughputAnalysis7; +import teetime.util.StatisticsUtil; +import teetime.util.StopWatch; + +import kieker.common.logging.LogFactory; + +/** + * @author Christian Wulf + * + * @since 1.10 + */ +public class MethodCallThoughputTimestampAnalysis7Test { + + private static final int NUM_OBJECTS_TO_CREATE = 100000; + private static final int NUM_NOOP_FILTERS = 800; + + @Before + public void before() { + System.setProperty(LogFactory.CUSTOM_LOGGER_JVM, "NONE"); + } + + // 500 times faster than our new framework + // TODO check why + + @Test + public void testWithManyObjects() { + System.out.println("Testing teetime (mc) with NUM_OBJECTS_TO_CREATE=" + NUM_OBJECTS_TO_CREATE + ", NUM_NOOP_FILTERS=" + + NUM_NOOP_FILTERS + "..."); + final StopWatch stopWatch = new StopWatch(); + final List<TimestampObject> timestampObjects = new ArrayList<TimestampObject>(NUM_OBJECTS_TO_CREATE); + + final MethodCallThroughputAnalysis7 analysis = new MethodCallThroughputAnalysis7(); + analysis.setNumNoopFilters(NUM_NOOP_FILTERS); + analysis.setTimestampObjects(timestampObjects); + analysis.setInput(NUM_OBJECTS_TO_CREATE, new Callable<TimestampObject>() { + @Override + public TimestampObject call() throws Exception { + return new TimestampObject(); + } + }); + analysis.init(); + + stopWatch.start(); + try { + analysis.start(); + } finally { + stopWatch.end(); + } + + StatisticsUtil.printStatistics(stopWatch.getDurationInNs(), timestampObjects); + } + +} diff --git a/src/test/java/teetime/examples/throughput/methodcall/AbstractStage.java b/src/test/java/teetime/examples/throughput/methodcall/AbstractStage.java index 83a53368c9236ed9ecc3925626689f0e12e44740..18f43603251edb14f64ee41f0b5c6d190140277f 100644 --- a/src/test/java/teetime/examples/throughput/methodcall/AbstractStage.java +++ b/src/test/java/teetime/examples/throughput/methodcall/AbstractStage.java @@ -18,6 +18,8 @@ abstract class AbstractStage<I, O> implements Stage<I, O> { private int index; + private Stage successor; + // @Override // public InputPort<I> getInputPort() { // return this.inputPort; @@ -100,8 +102,19 @@ abstract class AbstractStage<I, O> implements Stage<I, O> { return this.listener; } + @Override public void setListener(final OnDisableListener listener) { this.listener = listener; } + @Override + public Stage next() { + return this.successor; + } + + @Override + public void setSuccessor(final Stage<?, ?> successor) { + this.successor = successor; + } + } diff --git a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis3.java b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis3.java index 4f98f4c760ea3814ee1e2828ea39fd007f68e3cd..c627098aff98288cf1f4d2dac3f4f3157adc863e 100644 --- a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis3.java +++ b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis3.java @@ -88,6 +88,7 @@ public class MethodCallThroughputAnalysis3 extends Analysis { stage = stages[i]; element = stage.execute(element); } + return true; } diff --git a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis4.java b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis4.java index bb17235f4a90ecd085a9ac51a9973f461cd860f8..eaf0c945dd22ae8dc7fe72861bd8039dc5e55a3a 100644 --- a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis4.java +++ b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis4.java @@ -82,6 +82,7 @@ public class MethodCallThroughputAnalysis4 extends Analysis { for (final NoopFilter<TimestampObject> noopFilter : noopFilters) { object = noopFilter.execute(object); } + object = stopTimestampFilter.execute(object); collectorSink.execute(object); return true; diff --git a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis5.java b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis5.java new file mode 100644 index 0000000000000000000000000000000000000000..394e28a6854c26f2a21819dfaaf36c1781f84c2b --- /dev/null +++ b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis5.java @@ -0,0 +1,140 @@ +/*************************************************************************** + * Copyright 2014 Kieker Project (http://kieker-monitoring.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ***************************************************************************/ +package teetime.examples.throughput.methodcall; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.Callable; + +import teetime.examples.throughput.TimestampObject; +import teetime.framework.core.Analysis; + +/** + * @author Christian Wulf + * + * @since 1.10 + */ +public class MethodCallThroughputAnalysis5 extends Analysis { + + public abstract class WrappingPipeline { + + public abstract boolean execute(); + + } + + private long numInputObjects; + private Callable<TimestampObject> inputObjectCreator; + private int numNoopFilters; + private List<TimestampObject> timestampObjects; + private Runnable runnable; + + @Override + public void init() { + super.init(); + this.runnable = this.buildPipeline(); + } + + /** + * @param numNoopFilters + * @since 1.10 + */ + private Runnable buildPipeline() { + @SuppressWarnings("unchecked") + final NoopFilter<TimestampObject>[] noopFilters = new NoopFilter[this.numNoopFilters]; + // create stages + final ObjectProducer<TimestampObject> objectProducer = new ObjectProducer<TimestampObject>(this.numInputObjects, this.inputObjectCreator); + final StartTimestampFilter startTimestampFilter = new StartTimestampFilter(); + for (int i = 0; i < noopFilters.length; i++) { + noopFilters[i] = new NoopFilter<TimestampObject>(); + } + final StopTimestampFilter stopTimestampFilter = new StopTimestampFilter(); + final CollectorSink<TimestampObject> collectorSink = new CollectorSink<TimestampObject>(this.timestampObjects); + + final List<Stage> stageList = new ArrayList<Stage>(); + stageList.add(objectProducer); + stageList.add(startTimestampFilter); + stageList.addAll(Arrays.asList(noopFilters)); + stageList.add(stopTimestampFilter); + stageList.add(collectorSink); + + // using an array decreases the performance from 60ms to 440ms (by 7x) + final Stage[] stages = stageList.toArray(new Stage[0]); + for (int i = 0; i < stages.length - 1; i++) { + stages[i].setSuccessor(stages[i + 1]); + } + final Stage startStage = stages[0]; + + final WrappingPipeline pipeline = new WrappingPipeline() { + @Override + public boolean execute() { + Object element = null; + Stage stage = startStage; + + element = stage.execute(element); + if (element == null) { + return false; + } + stage = stage.next(); + + do { + element = stage.execute(element); + stage = stage.next(); + } while (stage != null); + return true; + } + + }; + + final Runnable runnable = new Runnable() { + @Override + public void run() { + boolean success; + do { + success = pipeline.execute(); + } while (success); + } + }; + return runnable; + } + + @Override + public void start() { + super.start(); + this.runnable.run(); + } + + public void setInput(final int numInputObjects, final Callable<TimestampObject> inputObjectCreator) { + this.numInputObjects = numInputObjects; + this.inputObjectCreator = inputObjectCreator; + } + + public int getNumNoopFilters() { + return this.numNoopFilters; + } + + public void setNumNoopFilters(final int numNoopFilters) { + this.numNoopFilters = numNoopFilters; + } + + public List<TimestampObject> getTimestampObjects() { + return this.timestampObjects; + } + + public void setTimestampObjects(final List<TimestampObject> timestampObjects) { + this.timestampObjects = timestampObjects; + } +} diff --git a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis6.java b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis6.java new file mode 100644 index 0000000000000000000000000000000000000000..2b74c99a09b5624e6a96a83ab052db3f75b6d2aa --- /dev/null +++ b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis6.java @@ -0,0 +1,933 @@ +/*************************************************************************** + * Copyright 2014 Kieker Project (http://kieker-monitoring.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ***************************************************************************/ +package teetime.examples.throughput.methodcall; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.Callable; + +import teetime.examples.throughput.TimestampObject; +import teetime.framework.core.Analysis; + +/** + * @author Christian Wulf + * + * @since 1.10 + */ +public class MethodCallThroughputAnalysis6 extends Analysis { + + public abstract class WrappingPipeline { + + public abstract boolean execute(); + + } + + private long numInputObjects; + private Callable<TimestampObject> inputObjectCreator; + private int numNoopFilters; + private List<TimestampObject> timestampObjects; + private Runnable runnable; + + @Override + public void init() { + super.init(); + this.runnable = this.buildPipeline(); + } + + /** + * @param numNoopFilters + * @since 1.10 + */ + private Runnable buildPipeline() { + @SuppressWarnings("unchecked") + final NoopFilter<TimestampObject>[] noopFilters = new NoopFilter[this.numNoopFilters]; + // create stages + final ObjectProducer<TimestampObject> objectProducer = new ObjectProducer<TimestampObject>(this.numInputObjects, this.inputObjectCreator); + final StartTimestampFilter startTimestampFilter = new StartTimestampFilter(); + for (int i = 0; i < noopFilters.length; i++) { + noopFilters[i] = new NoopFilter<TimestampObject>(); + } + final StopTimestampFilter stopTimestampFilter = new StopTimestampFilter(); + final CollectorSink<TimestampObject> collectorSink = new CollectorSink<TimestampObject>(this.timestampObjects); + + List<Stage> stages = new ArrayList<Stage>(); + stages.add(objectProducer); + stages.add(startTimestampFilter); + stages.addAll(Arrays.asList(noopFilters)); + stages.add(stopTimestampFilter); + stages.add(collectorSink); + + final WrappingPipeline pipeline = new WrappingPipeline() { + @Override + public boolean execute() { + TimestampObject object = objectProducer.execute(null); + if (object == null) { + return false; + } + object = startTimestampFilter.execute(object); + // for (final NoopFilter<TimestampObject> noopFilter : noopFilters) { + // object = noopFilter.execute(object); + // } + + int i = 0; + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + object = noopFilters[i++].execute(object); + + object = stopTimestampFilter.execute(object); + collectorSink.execute(object); + return true; + } + + }; + + final Runnable runnable = new Runnable() { + @Override + public void run() { + boolean success; + do { + success = pipeline.execute(); + } while (success); + } + }; + return runnable; + } + + @Override + public void start() { + super.start(); + this.runnable.run(); + } + + public void setInput(final int numInputObjects, final Callable<TimestampObject> inputObjectCreator) { + this.numInputObjects = numInputObjects; + this.inputObjectCreator = inputObjectCreator; + } + + public int getNumNoopFilters() { + return this.numNoopFilters; + } + + public void setNumNoopFilters(final int numNoopFilters) { + this.numNoopFilters = numNoopFilters; + } + + public List<TimestampObject> getTimestampObjects() { + return this.timestampObjects; + } + + public void setTimestampObjects(final List<TimestampObject> timestampObjects) { + this.timestampObjects = timestampObjects; + } +} diff --git a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis7.java b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis7.java new file mode 100644 index 0000000000000000000000000000000000000000..965a101b534040d7b4a0601e33622f0cfa86fc09 --- /dev/null +++ b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis7.java @@ -0,0 +1,131 @@ +/*************************************************************************** + * Copyright 2014 Kieker Project (http://kieker-monitoring.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ***************************************************************************/ +package teetime.examples.throughput.methodcall; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.Callable; + +import teetime.examples.throughput.TimestampObject; +import teetime.framework.core.Analysis; + +/** + * @author Christian Wulf + * + * @since 1.10 + */ +public class MethodCallThroughputAnalysis7 extends Analysis { + + public abstract class WrappingPipeline { + + public abstract boolean execute(); + + } + + private long numInputObjects; + private Callable<TimestampObject> inputObjectCreator; + private int numNoopFilters; + private List<TimestampObject> timestampObjects; + private Runnable runnable; + + @Override + public void init() { + super.init(); + this.runnable = this.buildPipeline(); + } + + /** + * @param numNoopFilters + * @since 1.10 + */ + private Runnable buildPipeline() { + @SuppressWarnings("unchecked") + final NoopFilter<TimestampObject>[] noopFilters = new NoopFilter[this.numNoopFilters]; + // create stages + final ObjectProducer<TimestampObject> objectProducer = new ObjectProducer<TimestampObject>(this.numInputObjects, this.inputObjectCreator); + final StartTimestampFilter startTimestampFilter = new StartTimestampFilter(); + for (int i = 0; i < noopFilters.length; i++) { + noopFilters[i] = new NoopFilter<TimestampObject>(); + } + final StopTimestampFilter stopTimestampFilter = new StopTimestampFilter(); + final CollectorSink<TimestampObject> collectorSink = new CollectorSink<TimestampObject>(this.timestampObjects); + + final List<Stage> stageList = new ArrayList<Stage>(); + stageList.add(objectProducer); + stageList.add(startTimestampFilter); + stageList.addAll(Arrays.asList(noopFilters)); + stageList.add(stopTimestampFilter); + stageList.add(collectorSink); + + // using an array decreases the performance from 60ms to 200ms (by 3x) + final Stage[] stages = stageList.toArray(new Stage[0]); + + final WrappingPipeline pipeline = new WrappingPipeline() { + @Override + public boolean execute() { + // using the foreach for arrays (i.e., w/o using an iterator variable) increases the performance from 200ms to 130ms + Object element = null; + for (Stage stage : stages) { + element = stage.execute(element); + if (element == null) { + return false; + } + } + return true; + } + + }; + + final Runnable runnable = new Runnable() { + @Override + public void run() { + boolean success; + do { + success = pipeline.execute(); + } while (success); + } + }; + return runnable; + } + + @Override + public void start() { + super.start(); + this.runnable.run(); + } + + public void setInput(final int numInputObjects, final Callable<TimestampObject> inputObjectCreator) { + this.numInputObjects = numInputObjects; + this.inputObjectCreator = inputObjectCreator; + } + + public int getNumNoopFilters() { + return this.numNoopFilters; + } + + public void setNumNoopFilters(final int numNoopFilters) { + this.numNoopFilters = numNoopFilters; + } + + public List<TimestampObject> getTimestampObjects() { + return this.timestampObjects; + } + + public void setTimestampObjects(final List<TimestampObject> timestampObjects) { + this.timestampObjects = timestampObjects; + } +} diff --git a/src/test/java/teetime/examples/throughput/methodcall/Pipeline.java b/src/test/java/teetime/examples/throughput/methodcall/Pipeline.java index 975f9e0092b1aec1296b806c4c66d0099948e8d0..f0789f7b7dd7bc58d6c03021d5c497ba9b8cf6c8 100644 --- a/src/test/java/teetime/examples/throughput/methodcall/Pipeline.java +++ b/src/test/java/teetime/examples/throughput/methodcall/Pipeline.java @@ -146,6 +146,16 @@ public class Pipeline<I, O> implements Stage<I, O>, OnDisableListener { throw new IllegalStateException(); } + @Override + public Stage next() { + throw new IllegalStateException(); + } + + @Override + public void setSuccessor(final Stage<?, ?> successor) { + throw new IllegalStateException(); + } + // @Override // public OutputPort getOutputPort() { // return this.lastStage.getOutputPort(); diff --git a/src/test/java/teetime/examples/throughput/methodcall/Stage.java b/src/test/java/teetime/examples/throughput/methodcall/Stage.java index d9e397246beeeeb54d27e57e23908b78698489c6..d9c0670ea165f9c0a95517f11fc74991907c5b4c 100644 --- a/src/test/java/teetime/examples/throughput/methodcall/Stage.java +++ b/src/test/java/teetime/examples/throughput/methodcall/Stage.java @@ -23,4 +23,8 @@ public interface Stage<I, O> { void setParentStage(Stage parentStage, int index); void setListener(OnDisableListener listener); + + Stage next(); + + void setSuccessor(Stage<?, ?> successor); }