diff --git a/hints.txt b/hints.txt index 44162609391ff26b6431f211e7c4f2205f96f913..1785a5d5d674dc35f699d336ece1351052b22c7f 100644 --- a/hints.txt +++ b/hints.txt @@ -1,4 +1,10 @@ -a pipeline needs to be a stage, too, to allow the composition of stages -instead of using work-stealing, sort the input in desc order to process the most computationally intensive elements first (load-balancing) -for a novice programmer, it is difficult to select the best choice and combination of patterns to maximize performance +-switch vs. farm: + -switch: different branch logics + -farm: same branch logics +-if executed send() method, execute the corresponding successor stage at once to avoid scheduling, i.e., waste of performance + -same thread: send = put to pipe & execute corresponding successor stage + -different thread: send = put to pipe (only) - \ No newline at end of file diff --git a/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/File2RecordFilter.java b/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/Dir2RecordFilter.java similarity index 96% rename from src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/File2RecordFilter.java rename to src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/Dir2RecordFilter.java index 6132236d45ccd20266ee251579b82e08e942c84b..65c5dad611b30a573418c42b17c53335e666cf73 100644 --- a/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/File2RecordFilter.java +++ b/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/Dir2RecordFilter.java @@ -38,14 +38,14 @@ import kieker.common.util.filesystem.FSUtil; * * @since 1.10 */ -public class File2RecordFilter extends Pipeline<File, IMonitoringRecord> { +public class Dir2RecordFilter extends Pipeline<File, IMonitoringRecord> { private ClassNameRegistryRepository classNameRegistryRepository; /** * @since 1.10 */ - public File2RecordFilter(final ClassNameRegistryRepository classNameRegistryRepository) { + public Dir2RecordFilter(final ClassNameRegistryRepository classNameRegistryRepository) { this.classNameRegistryRepository = classNameRegistryRepository; // FIXME does not yet work with more than one thread due to classNameRegistryRepository: classNameRegistryRepository is set after the ctor @@ -91,7 +91,7 @@ public class File2RecordFilter extends Pipeline<File, IMonitoringRecord> { /** * @since 1.10 */ - public File2RecordFilter() { + public Dir2RecordFilter() { this(null); } diff --git a/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/DirWithBin2RecordFilter.java b/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/DirWithBin2RecordFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..9d63b583a5bc0352d7f10bee1da7f47d97e281f4 --- /dev/null +++ b/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/DirWithBin2RecordFilter.java @@ -0,0 +1,40 @@ +package teetime.variant.methodcallWithPorts.stage.kieker; + +import java.io.File; + +import teetime.variant.methodcallWithPorts.framework.core.Pipeline; +import teetime.variant.methodcallWithPorts.stage.io.Directory2FilesFilter; +import teetime.variant.methodcallWithPorts.stage.kieker.className.ClassNameRegistryCreationFilter; +import teetime.variant.methodcallWithPorts.stage.kieker.className.ClassNameRegistryRepository; +import teetime.variant.methodcallWithPorts.stage.kieker.fileToRecord.BinaryFile2RecordFilter; + +import kieker.common.record.IMonitoringRecord; + +public class DirWithBin2RecordFilter extends Pipeline<File, IMonitoringRecord> { + + private ClassNameRegistryRepository classNameRegistryRepository; + + public DirWithBin2RecordFilter(final ClassNameRegistryRepository classNameRegistryRepository) { + this.classNameRegistryRepository = classNameRegistryRepository; + + final ClassNameRegistryCreationFilter classNameRegistryCreationFilter = new ClassNameRegistryCreationFilter(classNameRegistryRepository); + final Directory2FilesFilter directory2FilesFilter = new Directory2FilesFilter(); + final BinaryFile2RecordFilter binaryFile2RecordFilter = new BinaryFile2RecordFilter(classNameRegistryRepository); + + this.setFirstStage(classNameRegistryCreationFilter); + this.addIntermediateStage(directory2FilesFilter); + this.setLastStage(binaryFile2RecordFilter); + } + + public DirWithBin2RecordFilter() { + this(null); + } + + public ClassNameRegistryRepository getClassNameRegistryRepository() { + return this.classNameRegistryRepository; + } + + public void setClassNameRegistryRepository(final ClassNameRegistryRepository classNameRegistryRepository) { + this.classNameRegistryRepository = classNameRegistryRepository; + } +} diff --git a/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/DirWithDat2RecordFilter.java b/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/DirWithDat2RecordFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..e41429e289ff6f90fed5f65fa8046c11bdc20ca9 --- /dev/null +++ b/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/DirWithDat2RecordFilter.java @@ -0,0 +1,40 @@ +package teetime.variant.methodcallWithPorts.stage.kieker; + +import java.io.File; + +import teetime.variant.methodcallWithPorts.framework.core.Pipeline; +import teetime.variant.methodcallWithPorts.stage.io.Directory2FilesFilter; +import teetime.variant.methodcallWithPorts.stage.kieker.className.ClassNameRegistryCreationFilter; +import teetime.variant.methodcallWithPorts.stage.kieker.className.ClassNameRegistryRepository; +import teetime.variant.methodcallWithPorts.stage.kieker.fileToRecord.DatFile2RecordFilter; + +import kieker.common.record.IMonitoringRecord; + +public class DirWithDat2RecordFilter extends Pipeline<File, IMonitoringRecord> { + + private ClassNameRegistryRepository classNameRegistryRepository; + + public DirWithDat2RecordFilter(final ClassNameRegistryRepository classNameRegistryRepository) { + this.classNameRegistryRepository = classNameRegistryRepository; + + final ClassNameRegistryCreationFilter classNameRegistryCreationFilter = new ClassNameRegistryCreationFilter(classNameRegistryRepository); + final Directory2FilesFilter directory2FilesFilter = new Directory2FilesFilter(); + final DatFile2RecordFilter datFile2RecordFilter = new DatFile2RecordFilter(classNameRegistryRepository); + + this.setFirstStage(classNameRegistryCreationFilter); + this.addIntermediateStage(directory2FilesFilter); + this.setLastStage(datFile2RecordFilter); + } + + public DirWithDat2RecordFilter() { + this(null); + } + + public ClassNameRegistryRepository getClassNameRegistryRepository() { + return this.classNameRegistryRepository; + } + + public void setClassNameRegistryRepository(final ClassNameRegistryRepository classNameRegistryRepository) { + this.classNameRegistryRepository = classNameRegistryRepository; + } +} diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/recordReader/RecordReaderAnalysis.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/recordReader/RecordReaderAnalysis.java index c9551b0a79c4d400e778ab4ea3c8a047f41c0648..8a1b3397d4da7ae6f34a9cbc1586ed2aebc9e327 100644 --- a/src/test/java/teetime/variant/methodcallWithPorts/examples/recordReader/RecordReaderAnalysis.java +++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/recordReader/RecordReaderAnalysis.java @@ -25,7 +25,7 @@ import teetime.variant.methodcallWithPorts.framework.core.RunnableStage; import teetime.variant.methodcallWithPorts.framework.core.pipe.SingleElementPipe; import teetime.variant.methodcallWithPorts.framework.core.pipe.SpScPipe; import teetime.variant.methodcallWithPorts.stage.CollectorSink; -import teetime.variant.methodcallWithPorts.stage.kieker.File2RecordFilter; +import teetime.variant.methodcallWithPorts.stage.kieker.Dir2RecordFilter; import teetime.variant.methodcallWithPorts.stage.kieker.className.ClassNameRegistryRepository; import kieker.common.record.IMonitoringRecord; @@ -53,7 +53,7 @@ public class RecordReaderAnalysis extends Analysis { private Pipeline<File, Object> buildProducerPipeline() { this.classNameRegistryRepository = new ClassNameRegistryRepository(); // create stages - File2RecordFilter file2RecordFilter = new File2RecordFilter(this.classNameRegistryRepository); + Dir2RecordFilter file2RecordFilter = new Dir2RecordFilter(this.classNameRegistryRepository); CollectorSink<IMonitoringRecord> collector = new CollectorSink<IMonitoringRecord>(this.elementCollection); final Pipeline<File, Object> pipeline = new Pipeline<File, Object>();