Remove SLG Linux translation unit hierarchy - step 2
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/customization/CustomRunnableTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/customization/CustomRunnableTransformer.java
index 35105eb..419af5e 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/customization/CustomRunnableTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/customization/CustomRunnableTransformer.java
@@ -31,7 +31,7 @@
@Inject private ActivityGraphItemTransformer psCallGraphItemTransformer;
@Override
- public RunnableTranslationUnit transform(final org.eclipse.app4mc.amalthea.model.Runnable runnable) {
+ public RunnableTranslationUnit transform(final Runnable runnable) {
final ArrayList<?> key = CollectionLiterals.newArrayList(runnable);
final CustomRunnableTranslationUnit result;
synchronized (_createCache_transform) {
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/artefacts/LinuxGoogleGuiceModule.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/artefacts/LinuxGoogleGuiceModule.java
index 7ea4ee4..6006031 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/artefacts/LinuxGoogleGuiceModule.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/artefacts/LinuxGoogleGuiceModule.java
@@ -35,6 +35,7 @@
protected void configure() {
bind(Properties.class).toInstance(this.properties);
bind(CustomObjectsStore.class).toInstance(new CustomObjectsStore());
+
bind(RunnableTransformer.class).to(CustomRunnableTransformer.class);
}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/artefacts/LinuxRootTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/artefacts/LinuxRootTransformer.java
index f44cf61..90e2eef 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/artefacts/LinuxRootTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/artefacts/LinuxRootTransformer.java
@@ -101,7 +101,6 @@
}
}
}
-
}
}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxBaseTranslationUnit.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxBaseTranslationUnit.java
deleted file mode 100644
index 3f75c23..0000000
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxBaseTranslationUnit.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- ********************************************************************************
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- *
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Robert Bosch GmbH - initial API and implementation
- ********************************************************************************
- */
-
-package org.eclipse.app4mc.slg.linux.generators;
-
-import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-
-public abstract class LinuxBaseTranslationUnit extends TranslationUnit {
-
- private static final String SRC_FOLDER = "/_src/";
- private static final String INC_FOLDER = "/_inc/";
-
- private OutputBuffer outputBuffer;
-
- public LinuxBaseTranslationUnit(final OutputBuffer outputBuffer) {
- super("MODULE_PATH", "CALL", "MODULE.H", "MODULE.C"); // dummy values for unused data
- this.outputBuffer = outputBuffer;
- }
-
- public abstract String getBasePath();
-
- public abstract String getModuleName();
-
- public String getModulePath() {
- return getBasePath() + "/" + getModuleName();
- }
-
- @Override
- public String getIncFile() {
- return (this.getModuleName() + ".h");
- }
-
- @Override
- public String getSrcFile() {
- return (this.getModuleName() + ".c");
- }
-
- public String getIncPath() {
- return this.getModulePath() + INC_FOLDER + this.getIncFile();
- }
-
- public String getSrcPath() {
- return this.getModulePath() + SRC_FOLDER + this.getSrcFile();
- }
-
- public boolean isIncFileEmpty() {
- return !outputBuffer.bufferExists("H", getModulePath() + INC_FOLDER + getModuleName());
- }
-
- public boolean isSrcFileEmpty() {
- return !outputBuffer.bufferExists("C", getModulePath() + SRC_FOLDER + getModuleName());
- }
-
- public boolean incAppend(String str) {
- return outputBuffer.appendTo("H", getModulePath() + INC_FOLDER + getModuleName(), str);
- }
-
- public boolean srcAppend(String str) {
- return outputBuffer.appendTo("C", getModulePath() + SRC_FOLDER + getModuleName(), str);
- }
-
-}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxLabelAccessTranslationUnit.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxLabelAccessTranslationUnit.java
deleted file mode 100644
index 96975c1..0000000
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxLabelAccessTranslationUnit.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- ********************************************************************************
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- *
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Robert Bosch GmbH - initial API and implementation
- ********************************************************************************
- */
-
-package org.eclipse.app4mc.slg.linux.generators;
-
-import static org.eclipse.app4mc.amalthea.model.LabelAccessEnum._UNDEFINED_;
-
-import org.eclipse.app4mc.amalthea.model.LabelAccess;
-import org.eclipse.app4mc.amalthea.model.MinAvgMaxStatistic;
-import org.eclipse.app4mc.amalthea.model.NumericStatistic;
-import org.eclipse.app4mc.amalthea.model.SingleValueStatistic;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-
-public class LinuxLabelAccessTranslationUnit extends LinuxBaseTranslationUnit {
-
- private final LinuxLabelTranslationUnit tuLabel;
- private final LabelAccess labelAccess;
-
- public LinuxLabelAccessTranslationUnit(
- final OutputBuffer outputBuffer,
- final LinuxLabelTranslationUnit tuLabel,
- final LabelAccess labelAccess) {
- super(outputBuffer);
- this.tuLabel = tuLabel;
- this.labelAccess = labelAccess;
- }
-
- // translation unit specific settings
-
- @Override
- public String getBasePath() { return this.tuLabel.getBasePath(); }
-
- @Override
- public String getModuleName() { return this.tuLabel.getModuleName(); }
-
- @Override
- public String getIncFile() { return this.tuLabel.getIncFile(); }
-
- // ---------- names of generated 'C' functions ----------
-
- @Override
- public String getCall() {
- if (labelAccess == null || tuLabel == null) return null;
-
- if (labelAccess.getAccess() == _UNDEFINED_) {
- if (labelAccess.getData() == null) {
- return "/* unspecified label access */";
- } else {
- return ("/*underspecified access to label" + this.labelAccess.getData().getName()) + "*/";
- }
- }
-
- final NumericStatistic stat = statisticValueOrNull(labelAccess);
- final String statString = (stat == null) ? "1" : getNumericStatistic(stat);
-
-
- switch (labelAccess.getAccess()) {
- case READ:
- return tuLabel.readCall(statString);
- case WRITE:
- return tuLabel.writeCall(statString);
- default:
- return null;
- }
- }
-
- // --------------------------------------------------
-
- private NumericStatistic statisticValueOrNull(final LabelAccess access) {
- if (access == null || access.getStatistic() == null) return null;
-
- return access.getStatistic().getValue();
- }
-
- private String getNumericStatistic(final NumericStatistic statistic) {
- if (statistic instanceof MinAvgMaxStatistic) {
- String valueString = String.format("%d", Math.ceil(((MinAvgMaxStatistic) statistic).getAvg()));
- return (valueString + " /*MinAvgMaxStatistic not supported yet*/");
- } else if (statistic instanceof SingleValueStatistic) {
- return String.format("%d", Math.ceil(((SingleValueStatistic) statistic).getValue()));
- }
- return null;
- }
-
-}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxLabelTranslationUnit.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxLabelTranslationUnit.java
deleted file mode 100644
index 7d3a7c0..0000000
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxLabelTranslationUnit.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- *
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Robert Bosch GmbH - initial API and implementation
- */
-
-package org.eclipse.app4mc.slg.linux.generators;
-
-import org.eclipse.app4mc.amalthea.model.Label;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-
-public class LinuxLabelTranslationUnit extends LinuxSyntheticTranslationUnit {
-
- public static String getModulePathStatic() {
- return getBasePathStatic() + "/" + getModuleNameStatic();
- }
-
- public static String getMakeFilePathStatic() {
- return getModulePathStatic() + "/" + getMakeFileName();
- }
-
- public static String getModuleNameStatic() {
- return "labels";
- }
-
- public static String getLibName() {
- return "LABELS_LIB";
- }
-
- @Override
- public String getModuleName() {
- return LinuxLabelTranslationUnit.getModuleNameStatic();
- }
-
- private String getName() {
- return this.label.getName();
- }
-
- @Override
- public String getIncFile() {
- return this.getModuleName() + ".h";
- }
-
- // ---------- names of generated 'C' functions ----------
- public String initCall() { return "initialize_" + getName(); }
- public String readCall(String param) { return "read_" + getName() + "(" + param + ")"; }
- public String writeCall(String param) { return "write_" + getName() + "(" + param + ")"; }
-
- // ----------
-
- private final Label label;
-
- public LinuxLabelTranslationUnit(final OutputBuffer outputBuffer, final Label label) {
- super(outputBuffer);
- this.label = label;
- this.genFiles();
- }
-
- public void genFiles() {
- if (this.isSrcFileEmpty()) {
- this.srcAppend("#include \"" + this.getIncFile() + "\"\n");
- this.srcAppend("#include <stdbool.h>\n\n");
- }
- this.incAppend(LinuxLabelGenerator.toH(label));
- this.srcAppend(LinuxLabelGenerator.toCpp(label));
- }
-
-}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxRealisiticSyntheticTranslationUnit.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxRealisiticSyntheticTranslationUnit.java
deleted file mode 100644
index 0a62c3a..0000000
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxRealisiticSyntheticTranslationUnit.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- *
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Robert Bosch GmbH - initial API and implementation
- */
-
-package org.eclipse.app4mc.slg.linux.generators;
-
-import org.eclipse.app4mc.slg.config.ConfigModel;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-
-import com.google.inject.Singleton;
-
-@Singleton
-public class LinuxRealisiticSyntheticTranslationUnit extends LinuxSyntheticTranslationUnit {
- public static String getModulePathStatic() {
- return getBasePathStatic() + "/" + getModuleNameStatic();
- }
-
- public static String getMakeFilePathStatic() {
- return getModulePathStatic() + "/" + getMakeFileName();
- }
-
- public static String getModuleNameStatic() {
- return "codesnippets";
- }
-
- public static String getLibName() {
- return "CODESNIPPETS_LIB";
- }
-
- @Override
- public String getModuleName() {
- return getModuleNameStatic();
- }
-
- @Override
- public String getIncFile() {
- return this.getModuleName() + ".h";
- }
-
- public LinuxRealisiticSyntheticTranslationUnit(final OutputBuffer outputBuffer, final ConfigModel configModel) {
- super(outputBuffer);
- }
-
-}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxRunnableTranslationUnit.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxRunnableTranslationUnit.java
deleted file mode 100644
index 336d76e..0000000
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxRunnableTranslationUnit.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- *
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Robert Bosch GmbH - initial API and implementation
- */
-package org.eclipse.app4mc.slg.linux.generators;
-
-import java.util.Properties;
-import java.util.Set;
-
-import org.eclipse.app4mc.amalthea.model.ActivityGraphItem;
-import org.eclipse.app4mc.amalthea.model.LabelAccess;
-import org.eclipse.app4mc.amalthea.model.LabelAccessEnum;
-import org.eclipse.app4mc.amalthea.model.LabelAccessStatistic;
-import org.eclipse.app4mc.amalthea.model.MinAvgMaxStatistic;
-import org.eclipse.app4mc.amalthea.model.NumericStatistic;
-import org.eclipse.app4mc.amalthea.model.ProcessingUnitDefinition;
-import org.eclipse.app4mc.amalthea.model.Runnable;
-import org.eclipse.app4mc.amalthea.model.SingleValueStatistic;
-import org.eclipse.app4mc.amalthea.model.Ticks;
-import org.eclipse.app4mc.slg.linux.generators.LinuxRunnableGenerator.Calculation;
-import org.eclipse.app4mc.slg.linux.transformers.sw.LinuxActivityGraphItemTransformer;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-
-public class LinuxRunnableTranslationUnit extends LinuxSyntheticTranslationUnit {
- public static String getModulePathStatic() {
- return getBasePathStatic() + "/" + getModuleNameStatic();
- }
-
- public static String getMakeFilePathStatic() {
- return getModulePathStatic() + "/" + getMakeFileName();
- }
-
- public static String getModuleNameStatic() {
- return "runnables";
- }
-
- public static String getLibName() {
- return "RUNNABLES_LIB";
- }
-
- @Override
- public String getModuleName() {
- return getModuleNameStatic();
- }
-
- @Override
- public String getCall() {
- String name = (this.runnable == null) ? "???" : runnable.getName();
- return name + "()";
- }
-
- @Override
- public String getIncFile() {
- return (getModuleName() + ".h");
- }
-
- private Runnable runnable;
- private Properties properties;
-
- public LinuxRunnableTranslationUnit(final OutputBuffer outputBuffer,
- final LinuxActivityGraphItemTransformer linuxCallGraphItemTransformer,
- final Runnable runnable, final Properties properties) {
- super(outputBuffer);
- this.runnable = runnable;
- this.properties = properties;
-
- this.genFiles();
- }
-
- private String runnableName() {
- return (runnable == null) ? "???" : runnable.getName();
- }
-
- public void genFiles() {
- if (isIncFileEmpty()) {
- incAppend(LinuxRunnableGenerator.snippetIncStart());
- }
- if (this.isSrcFileEmpty()) {
- srcAppend(LinuxRunnableGenerator.snippetSrcStart());
- }
-
- // write header
- incAppend("\n//Runnable " + runnableName() + "----\n");
- incAppend("void " + runnableName() + "(char* coreName);\n");
-
- Calculation calc = new Calculation();
- calc.ticksSumMap.put("default", Integer.valueOf(0));
-
- if (runnable != null && runnable.getActivityGraph() != null) {
- for (ActivityGraphItem item : runnable.getActivityGraph().getItems()) {
- if (item instanceof Ticks) {
- Ticks ticks = (Ticks) item;
- if (ticks.getDefault() != null && ticks.getDefault().getAverage() != null) {
- calc.ticksSum += ticks.getDefault().getAverage().intValue();
- calc.ticksSumMap.put("default", calc.ticksSum);
- }
-
- Set<ProcessingUnitDefinition> puDefinitions = ticks.getExtended().keySet();
- for (ProcessingUnitDefinition puDef : puDefinitions) {
- if (puDef != null) {
- String puDefName = puDef.getName();
- if (!calc.ticksSumMap.containsKey(puDefName)) {
- calc.ticksSumMap.put(puDefName, 0);
- }
- calc.ticksSumMap.put(puDefName, calc.ticksSumMap.get(puDefName) +
- ticks.getExtended().get(puDef).getAverage().intValue());
- }
- }
- } else if (item instanceof LabelAccess) {
- LabelAccess la = (LabelAccess) item;
- Float value = Float.parseFloat(
- properties.getOrDefault("labelAccessStatisticValueDefault", "1.0F").toString());
-
- LabelAccessStatistic labelStatistic = la.getStatistic();
- if (labelStatistic != null) {
- NumericStatistic labelStatisticValue = labelStatistic.getValue();
-
- if (labelStatisticValue instanceof SingleValueStatistic) {
- value = ((SingleValueStatistic) labelStatisticValue).getValue();
- } else if (labelStatisticValue instanceof MinAvgMaxStatistic) {
- // TODO: provide a configuration option, to select appropriate value
- // from labelStatistic (min/max/avg)
- // right now considering the average value
- value = ((MinAvgMaxStatistic) labelStatisticValue).getAvg();
- }
- }
-
- if (la.getAccess() == LabelAccessEnum.READ) {
- calc.readsSum += value.intValue();
- } else if (la.getAccess() == LabelAccessEnum.WRITE) {
- calc.writesSum += value.intValue();
- }
- }
- }
- }
-
- boolean useExperimental = Boolean.parseBoolean(properties.getProperty("experimentalCodeSnippetMatching"));
-
- String codeString = LinuxRunnableGenerator.syntheticLoad(useExperimental);
- srcAppend(LinuxRunnableGenerator.snippetSrcBody(runnable, codeString));
- }
-
-}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxStimulusTranslationUnit.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxStimulusTranslationUnit.java
deleted file mode 100644
index 6e80e42..0000000
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxStimulusTranslationUnit.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- *
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Robert Bosch GmbH - initial API and implementation
- */
-
-package org.eclipse.app4mc.slg.linux.generators;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-
-import org.eclipse.app4mc.amalthea.model.PeriodicStimulus;
-import org.eclipse.app4mc.amalthea.model.Stimulus;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-
-public class LinuxStimulusTranslationUnit extends LinuxSyntheticTranslationUnit {
-
- private List<Stimulus> stimuli = new ArrayList<>();
- private Properties properties;
-
- public LinuxStimulusTranslationUnit(final OutputBuffer outputBuffer, final Properties properties,
- final List<Stimulus> stimuli) {
- super(outputBuffer);
- this.properties = properties;
-
- for (Stimulus stimulus : stimuli) {
- if ((stimulus instanceof PeriodicStimulus)) {
- this.stimuli.add(stimulus);
- }
- }
-
- this.genFiles();
- }
-
- @Override
- public String getBasePath() {
- return "Executable";
- }
-
- @Override
- public String getModuleName() {
- return "main";
- }
-
- public void genFiles() {
- Stimulus lastStimulus = stimuli.isEmpty() ? null : stimuli.get(stimuli.size() - 1);
- boolean enableInstrumentation = Boolean.parseBoolean(properties.getProperty("enableInstrumentation"));
-
- srcAppend(LinuxStimulusGenerator.toSrc(stimuli, lastStimulus, enableInstrumentation));
- }
-
-}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxSyntheticTranslationUnit.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxSyntheticTranslationUnit.java
deleted file mode 100644
index 986118c..0000000
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxSyntheticTranslationUnit.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- ********************************************************************************
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- *
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Robert Bosch GmbH - initial API and implementation
- ********************************************************************************
- */
-
-package org.eclipse.app4mc.slg.linux.generators;
-
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-
-public abstract class LinuxSyntheticTranslationUnit extends LinuxBaseTranslationUnit {
-
- protected static String getBasePathStatic() {
- return "synthetic_gen";
- }
-
- protected static String getMakeFileName() {
- return "CMakeLists.txt";
- }
-
- @Override
- public String getBasePath() {
- return getBasePathStatic();
- }
-
- public LinuxSyntheticTranslationUnit(final OutputBuffer outputBuffer) {
- super(outputBuffer);
- }
-
-}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxTaskTranslationUnit.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxTaskTranslationUnit.java
deleted file mode 100644
index cbe6e7f..0000000
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxTaskTranslationUnit.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- *
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Robert Bosch GmbH - initial API and implementation
- */
-package org.eclipse.app4mc.slg.linux.generators;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.app4mc.amalthea.model.ActivityGraphItem;
-import org.eclipse.app4mc.amalthea.model.Amalthea;
-import org.eclipse.app4mc.amalthea.model.AmaltheaServices;
-import org.eclipse.app4mc.amalthea.model.Group;
-import org.eclipse.app4mc.amalthea.model.InterProcessStimulus;
-import org.eclipse.app4mc.amalthea.model.InterProcessTrigger;
-import org.eclipse.app4mc.amalthea.model.Process;
-import org.eclipse.app4mc.amalthea.model.ProcessingUnit;
-import org.eclipse.app4mc.amalthea.model.ProcessingUnitDefinition;
-import org.eclipse.app4mc.amalthea.model.Runnable;
-import org.eclipse.app4mc.amalthea.model.RunnableCall;
-import org.eclipse.app4mc.amalthea.model.Task;
-import org.eclipse.app4mc.amalthea.model.util.DeploymentUtil;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-
-public class LinuxTaskTranslationUnit extends LinuxSyntheticTranslationUnit {
- public static String getModulePathStatic() {
- return getBasePathStatic() + "/" + "tasks";
- }
-
- public static String getMakeFilePathStatic() {
- return getBasePathStatic() + "/" + "tasks" + "/" + getMakeFileName();
- }
-
- public static String getLibName() {
- return "TASKS_LIB";
- }
-
- @Override
- public String getModuleName() {
- return "tasks";
- }
-
- @Override
- public String getCall() {
- return task.getName() + "()";
- }
-
- @Override
- public String getIncFile() {
- return getModuleName() + ".h";
- }
-
- private final Task task;
-
- public LinuxTaskTranslationUnit(final OutputBuffer outputBuffer, final Task task) {
- super(outputBuffer);
- this.task = task;
-
- this.genFiles();
- }
-
- public void genFiles() {
- final Amalthea root = AmaltheaServices.getContainerOfType(task, Amalthea.class);
- final Set<ProcessingUnit> assignedCores = DeploymentUtil.getAssignedCoreForProcess(task, root);
-
- final StringBuilder puDefinition = new StringBuilder("default");
-
- if (assignedCores != null && !assignedCores.isEmpty()) {
- puDefinition.delete(0, puDefinition.length());
-
- ProcessingUnit pu = assignedCores.iterator().next();
- ProcessingUnitDefinition puDef = pu.getDefinition();
- String puDefName = (puDef == null) ? null : puDef.getName();
-
- puDefinition.append(puDefName);
- }
-
- final List<String> statements = new ArrayList<>();
- final List<Process> processedTasks = new ArrayList<>();
-
- if (task != null && task.getActivityGraph() != null) {
- for (ActivityGraphItem item : task.getActivityGraph().getItems()) {
-
- if (item instanceof Group) {
- for (ActivityGraphItem item2 : ((Group) item).getItems()) {
- if ((item2 instanceof RunnableCall)) {
- final Runnable runnable = ((RunnableCall) item2).getRunnable();
- statements.add("run_" + runnable.getName() + "(\"" + puDefinition.toString() + "\");");
- } else if ((item2 instanceof InterProcessTrigger)) {
- InterProcessStimulus stimulus = ((InterProcessTrigger) item2).getStimulus();
- LinuxTaskGenerator.handleInterProcessTrigger(statements, processedTasks, stimulus);
- }
- }
- } else if (item instanceof RunnableCall) {
- final Runnable runnable = ((RunnableCall) item).getRunnable();
- if ((runnable != null)) {
- statements.add("run_" + runnable.getName() + "(\"" + puDefinition.toString() + "\");");
- }
- } else if (item instanceof InterProcessTrigger) {
- InterProcessStimulus stimulus = ((InterProcessTrigger) item).getStimulus();
- LinuxTaskGenerator.handleInterProcessTrigger(statements, processedTasks, stimulus);
- }
- }
- }
-
- if (isIncFileEmpty()) {
- incAppend(LinuxTaskGenerator.snippetIncStart().toString());
- }
- if (isSrcFileEmpty()) {
- srcAppend(LinuxTaskGenerator.snippetSrcStart().toString());
- }
- srcAppend(LinuxTaskGenerator.toCpp(task, statements));
- incAppend(LinuxTaskGenerator.toH(task));
- }
-
-}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxTicksTranslationUnit.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxTicksTranslationUnit.java
deleted file mode 100644
index e931082..0000000
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxTicksTranslationUnit.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- *
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Robert Bosch GmbH - initial API and implementation
- */
-
-package org.eclipse.app4mc.slg.linux.generators;
-
-import org.eclipse.app4mc.amalthea.model.Ticks;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-
-public class LinuxTicksTranslationUnit extends LinuxBaseTranslationUnit {
- @Override
- public String getBasePath() {
- return this.tuTicksUtils.getBasePath();
- }
-
- @Override
- public String getModuleName() {
- return this.tuTicksUtils.getModuleName();
- }
-
- @Override
- public String getIncFile() {
- return getModuleName() + ".h";
- }
-
- @Override
- public String getCall() {
- return this.tuTicksUtils.getExecCall(LinuxTicksGenerator.getParameters(this.ticks.getDefault())).toString();
- }
-
- private final LinuxTicksUtilsTranslationUnit tuTicksUtils;
- private final Ticks ticks;
-
- public LinuxTicksTranslationUnit(final OutputBuffer outputBuffer, final LinuxTicksUtilsTranslationUnit tuTicksUtils,
- final Ticks ticks) {
- super(outputBuffer);
- this.tuTicksUtils = tuTicksUtils;
- this.ticks = ticks;
- }
-
-}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxTicksUtilsTranslationUnit.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxTicksUtilsTranslationUnit.java
deleted file mode 100644
index 5f58af8..0000000
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxTicksUtilsTranslationUnit.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- *
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Robert Bosch GmbH - initial API and implementation
- */
-
-package org.eclipse.app4mc.slg.linux.generators;
-
-import org.eclipse.app4mc.slg.config.ConfigModel;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-
-public class LinuxTicksUtilsTranslationUnit extends LinuxSyntheticTranslationUnit {
- public static String getModulePathStatic() {
- return getBasePathStatic() + "/" + getModuleNameStatic();
- }
-
- public static String getMakeFilePathStatic() {
- return getModulePathStatic() + "/" + getMakeFileName();
- }
-
- public static String getModuleNameStatic() {
- return "ticksUtils";
- }
-
- public static String getLibName() {
- return "TICKS_UTILS";
- }
-
- @Override
- public String getModuleName() {
- return getModuleNameStatic();
- }
-
- public CharSequence getExecCall(final String params) {
- return "burnTicks(" + params + ")";
- }
-
- /**
- * '''executeTicks_«valueClass.toString.split("\\.").last»(«params»)'''
- */
- @Override
- public String getIncFile() {
- return this.getModuleName() + ".h";
- }
-
- private final ConfigModel configModel;
- private final Object valueClass;
-
- public LinuxTicksUtilsTranslationUnit(final OutputBuffer outputBuffer, final ConfigModel configModel,
- final Object valueClass) {
- super(outputBuffer);
- this.configModel = configModel;
- this.valueClass = valueClass;
-
- this.genFiles();
- }
-
- public void genFiles() {
- if (isIncFileEmpty()) {
- toH();
- }
- if (isSrcFileEmpty()) {
- toCPP();
- }
- srcAppend(LinuxTicksUtilsGenerator.generateTicks(valueClass));
- incAppend(LinuxTicksUtilsGenerator.generateTicksDecleration(valueClass));
- }
-
- private void toCPP() {
- srcAppend("#include \"" + this.getIncFile() + "\"\n");
- final String ticksCodeSnippet = this.configModel.getCustomTickImpl().getValue();
-
- final String burnTicksBody = this.configModel.getCustomTickImpl().isEnable() ? ticksCodeSnippet : LinuxTicksUtilsGenerator.burnTicksDefault();
-
- srcAppend(LinuxTicksUtilsGenerator.burnTicks(burnTicksBody));
- srcAppend(LinuxTicksUtilsGenerator.burnTicksStatistics(this.configModel));
-
- }
-
- private void toH() {
-
- incAppend(LinuxTicksUtilsGenerator.burnTicksDecleration());
- incAppend(LinuxTicksUtilsGenerator.burnTicksStatisticsDecleration());
- }
-
-}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/LinuxModel2TextTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/LinuxModel2TextTransformer.java
index 3253d50..232b9ab 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/LinuxModel2TextTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/LinuxModel2TextTransformer.java
@@ -55,19 +55,19 @@
public void transform(final Amalthea model, final String outputFolder) {
final boolean experimentalCodeSnippetMatching = Boolean
- .parseBoolean(this.properties.getProperty("experimentalCodeSnippetMatching"));
+ .parseBoolean(properties.getProperty("experimentalCodeSnippetMatching"));
final boolean enableInstrumentation = Boolean
- .parseBoolean(this.properties.getProperty("enableInstrumentation"));
+ .parseBoolean(properties.getProperty("enableInstrumentation"));
final StimuliModel stimuliModel = ModelUtil.getOrCreateStimuliModel(model);
final SWModel swModel = ModelUtil.getOrCreateSwModel(model);
LOG.info("Starting Linux SLG code generation");
- this.outputBuffer.initialize(properties.getProperty("m2t_output_folder"));
- this.outputBuffer.configureFiletype("C", ".c", "// This code is auto-generated\n\n", null);
- this.outputBuffer.configureFiletype("H", ".h", "// This code is auto-generated\n\n#pragma once\n\n", null);
- this.outputBuffer.configureFiletype("OTHER", "", "", "");
+ outputBuffer.initialize(properties.getProperty("m2t_output_folder"));
+ outputBuffer.configureFiletype("C", ".c", "// This code is auto-generated\n\n", null);
+ outputBuffer.configureFiletype("H", ".h", "// This code is auto-generated\n\n#pragma once\n\n", null);
+ outputBuffer.configureFiletype("OTHER", "", "", "");
if (experimentalCodeSnippetMatching) {
realisticCodeBasedOnCodeSnippet.transform();
@@ -96,19 +96,19 @@
// ensure that the following files will be created
if (experimentalCodeSnippetMatching) {
- this.outputBuffer.appendTo("C", "synthetic_gen/ticksUtils/_src/ticksUtils", "");
- this.outputBuffer.appendTo("H", "synthetic_gen/ticksUtils/_inc/ticksUtils", "");
- this.outputBuffer.appendTo("C", "synthetic_gen/labels/_src/labels", "");
- this.outputBuffer.appendTo("H", "synthetic_gen/labels/_inc/labels", "");
+ outputBuffer.appendTo("C", "synthetic_gen/ticksUtils/_src/ticksUtils", "");
+ outputBuffer.appendTo("H", "synthetic_gen/ticksUtils/_inc/ticksUtils", "");
+ outputBuffer.appendTo("C", "synthetic_gen/labels/_src/labels", "");
+ outputBuffer.appendTo("H", "synthetic_gen/labels/_inc/labels", "");
} else {
- this.outputBuffer.appendTo("C", "synthetic_gen/codesnippets/_src/codesnippets", "");
- this.outputBuffer.appendTo("H", "synthetic_gen/codesnippets/_inc/codesnippets", "");
+ outputBuffer.appendTo("C", "synthetic_gen/codesnippets/_src/codesnippets", "");
+ outputBuffer.appendTo("H", "synthetic_gen/codesnippets/_inc/codesnippets", "");
}
- this.outputBuffer.appendTo("C", "synthetic_gen/runnables/_src/runnables", "");
- this.outputBuffer.appendTo("H", "synthetic_gen/runnables/_inc/runnables", "");
+ outputBuffer.appendTo("C", "synthetic_gen/runnables/_src/runnables", "");
+ outputBuffer.appendTo("H", "synthetic_gen/runnables/_inc/runnables", "");
- this.outputBuffer.finish();
+ outputBuffer.finish();
LOG.info("Finished Linux SLG code generation");
}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/LinuxTranslationUnit.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/LinuxTranslationUnit.java
index 6889d03..38e7433 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/LinuxTranslationUnit.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/LinuxTranslationUnit.java
@@ -59,14 +59,15 @@
// derived attributes
- public String getIncModulePath() { return basePath + INC_FOLDER + moduleName; }
- public String getSrcModulePath() { return basePath + SRC_FOLDER + moduleName; }
+ private String getModulePath() { return basePath + "/" + moduleName; }
+
+ public String getIncModulePath() { return getModulePath() + INC_FOLDER + moduleName; }
+ public String getSrcModulePath() { return getModulePath() + SRC_FOLDER + moduleName; }
public String getSrcFile() { return moduleName + SRC_EXT; }
public String getIncFile() { return moduleName + INC_EXT; }
- public String getSrcPath() { return basePath + SRC_FOLDER + getSrcFile(); }
- public String getIncPath() { return basePath + INC_FOLDER + getIncFile(); }
-
+ public String getSrcPath() { return getModulePath() + SRC_FOLDER + getSrcFile(); }
+ public String getIncPath() { return getModulePath() + INC_FOLDER + getIncFile(); }
}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/stimuli/LinuxStimulusTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/stimuli/LinuxStimulusTransformer.java
index ad149f6..1094d36 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/stimuli/LinuxStimulusTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/stimuli/LinuxStimulusTransformer.java
@@ -14,15 +14,17 @@
package org.eclipse.app4mc.slg.linux.transformers.stimuli;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Properties;
+import org.eclipse.app4mc.amalthea.model.PeriodicStimulus;
import org.eclipse.app4mc.amalthea.model.Stimulus;
-import org.eclipse.app4mc.slg.linux.generators.LinuxStimulusTranslationUnit;
+import org.eclipse.app4mc.slg.linux.generators.LinuxStimulusGenerator;
import org.eclipse.app4mc.slg.linux.transformers.LinuxBaseTransformer;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+import org.eclipse.app4mc.slg.linux.transformers.LinuxTranslationUnit;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@ -30,29 +32,66 @@
@Singleton
public class LinuxStimulusTransformer extends LinuxBaseTransformer {
- @Inject private OutputBuffer outputBuffer;
@Inject private Properties properties;
- public LinuxStimulusTranslationUnit transform(final List<Stimulus> stimuli) {
- final ArrayList<?> key = CollectionLiterals.newArrayList(stimuli);
- final LinuxStimulusTranslationUnit _result;
- synchronized (_createCache_transform) {
- if (_createCache_transform.containsKey(key)) {
- return _createCache_transform.get(key);
- }
- LinuxStimulusTranslationUnit _linuxStimulusTranslationUnit = new LinuxStimulusTranslationUnit(
- this.outputBuffer, this.properties, stimuli);
- _result = _linuxStimulusTranslationUnit;
- _createCache_transform.put(key, _result);
- }
- _init_transform(_result, stimuli);
- return _result;
+ // ---------- generic part "def create new transform(...)" ----------
+
+ private final Map<List<Object>, LinuxTranslationUnit> transformCache = new HashMap<>();
+
+ public Map<List<Object>, LinuxTranslationUnit> getCache() {
+ return this.transformCache;
}
- private final HashMap<ArrayList<?>, LinuxStimulusTranslationUnit> _createCache_transform = CollectionLiterals
- .newHashMap();
+ public LinuxTranslationUnit transform(final List<Stimulus> stimuli) {
+ final List<Object> key = new ArrayList<>(Arrays.asList(stimuli));
+ final LinuxTranslationUnit tu;
- private void _init_transform(final LinuxStimulusTranslationUnit it, final List<Stimulus> stimuli) {
+ synchronized (transformCache) {
+ if (transformCache.containsKey(key)) {
+ return transformCache.get(key);
+ }
+ tu = createTranslationUnit(stimuli);
+ transformCache.put(key, tu);
+ }
+
+ // if translation unit is newly created and valid -> create files
+ if (tu.isValid()) {
+ doTransform(tu, stimuli);
+ }
+
+ return tu;
+ }
+
+ // ---------------------------------------------------
+
+ private LinuxTranslationUnit createTranslationUnit(final List<Stimulus> stimuli) {
+ if ((stimuli == null || stimuli.isEmpty())) {
+ return new LinuxTranslationUnit("UNSPECIFIED STIMULI");
+ } else {
+ String basePath = "Executable";
+ String moduleName = "main";
+ String call = "trigger<Stimuli>"; // unused
+ return new LinuxTranslationUnit(basePath, moduleName, call);
+ }
+ }
+
+ private void doTransform(final LinuxTranslationUnit tu, final List<Stimulus> stimuli) {
+ List<Stimulus> filteredStimuli = new ArrayList<>();
+
+ for (Stimulus stimulus : stimuli) {
+ if ((stimulus instanceof PeriodicStimulus)) {
+ filteredStimuli.add(stimulus);
+ }
+ }
+
+ genFiles(tu, filteredStimuli);
+ }
+
+ private void genFiles(LinuxTranslationUnit tu, final List<Stimulus> stimuli) {
+ Stimulus lastStimulus = stimuli.get(stimuli.size() - 1);
+ boolean enableInstrumentation = Boolean.parseBoolean(properties.getProperty("enableInstrumentation"));
+
+ srcAppend(tu, LinuxStimulusGenerator.toSrc(stimuli, lastStimulus, enableInstrumentation));
}
}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxActivityGraphItemTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxActivityGraphItemTransformer.java
index 9a05b53..9806951 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxActivityGraphItemTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxActivityGraphItemTransformer.java
@@ -30,17 +30,17 @@
@Inject private LinuxLabelAccessTransformer linuxLabelAccessTransformer;
@Inject private LinuxTicksTransformer linuxTicksTransformer;
- public LinuxTranslationUnit transform(final ActivityGraphItem labelAccess) {
- if (labelAccess instanceof LabelAccess) {
- return this.linuxLabelAccessTransformer.transform((LabelAccess) labelAccess);
- } else if (labelAccess instanceof Ticks) {
- return this.linuxTicksTransformer.transform((Ticks) labelAccess);
- } else if (labelAccess != null) {
- String warning = "/*[feature " + labelAccess.eClass().getName() + " in not supported]";
+ public LinuxTranslationUnit transform(final ActivityGraphItem graphItem) {
+ if (graphItem instanceof LabelAccess) {
+ return linuxLabelAccessTransformer.transform((LabelAccess) graphItem);
+ } else if (graphItem instanceof Ticks) {
+ return linuxTicksTransformer.transform((Ticks) graphItem);
+ } else if (graphItem != null) {
+ String warning = "/*[feature " + graphItem.eClass().getName() + " in not supported]";
return new LinuxTranslationUnit(warning);
} else {
throw new IllegalArgumentException(
- "Unhandled parameter types: " + Arrays.<Object>asList(labelAccess).toString());
+ "Unhandled parameter types: " + Arrays.<Object>asList(graphItem).toString());
}
}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxLabelAccessTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxLabelAccessTransformer.java
index 477d0ff..9426ffa 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxLabelAccessTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxLabelAccessTransformer.java
@@ -21,7 +21,6 @@
import org.eclipse.app4mc.amalthea.model.MinAvgMaxStatistic;
import org.eclipse.app4mc.amalthea.model.NumericStatistic;
import org.eclipse.app4mc.amalthea.model.SingleValueStatistic;
-import org.eclipse.app4mc.slg.linux.generators.LinuxLabelTranslationUnit;
import org.eclipse.app4mc.slg.linux.transformers.LinuxBaseTransformer;
import org.eclipse.app4mc.slg.linux.transformers.LinuxTranslationUnit;
@@ -32,23 +31,23 @@
@Inject private LinuxLabelTransformer labelTransformer;
public LinuxTranslationUnit transform(final LabelAccess labelAccess) {
- final LinuxLabelTranslationUnit labelTU = this.labelTransformer.transform(labelAccess.getData());
+ final LinuxTranslationUnit labelTU = labelTransformer.transform(labelAccess.getData());
return createTranslationUnit(labelAccess, labelTU);
}
- private LinuxTranslationUnit createTranslationUnit(final LabelAccess labelAccess, final LinuxLabelTranslationUnit labelTU) {
+ private LinuxTranslationUnit createTranslationUnit(final LabelAccess labelAccess, final LinuxTranslationUnit labelTU) {
if ((labelTU == null)) {
return new LinuxTranslationUnit("UNSPECIFIED LABEL ACCESS");
}
String basePath = labelTU.getBasePath();
String moduleName = labelTU.getModuleName();
- String call = computeCall(labelAccess, labelTU);
+ String call = computeCall(labelAccess);
return new LinuxTranslationUnit(basePath, moduleName, call);
}
- private String computeCall(final LabelAccess labelAccess, final LinuxLabelTranslationUnit labelTU) {
+ private String computeCall(final LabelAccess labelAccess) {
if (labelAccess == null
|| labelAccess.getData() == null
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxLabelTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxLabelTransformer.java
index 9bae033..e77024f 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxLabelTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxLabelTransformer.java
@@ -14,42 +14,74 @@
package org.eclipse.app4mc.slg.linux.transformers.sw;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import org.eclipse.app4mc.amalthea.model.Label;
-import org.eclipse.app4mc.slg.linux.generators.LinuxLabelTranslationUnit;
+import org.eclipse.app4mc.slg.linux.generators.LinuxLabelGenerator;
import org.eclipse.app4mc.slg.linux.transformers.LinuxBaseTransformer;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+import org.eclipse.app4mc.slg.linux.transformers.LinuxTranslationUnit;
-import com.google.inject.Inject;
import com.google.inject.Singleton;
@Singleton
public class LinuxLabelTransformer extends LinuxBaseTransformer {
- @Inject private OutputBuffer outputBuffer;
+ // ---------- generic part "def create new transform(...)" ----------
- public LinuxLabelTranslationUnit transform(final Label label) {
- final ArrayList<?> key = CollectionLiterals.newArrayList(label);
- final LinuxLabelTranslationUnit _result;
- synchronized (_createCache_transform) {
- if (_createCache_transform.containsKey(key)) {
- return _createCache_transform.get(key);
- }
- LinuxLabelTranslationUnit _linuxLabelTranslationUnit = new LinuxLabelTranslationUnit(this.outputBuffer,
- label);
- _result = _linuxLabelTranslationUnit;
- _createCache_transform.put(key, _result);
- }
- _init_transform(_result, label);
- return _result;
+ private final Map<List<Object>, LinuxTranslationUnit> transformCache = new HashMap<>();
+
+ public Map<List<Object>, LinuxTranslationUnit> getCache() {
+ return this.transformCache;
}
- private final HashMap<ArrayList<?>, LinuxLabelTranslationUnit> _createCache_transform = CollectionLiterals
- .newHashMap();
+ public LinuxTranslationUnit transform(final Label label) {
+ final List<Object> key = new ArrayList<>(Arrays.asList(label));
+ final LinuxTranslationUnit tu;
- private void _init_transform(final LinuxLabelTranslationUnit it, final Label label) {
+ synchronized (transformCache) {
+ if (transformCache.containsKey(key)) {
+ return transformCache.get(key);
+ }
+ tu = createTranslationUnit(label);
+ transformCache.put(key, tu);
+ }
+
+ // if translation unit is newly created and valid -> create files
+ if (tu.isValid()) {
+ doTransform(tu, label);
+ }
+
+ return tu;
+ }
+
+ // ---------------------------------------------------
+
+ private LinuxTranslationUnit createTranslationUnit(final Label label) {
+ if ((label == null)) {
+ return new LinuxTranslationUnit("UNSPECIFIED LABEL");
+ } else {
+ String basePath = "synthetic_gen";
+ String moduleName = "labels";
+ String call = "burnTicks(<params>)"; // unused
+ return new LinuxTranslationUnit(basePath, moduleName, call);
+ }
+ }
+
+ private void doTransform(final LinuxTranslationUnit tu, final Label label) {
+ genFiles(tu, label);
+ }
+
+ private void genFiles(LinuxTranslationUnit tu, Label label) {
+ if (isSrcFileEmpty(tu)) {
+ srcAppend(tu, "#include \"" + tu.getIncFile() + "\"\n");
+ srcAppend(tu, "#include <stdbool.h>\n\n");
+ }
+
+ incAppend(tu, LinuxLabelGenerator.toH(label));
+ srcAppend(tu, LinuxLabelGenerator.toCpp(label));
}
}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxRealisticCodeTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxRealisticCodeTransformer.java
index dcb3bc9..0319096 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxRealisticCodeTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxRealisticCodeTransformer.java
@@ -14,45 +14,58 @@
package org.eclipse.app4mc.slg.linux.transformers.sw;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
-import org.eclipse.app4mc.slg.commons.m2t.CustomObjectsStore;
-import org.eclipse.app4mc.slg.config.ConfigModel;
-import org.eclipse.app4mc.slg.linux.generators.LinuxRealisiticSyntheticTranslationUnit;
import org.eclipse.app4mc.slg.linux.transformers.LinuxBaseTransformer;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+import org.eclipse.app4mc.slg.linux.transformers.LinuxTranslationUnit;
-import com.google.inject.Inject;
import com.google.inject.Singleton;
@Singleton
public class LinuxRealisticCodeTransformer extends LinuxBaseTransformer {
- @Inject private OutputBuffer outputBuffer;
- @Inject private CustomObjectsStore customObjsStore;
+ // ---------- generic part "def create new transform(...)" ----------
- public LinuxRealisiticSyntheticTranslationUnit transform() {
- final ArrayList<?> key = CollectionLiterals.newArrayList();
- final LinuxRealisiticSyntheticTranslationUnit _result;
- synchronized (_createCache_transform) {
- if (_createCache_transform.containsKey(key)) {
- return _createCache_transform.get(key);
- }
- ConfigModel _instance = this.customObjsStore.<ConfigModel>getInstance(ConfigModel.class);
- LinuxRealisiticSyntheticTranslationUnit _linuxRealisiticSyntheticTranslationUnit = new LinuxRealisiticSyntheticTranslationUnit(
- this.outputBuffer, _instance);
- _result = _linuxRealisiticSyntheticTranslationUnit;
- _createCache_transform.put(key, _result);
- }
- _init_transform(_result);
- return _result;
+ private final Map<List<Object>, LinuxTranslationUnit> transformCache = new HashMap<>();
+
+ public Map<List<Object>, LinuxTranslationUnit> getCache() {
+ return this.transformCache;
}
- private final HashMap<ArrayList<?>, LinuxRealisiticSyntheticTranslationUnit> _createCache_transform = CollectionLiterals
- .newHashMap();
+ public LinuxTranslationUnit transform() {
+ final List<Object> key = new ArrayList<>(Arrays.asList());
+ final LinuxTranslationUnit tu;
- private void _init_transform(final LinuxRealisiticSyntheticTranslationUnit it) {
+ synchronized (transformCache) {
+ if (transformCache.containsKey(key)) {
+ return transformCache.get(key);
+ }
+ tu = createTranslationUnit();
+ transformCache.put(key, tu);
+ }
+
+ // if translation unit is newly created and valid -> create files
+ if (tu.isValid()) {
+ doTransform();
+ }
+
+ return tu;
+ }
+
+ // ---------------------------------------------------
+
+ private LinuxTranslationUnit createTranslationUnit() {
+ String basePath = "synthetic_gen";
+ String moduleName = "codesnippets";
+ String call = "<realistic code>"; // unused
+ return new LinuxTranslationUnit(basePath, moduleName, call);
+ }
+
+ private void doTransform() {
+ // nothing to generate
}
}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxRunnableTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxRunnableTransformer.java
index 9d56cb5..9ebd5bf 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxRunnableTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxRunnableTransformer.java
@@ -14,13 +14,27 @@
package org.eclipse.app4mc.slg.linux.transformers.sw;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import java.util.Properties;
+import java.util.Set;
-import org.eclipse.app4mc.slg.linux.generators.LinuxRunnableTranslationUnit;
+import org.eclipse.app4mc.amalthea.model.ActivityGraphItem;
+import org.eclipse.app4mc.amalthea.model.LabelAccess;
+import org.eclipse.app4mc.amalthea.model.LabelAccessEnum;
+import org.eclipse.app4mc.amalthea.model.LabelAccessStatistic;
+import org.eclipse.app4mc.amalthea.model.MinAvgMaxStatistic;
+import org.eclipse.app4mc.amalthea.model.NumericStatistic;
+import org.eclipse.app4mc.amalthea.model.ProcessingUnitDefinition;
+import org.eclipse.app4mc.amalthea.model.Runnable;
+import org.eclipse.app4mc.amalthea.model.SingleValueStatistic;
+import org.eclipse.app4mc.amalthea.model.Ticks;
+import org.eclipse.app4mc.slg.linux.generators.LinuxRunnableGenerator;
+import org.eclipse.app4mc.slg.linux.generators.LinuxRunnableGenerator.Calculation;
import org.eclipse.app4mc.slg.linux.transformers.LinuxBaseTransformer;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+import org.eclipse.app4mc.slg.linux.transformers.LinuxTranslationUnit;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@ -28,31 +42,120 @@
@Singleton
public class LinuxRunnableTransformer extends LinuxBaseTransformer {
- @Inject private LinuxActivityGraphItemTransformer linuxCallGraphItemTransformer;
- @Inject private OutputBuffer outputBuffer;
@Inject private Properties properties;
- public LinuxRunnableTranslationUnit transform(final org.eclipse.app4mc.amalthea.model.Runnable runnable) {
- final ArrayList<?> key = CollectionLiterals.newArrayList(runnable);
- final LinuxRunnableTranslationUnit _result;
- synchronized (_createCache_transform) {
- if (_createCache_transform.containsKey(key)) {
- return _createCache_transform.get(key);
- }
- LinuxRunnableTranslationUnit _linuxRunnableTranslationUnit = new LinuxRunnableTranslationUnit(
- this.outputBuffer, this.linuxCallGraphItemTransformer, runnable, this.properties);
- _result = _linuxRunnableTranslationUnit;
- _createCache_transform.put(key, _result);
- }
- _init_transform(_result, runnable);
- return _result;
+ // ---------- generic part "def create new transform(...)" ----------
+
+ private final Map<List<Object>, LinuxTranslationUnit> transformCache = new HashMap<>();
+
+ public Map<List<Object>, LinuxTranslationUnit> getCache() {
+ return this.transformCache;
}
- private final HashMap<ArrayList<?>, LinuxRunnableTranslationUnit> _createCache_transform = CollectionLiterals
- .newHashMap();
+ public LinuxTranslationUnit transform(final Runnable runnable) {
+ final List<Object> key = new ArrayList<>(Arrays.asList(runnable));
+ final LinuxTranslationUnit tu;
- private void _init_transform(final LinuxRunnableTranslationUnit it,
- final org.eclipse.app4mc.amalthea.model.Runnable runnable) {
+ synchronized (transformCache) {
+ if (transformCache.containsKey(key)) {
+ return transformCache.get(key);
+ }
+ tu = createTranslationUnit(runnable);
+ transformCache.put(key, tu);
+ }
+
+ // if translation unit is newly created and valid -> create files
+ if (tu.isValid()) {
+ doTransform(tu, runnable);
+ }
+
+ return tu;
+ }
+
+ // ---------------------------------------------------
+
+ private LinuxTranslationUnit createTranslationUnit(final Runnable runnable) {
+ if ((runnable == null)) {
+ return new LinuxTranslationUnit("UNSPECIFIED RUNNABLE");
+ } else {
+ String basePath = "synthetic_gen";
+ String moduleName = "runnables";
+ String call = runnable.getName() + "()";
+ return new LinuxTranslationUnit(basePath, moduleName, call);
+ }
+ }
+
+ private void doTransform(final LinuxTranslationUnit tu, final Runnable runnable) {
+ genFiles(tu, runnable);
+ }
+
+ private void genFiles(LinuxTranslationUnit tu, final Runnable runnable) {
+ if (isIncFileEmpty(tu)) {
+ incAppend(tu, LinuxRunnableGenerator.snippetIncStart());
+ }
+ if (isSrcFileEmpty(tu)) {
+ srcAppend(tu, LinuxRunnableGenerator.snippetSrcStart());
+ }
+
+ // write header
+ incAppend(tu, "\n//Runnable " + runnable.getName() + "----\n");
+ incAppend(tu, "void " + runnable.getName() + "(char* coreName);\n");
+
+ Calculation calc = new Calculation();
+ calc.ticksSumMap.put("default", Integer.valueOf(0));
+
+ if (runnable != null && runnable.getActivityGraph() != null) {
+ for (ActivityGraphItem item : runnable.getActivityGraph().getItems()) {
+ if (item instanceof Ticks) {
+ Ticks ticks = (Ticks) item;
+ if (ticks.getDefault() != null && ticks.getDefault().getAverage() != null) {
+ calc.ticksSum += ticks.getDefault().getAverage().intValue();
+ calc.ticksSumMap.put("default", calc.ticksSum);
+ }
+
+ Set<ProcessingUnitDefinition> puDefinitions = ticks.getExtended().keySet();
+ for (ProcessingUnitDefinition puDef : puDefinitions) {
+ if (puDef != null) {
+ String puDefName = puDef.getName();
+ if (!calc.ticksSumMap.containsKey(puDefName)) {
+ calc.ticksSumMap.put(puDefName, 0);
+ }
+ calc.ticksSumMap.put(puDefName, calc.ticksSumMap.get(puDefName)
+ + ticks.getExtended().get(puDef).getAverage().intValue());
+ }
+ }
+ } else if (item instanceof LabelAccess) {
+ LabelAccess la = (LabelAccess) item;
+ Float value = Float
+ .parseFloat(properties.getOrDefault("labelAccessStatisticValueDefault", "1.0F").toString());
+
+ LabelAccessStatistic labelStatistic = la.getStatistic();
+ if (labelStatistic != null) {
+ NumericStatistic labelStatisticValue = labelStatistic.getValue();
+
+ if (labelStatisticValue instanceof SingleValueStatistic) {
+ value = ((SingleValueStatistic) labelStatisticValue).getValue();
+ } else if (labelStatisticValue instanceof MinAvgMaxStatistic) {
+ // TODO: provide a configuration option, to select appropriate value
+ // from labelStatistic (min/max/avg)
+ // right now considering the average value
+ value = ((MinAvgMaxStatistic) labelStatisticValue).getAvg();
+ }
+ }
+
+ if (la.getAccess() == LabelAccessEnum.READ) {
+ calc.readsSum += value.intValue();
+ } else if (la.getAccess() == LabelAccessEnum.WRITE) {
+ calc.writesSum += value.intValue();
+ }
+ }
+ }
+ }
+
+ boolean useExperimental = Boolean.parseBoolean(properties.getProperty("experimentalCodeSnippetMatching"));
+
+ String codeString = LinuxRunnableGenerator.syntheticLoad(useExperimental);
+ srcAppend(tu, LinuxRunnableGenerator.snippetSrcBody(runnable, codeString));
}
}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTaskTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTaskTransformer.java
index 809f633..9ee84d2 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTaskTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTaskTransformer.java
@@ -14,41 +14,131 @@
package org.eclipse.app4mc.slg.linux.transformers.sw;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import org.eclipse.app4mc.amalthea.model.ActivityGraphItem;
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.amalthea.model.AmaltheaServices;
+import org.eclipse.app4mc.amalthea.model.Group;
+import org.eclipse.app4mc.amalthea.model.InterProcessStimulus;
+import org.eclipse.app4mc.amalthea.model.InterProcessTrigger;
+import org.eclipse.app4mc.amalthea.model.Process;
+import org.eclipse.app4mc.amalthea.model.ProcessingUnit;
+import org.eclipse.app4mc.amalthea.model.ProcessingUnitDefinition;
+import org.eclipse.app4mc.amalthea.model.Runnable;
+import org.eclipse.app4mc.amalthea.model.RunnableCall;
import org.eclipse.app4mc.amalthea.model.Task;
-import org.eclipse.app4mc.slg.linux.generators.LinuxTaskTranslationUnit;
+import org.eclipse.app4mc.amalthea.model.util.DeploymentUtil;
+import org.eclipse.app4mc.slg.linux.generators.LinuxTaskGenerator;
import org.eclipse.app4mc.slg.linux.transformers.LinuxBaseTransformer;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+import org.eclipse.app4mc.slg.linux.transformers.LinuxTranslationUnit;
-import com.google.inject.Inject;
import com.google.inject.Singleton;
@Singleton
public class LinuxTaskTransformer extends LinuxBaseTransformer {
- @Inject private OutputBuffer outputBuffer;
+ // ---------- generic part "def create new transform(...)" ----------
- public LinuxTaskTranslationUnit transform(final Task task) {
- final ArrayList<?> key = CollectionLiterals.newArrayList(task);
- final LinuxTaskTranslationUnit _result;
- synchronized (_createCache_transform) {
- if (_createCache_transform.containsKey(key)) {
- return _createCache_transform.get(key);
- }
- LinuxTaskTranslationUnit _linuxTaskTranslationUnit = new LinuxTaskTranslationUnit(this.outputBuffer, task);
- _result = _linuxTaskTranslationUnit;
- _createCache_transform.put(key, _result);
- }
- _init_transform(_result, task);
- return _result;
+ private final Map<List<Object>, LinuxTranslationUnit> transformCache = new HashMap<>();
+
+ public Map<List<Object>, LinuxTranslationUnit> getCache() {
+ return this.transformCache;
}
- private final HashMap<ArrayList<?>, LinuxTaskTranslationUnit> _createCache_transform = CollectionLiterals
- .newHashMap();
+ public LinuxTranslationUnit transform(final Task task) {
+ final List<Object> key = new ArrayList<>(Arrays.asList(task));
+ final LinuxTranslationUnit tu;
- private void _init_transform(final LinuxTaskTranslationUnit it, final Task task) {
+ synchronized (transformCache) {
+ if (transformCache.containsKey(key)) {
+ return transformCache.get(key);
+ }
+ tu = createTranslationUnit(task);
+ transformCache.put(key, tu);
+ }
+
+ // if translation unit is newly created and valid -> create files
+ if (tu.isValid()) {
+ doTransform(tu, task);
+ }
+
+ return tu;
+ }
+
+ // ---------------------------------------------------
+
+ private LinuxTranslationUnit createTranslationUnit(final Task task) {
+ if ((task == null)) {
+ return new LinuxTranslationUnit("UNSPECIFIED TASK");
+ } else {
+ String basePath = "synthetic_gen";
+ String moduleName = "tasks";
+ String call = task.getName() + "()";
+ return new LinuxTranslationUnit(basePath, moduleName, call);
+ }
+ }
+
+ private void doTransform(final LinuxTranslationUnit tu, final Task task) {
+ genFiles(tu, task);
+ }
+
+ private void genFiles(LinuxTranslationUnit tu, final Task task) {
+ final Amalthea root = AmaltheaServices.getContainerOfType(task, Amalthea.class);
+ final Set<ProcessingUnit> assignedCores = DeploymentUtil.getAssignedCoreForProcess(task, root);
+
+ final StringBuilder puDefinition = new StringBuilder("default");
+
+ if (assignedCores != null && !assignedCores.isEmpty()) {
+ puDefinition.delete(0, puDefinition.length());
+
+ ProcessingUnit pu = assignedCores.iterator().next();
+ ProcessingUnitDefinition puDef = pu.getDefinition();
+ String puDefName = (puDef == null) ? null : puDef.getName();
+
+ puDefinition.append(puDefName);
+ }
+
+ final List<String> statements = new ArrayList<>();
+ final List<Process> processedTasks = new ArrayList<>();
+
+ if (task != null && task.getActivityGraph() != null) {
+ for (ActivityGraphItem item : task.getActivityGraph().getItems()) {
+
+ if (item instanceof Group) {
+ for (ActivityGraphItem item2 : ((Group) item).getItems()) {
+ if ((item2 instanceof RunnableCall)) {
+ final Runnable runnable = ((RunnableCall) item2).getRunnable();
+ statements.add("run_" + runnable.getName() + "(\"" + puDefinition.toString() + "\");");
+ } else if ((item2 instanceof InterProcessTrigger)) {
+ InterProcessStimulus stimulus = ((InterProcessTrigger) item2).getStimulus();
+ LinuxTaskGenerator.handleInterProcessTrigger(statements, processedTasks, stimulus);
+ }
+ }
+ } else if (item instanceof RunnableCall) {
+ final Runnable runnable = ((RunnableCall) item).getRunnable();
+ if ((runnable != null)) {
+ statements.add("run_" + runnable.getName() + "(\"" + puDefinition.toString() + "\");");
+ }
+ } else if (item instanceof InterProcessTrigger) {
+ InterProcessStimulus stimulus = ((InterProcessTrigger) item).getStimulus();
+ LinuxTaskGenerator.handleInterProcessTrigger(statements, processedTasks, stimulus);
+ }
+ }
+ }
+
+ if (isIncFileEmpty(tu)) {
+ incAppend(tu, LinuxTaskGenerator.snippetIncStart());
+ }
+ if (isSrcFileEmpty(tu)) {
+ srcAppend(tu, LinuxTaskGenerator.snippetSrcStart());
+ }
+ srcAppend(tu, LinuxTaskGenerator.toCpp(task, statements));
+ incAppend(tu, LinuxTaskGenerator.toH(task));
}
}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTicksTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTicksTransformer.java
index 701ed09..651c92c 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTicksTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTicksTransformer.java
@@ -16,7 +16,6 @@
import org.eclipse.app4mc.amalthea.model.Ticks;
import org.eclipse.app4mc.slg.commons.m2t.AbstractSLGTransformer;
import org.eclipse.app4mc.slg.linux.generators.LinuxTicksGenerator;
-import org.eclipse.app4mc.slg.linux.generators.LinuxTicksUtilsTranslationUnit;
import org.eclipse.app4mc.slg.linux.transformers.LinuxTranslationUnit;
import com.google.inject.Inject;
@@ -29,7 +28,7 @@
public LinuxTranslationUnit transform(final Ticks ticks) {
if ((ticks.getDefault() != null)) {
- final LinuxTicksUtilsTranslationUnit ticksUtilsTU = ticksUtilsTransformer.transform(ticks.getDefault());
+ final LinuxTranslationUnit ticksUtilsTU = ticksUtilsTransformer.transform(ticks.getDefault());
return createTranslationUnit(ticks, ticksUtilsTU);
}
@@ -37,7 +36,7 @@
return null;
}
- private LinuxTranslationUnit createTranslationUnit(Ticks ticks, LinuxTicksUtilsTranslationUnit ticksUtilsTU) {
+ private LinuxTranslationUnit createTranslationUnit(Ticks ticks, LinuxTranslationUnit ticksUtilsTU) {
if ((ticksUtilsTU == null)) {
return new LinuxTranslationUnit("UNSPECIFIED TICKS");
}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTicksUtilsTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTicksUtilsTransformer.java
index 4b030cc..8c40ced 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTicksUtilsTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTicksUtilsTransformer.java
@@ -14,15 +14,17 @@
package org.eclipse.app4mc.slg.linux.transformers.sw;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import org.eclipse.app4mc.amalthea.model.IDiscreteValueDeviation;
import org.eclipse.app4mc.slg.commons.m2t.CustomObjectsStore;
import org.eclipse.app4mc.slg.config.ConfigModel;
-import org.eclipse.app4mc.slg.linux.generators.LinuxTicksUtilsTranslationUnit;
+import org.eclipse.app4mc.slg.linux.generators.LinuxTicksUtilsGenerator;
import org.eclipse.app4mc.slg.linux.transformers.LinuxBaseTransformer;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+import org.eclipse.app4mc.slg.linux.transformers.LinuxTranslationUnit;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@ -30,33 +32,84 @@
@Singleton
public class LinuxTicksUtilsTransformer extends LinuxBaseTransformer {
- @Inject private OutputBuffer outputBuffer;
@Inject private CustomObjectsStore customObjsStore;
- public LinuxTicksUtilsTranslationUnit transform(final IDiscreteValueDeviation value) {
- return this.generateIntern(value.getClass());
+ public LinuxTranslationUnit transform(final IDiscreteValueDeviation value) {
+ return transformClass(value.getClass()); // hash according to class not instance
}
- public LinuxTicksUtilsTranslationUnit generateIntern(final Object valueClass) {
- final ArrayList<?> key = CollectionLiterals.newArrayList(valueClass);
- final LinuxTicksUtilsTranslationUnit _result;
- synchronized (_createCache_generateIntern) {
- if (_createCache_generateIntern.containsKey(key)) {
- return _createCache_generateIntern.get(key);
+ // ---------- generic part "def create new transform(...)" ----------
+
+ private final Map<List<Object>, LinuxTranslationUnit> transformCache = new HashMap<>();
+
+ public Map<List<Object>, LinuxTranslationUnit> getCache() {
+ return this.transformCache;
+ }
+
+ public LinuxTranslationUnit transformClass(final Class<? extends IDiscreteValueDeviation> devClass) {
+ final List<Object> key = new ArrayList<>(Arrays.asList(devClass));
+ final LinuxTranslationUnit tu;
+
+ synchronized (transformCache) {
+ if (transformCache.containsKey(key)) {
+ return transformCache.get(key);
}
- ConfigModel _instance = this.customObjsStore.<ConfigModel>getInstance(ConfigModel.class);
- LinuxTicksUtilsTranslationUnit tu = new LinuxTicksUtilsTranslationUnit(
- this.outputBuffer, _instance, valueClass);
- _result = tu;
- _createCache_generateIntern.put(key, _result);
+ tu = createTranslationUnit(devClass);
+ transformCache.put(key, tu);
}
- _init_generateIntern(_result, valueClass);
- return _result;
+
+ // if translation unit is newly created and valid -> create files
+ if (tu.isValid()) {
+ doTransform(tu, devClass);
+ }
+
+ return tu;
}
- private final HashMap<ArrayList<?>, LinuxTicksUtilsTranslationUnit> _createCache_generateIntern = CollectionLiterals
- .newHashMap();
+ // ---------------------------------------------------
- private void _init_generateIntern(final LinuxTicksUtilsTranslationUnit it, final Object valueClass) {
+ private LinuxTranslationUnit createTranslationUnit(final Class<? extends IDiscreteValueDeviation> devClass) {
+ if ((devClass == null)) {
+ return new LinuxTranslationUnit("UNSPECIFIED TICKS");
+ } else {
+ String basePath = "synthetic_gen";
+ String moduleName = "ticksUtils";
+ String call = "burnTicks(<params>)"; // unused
+ return new LinuxTranslationUnit(basePath, moduleName, call);
+ }
}
+
+ private void doTransform(final LinuxTranslationUnit tu, final Class<? extends IDiscreteValueDeviation> devClass) {
+ genFiles(tu, devClass);
+ }
+
+ public void genFiles(LinuxTranslationUnit tu, final Class<? extends IDiscreteValueDeviation> devClass) {
+ if (isIncFileEmpty(tu)) {
+ toH(tu);
+ }
+ if (isSrcFileEmpty(tu)) {
+ toCPP(tu);
+ }
+ srcAppend(tu, LinuxTicksUtilsGenerator.generateTicks(devClass));
+ incAppend(tu, LinuxTicksUtilsGenerator.generateTicksDecleration(devClass));
+ }
+
+ private void toCPP(LinuxTranslationUnit tu) {
+ srcAppend(tu, "#include \"" + tu.getIncFile() + "\"\n");
+
+ ConfigModel configModel = customObjsStore.<ConfigModel>getInstance(ConfigModel.class);
+
+ final String ticksCodeSnippet = configModel.getCustomTickImpl().getValue();
+ final String burnTicksBody = configModel.getCustomTickImpl().isEnable() ? ticksCodeSnippet : LinuxTicksUtilsGenerator.burnTicksDefault();
+
+ srcAppend(tu, LinuxTicksUtilsGenerator.burnTicks(burnTicksBody));
+ srcAppend(tu, LinuxTicksUtilsGenerator.burnTicksStatistics(configModel));
+
+ }
+
+ private void toH(LinuxTranslationUnit tu) {
+ incAppend(tu, LinuxTicksUtilsGenerator.burnTicksDecleration());
+ incAppend(tu, LinuxTicksUtilsGenerator.burnTicksStatisticsDecleration());
+ }
+
}