From: p.privalov
Date: Mon, 18 Jul 2016 12:40:29 +0000 (+0300)
Subject: SRADA-920 Features provided by cli enabled in da.
X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8bdb756123a1f86e1cabd3bca6e44b0b491b25d7;p=sdk%2Ftools%2Fdynamic-analyzer.git
SRADA-920 Features provided by cli enabled in da.
Changes:
* Required Pages and Charts added to trace with CliInternals.selectFeatures().
* InTracingArguments featuresList replaced with featuresSet,
method getFeaturesList(...) replaced with getFeatures(...)
* Implemented tests for TracingFeatureArguments, containing few possible
combinations of selected features.
* Implemented tests for TracingArguments.isValid for different combinations of
specified features.
Change-Id: Ie4e3c847f5275c05b849def44a298790c5bc4032
---
diff --git a/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/CliInternals.java b/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/CliInternals.java
index 68ff35d..57c79b3 100644
--- a/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/CliInternals.java
+++ b/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/CliInternals.java
@@ -2,9 +2,12 @@ package org.tizen.dynamicanalyzer.cli;
import java.io.File;
import java.rmi.ConnectException;
+import java.util.Arrays;
+import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -26,7 +29,9 @@ import org.tizen.dynamicanalyzer.handlers.UIActionHolder;
import org.tizen.dynamicanalyzer.project.PackageInfo;
import org.tizen.dynamicanalyzer.setting.PrimitiveFeature;
import org.tizen.dynamicanalyzer.setting.SettingDataManager;
+import org.tizen.dynamicanalyzer.setting.TargetData;
import org.tizen.dynamicanalyzer.setting.Template;
+import org.tizen.dynamicanalyzer.setting.UILayoutDataManager;
import org.tizen.dynamicanalyzer.util.InternalLogger;
import org.tizen.dynamicanalyzer.util.Logger;
import org.tizen.dynamicanalyzer.utils.AnalyzerUtil;
@@ -266,34 +271,22 @@ public final class CliInternals {
}
/**
- * Selects features to be used for tracing by given list of
- * {@link PrimitiveFeature}
+ * Enables all selected features.
*
- * @param template
- * Template instance
- * @return true
on success
+ * @param features set of features to be enabled.
+ * @return was operation successful or not.
*/
- private static boolean selectFeatureList(List features) {
- if (features.isEmpty())
- return false;
+ private static boolean selectFeatures(Set features) {
+ TargetData target = SettingDataManager.INSTANCE.getTarget(null);
+ Set selectedChartSet = new HashSet();
+
+ for (PrimitiveFeature feature : features) {
+ target.addSelectedFlatFeature(feature.getName());
+ selectedChartSet.add(feature.getChart());
+ }
- /*
- * TODO Implement selected features usage in DACLI
- *
- * TargetData target = SettingDataManager.INSTANCE.getTarget(null);
- * target.setSelectedTemplate(template);
- * target.changeSelectedFeatureList(template);
- *
- * Set selectedChartSet = new HashSet();
- *
- * for (FeatureValueData feature : template.getData().getFeatureList())
- * { if (feature.getKey().getData().getChartList().size() > 0) {
- * selectedChartSet.addAll(feature.getKey().getData() .getChartList());
- * } } Logger.debug(selectedChartSet);
- *
- * UILayoutDataManager.INSTANCE.setSelectedChartSet(selectedChartSet);
- */
- return false; // true;
+ UILayoutDataManager.INSTANCE.setSelectedChartSet(selectedChartSet);
+ return true;
}
/**
@@ -354,7 +347,6 @@ public final class CliInternals {
*/
public static TracingProcessContext getContext(String device) throws ConnectException {
ProcessManagerMBean pmProxy = getPMProxyInstance();
-
return pmProxy.getContext(device);
}
@@ -414,10 +406,12 @@ public final class CliInternals {
}
Logger.debug("Set current app: " + args.getApplication());
- if (!selectFeatureList(args.getFeaturesList())) {
+ if (!selectFeatures(args.getFeatures())) {
Logger.debug("Failed to select features");
return ErrorCode.ERR_EXCEPTION_OCCURRED;
}
+ Logger.debug("Set features: "
+ + Arrays.asList(args.getFeatures().toArray()));
// Create all needed data managers before
UIActionHolder.getUIAction().setUIElementsBySetting();
diff --git a/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/tracing/TracingArguments.java b/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/tracing/TracingArguments.java
index 72aff7f..ec1e74b 100644
--- a/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/tracing/TracingArguments.java
+++ b/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/tracing/TracingArguments.java
@@ -2,11 +2,10 @@ package org.tizen.dynamicanalyzer.cli.tracing;
import java.io.File;
import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
import org.tizen.dynamicanalyzer.setting.PrimitiveFeature;
-import org.tizen.dynamicanalyzer.setting.Template;
/**
* Context class storing all necessary information for tracing start.
@@ -20,7 +19,7 @@ public class TracingArguments implements Cloneable, Serializable {
private String device; // device serial number or IP address
private String application; // application name
- private List featuresList; // list of features for analysis
+ private Set featuresSet; // list of features for analysis
private File output; // file with tracing output
// TODO duration actually is not supported yet by CLI, always set to 0
private long durationSec; // tracing duration in seconds (0 is for unlimited duration)
@@ -28,7 +27,7 @@ public class TracingArguments implements Cloneable, Serializable {
private String errMessage; // contains message about all found errors during validation ( isValid() )
public TracingArguments() {
- featuresList = new ArrayList();
+ featuresSet = new HashSet();
durationSec = 0;
errMessage = "";
}
@@ -73,7 +72,7 @@ public class TracingArguments implements Cloneable, Serializable {
}
// Features check
- if (featuresList.isEmpty()) {
+ if (featuresSet.isEmpty()) {
result = false;
msg += " * At least one feature for tracing must be selected%n";
}
@@ -154,16 +153,16 @@ public class TracingArguments implements Cloneable, Serializable {
/**
* @return the featuresList list of features selected for tracing
*/
- public List getFeaturesList() {
- return featuresList;
+ public Set getFeatures() {
+ return featuresSet;
}
/**
- * @param featuresList the feature to be added to list of selected
+ * @param featuresSet the feature to be added to list of selected
* @return this object to allow chained methods execution
*/
public TracingArguments addFeature(PrimitiveFeature feature) {
- featuresList.add(feature);
+ featuresSet.add(feature);
return this;
}
}
diff --git a/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/tracing/TracingFeatureArgument.java b/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/tracing/TracingFeatureArgument.java
index 3434c54..8336947 100644
--- a/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/tracing/TracingFeatureArgument.java
+++ b/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/tracing/TracingFeatureArgument.java
@@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
@@ -26,30 +27,26 @@ public enum TracingFeatureArgument {
SYNC("Y", "synchronization"),
// Options for single features selection
- UIEVENT("U", PrimitiveFeature.UI_EVENT), PERIPHERAL("P",
- PrimitiveFeature.PERIPHERAL_STATUS), POWER("E",
- PrimitiveFeature.POWER_ESTIMATION);
+ UIEVENT("U", PrimitiveFeature.UI_EVENT),
+ PERIPHERAL("P", PrimitiveFeature.PERIPHERAL_STATUS),
+ POWER("E", PrimitiveFeature.POWER_ESTIMATION);
static {
CPU.addDefaultFeatureValue("usage", PrimitiveFeature.CPU_USAGE);
CPU.addDefaultFeatureValue("core", PrimitiveFeature.CPU_USAGE_PER_CORE);
- CPU.addDefaultFeatureValue("frequency",
- PrimitiveFeature.CPU_FREQ_PER_CORE);
+ CPU.addDefaultFeatureValue("frequency", PrimitiveFeature.CPU_FREQ_PER_CORE);
MEMORY.addDefaultFeatureValue("system", PrimitiveFeature.SYSTEM_MEMORY);
- MEMORY.addDefaultFeatureValue("process",
- PrimitiveFeature.PROCESS_MEMORY);
+ MEMORY.addDefaultFeatureValue("process", PrimitiveFeature.PROCESS_MEMORY);
MEMORY.addFeatureValue("heap", PrimitiveFeature.MEMORY_ALLOC);
FILE.addDefaultFeatureValue("io", PrimitiveFeature.DISK_IO);
FILE.addDefaultFeatureValue("analysis", PrimitiveFeature.FILE_ANALYSIS);
- GRAPHICS.addDefaultFeatureValue("opengl",
- PrimitiveFeature.OPENGLES_ANALYSIS);
+ GRAPHICS.addDefaultFeatureValue("opengl", PrimitiveFeature.OPENGLES_ANALYSIS);
NETWORK.addDefaultFeatureValue("io", PrimitiveFeature.NETWORK_IO);
- NETWORK.addDefaultFeatureValue("analysis",
- PrimitiveFeature.NETWORK_ANALYSIS);
+ NETWORK.addDefaultFeatureValue("analysis", PrimitiveFeature.NETWORK_ANALYSIS);
SYNC.addDefaultFeatureValue("thread", PrimitiveFeature.THREAD_ANALYSIS);
SYNC.addDefaultFeatureValue("sync", PrimitiveFeature.SYNC_ANALYSIS);
@@ -156,7 +153,7 @@ public enum TracingFeatureArgument {
opt.parseFeatureOption(result, cmdline);
}
- if (result.getFeaturesList().isEmpty())
+ if (result.getFeatures().isEmpty())
throw new ParseException("No tracing features seleted: at least one feature is required.");
}
@@ -169,7 +166,7 @@ public enum TracingFeatureArgument {
*/
public static ArrayList toStringArrayList(TracingArguments args) {
ArrayList result = new ArrayList();
- List features = args.getFeaturesList();
+ Set features = args.getFeatures();
if (features.isEmpty())
return result;
diff --git a/org.tizen.dynamicanalyzer.cli/test/src/org/tizen/dynamicanalyzer/cli/tracing/TracingArgumentsParserTest.java b/org.tizen.dynamicanalyzer.cli/test/src/org/tizen/dynamicanalyzer/cli/tracing/TracingArgumentsParserTest.java
index 3820085..7f3bd8e 100644
--- a/org.tizen.dynamicanalyzer.cli/test/src/org/tizen/dynamicanalyzer/cli/tracing/TracingArgumentsParserTest.java
+++ b/org.tizen.dynamicanalyzer.cli/test/src/org/tizen/dynamicanalyzer/cli/tracing/TracingArgumentsParserTest.java
@@ -26,8 +26,16 @@ public class TracingArgumentsParserTest {
private final static String device = "device";
private final static String application = "application";
private final static String applicationOpt = "-a";
- private final static PrimitiveFeature feature = PrimitiveFeature.CPU_USAGE;
- private final static String featureOpt = "-C=usage";
+ private final static PrimitiveFeature cpu = PrimitiveFeature.CPU_USAGE;
+ private final static String featureOptCPU = "-C=usage";
+ private final static PrimitiveFeature memory1 = PrimitiveFeature.SYSTEM_MEMORY;
+ private final static PrimitiveFeature memory2 = PrimitiveFeature.PROCESS_MEMORY;
+ private final static String featureOptMEMORY = "-M";
+ private final static PrimitiveFeature file1 = PrimitiveFeature.DISK_IO;
+ private final static PrimitiveFeature file2 = PrimitiveFeature.FILE_ANALYSIS;
+ private final static String featureOptFILE = "-F=all";
+ private final static PrimitiveFeature power = PrimitiveFeature.POWER_ESTIMATION;
+ private final static String featureOptPOWER = "-E";
private final static File output = new File("output.out");
private final static String outputOpt = "-o";
private final static long duration = 12345;
@@ -47,7 +55,7 @@ public class TracingArgumentsParserTest {
device,
applicationOpt, application,
outputOpt, output.getPath(),
- featureOpt
+ featureOptCPU
// TODO duration option is not supported yet
// durationOpt, Long.toString(duration)
});
@@ -57,8 +65,8 @@ public class TracingArgumentsParserTest {
assertEquals(device, result.getDevice());
assertEquals(application, result.getApplication());
assertEquals(output, result.getOutput());
- assertEquals(1, result.getFeaturesList().size());
- assertEquals(feature, result.getFeaturesList().get(0));
+ assertEquals(1, result.getFeatures().size());
+ assertTrue(result.getFeatures().contains(cpu));
// TODO duration option is not supported yet
// assertEquals(duration, result.getDuration());
}
@@ -91,7 +99,7 @@ public class TracingArgumentsParserTest {
TracingArguments result = TracingArgumentsParser.parse(new String[] {
device,
applicationOpt, application,
- featureOpt });
+ featureOptCPU });
assertNotNull(result);
assertTrue(result.isValid());
assertNull(result.getOutput());
@@ -103,7 +111,7 @@ public class TracingArgumentsParserTest {
TracingArguments result = TracingArgumentsParser.parse(new String[] {
applicationOpt, application,
device,
- featureOpt });
+ featureOptCPU });
assertNull(result);
}
@@ -112,7 +120,7 @@ public class TracingArgumentsParserTest {
TracingArguments result = TracingArgumentsParser.parse(new String[] {
device,
application, applicationOpt,
- featureOpt });
+ featureOptCPU });
assertNull(result);
}
@@ -121,7 +129,7 @@ public class TracingArgumentsParserTest {
TracingArguments result = TracingArgumentsParser.parse(new String[] {
device,
applicationOpt,
- featureOpt });
+ featureOptCPU });
assertNull(result);
}
@@ -130,7 +138,7 @@ public class TracingArgumentsParserTest {
TracingArguments result = TracingArgumentsParser.parse(new String[] {
device,
applicationOpt, application,
- featureOpt,
+ featureOptCPU,
"--option", "value" });
assertNull(result);
}
@@ -152,7 +160,7 @@ public class TracingArgumentsParserTest {
TracingArguments result = TracingArgumentsParser.parse(new String[] {
device,
applicationOpt, application,
- featureOpt,
+ featureOptCPU,
outputOpt, output.getPath(),
durationOpt, Long.toString(duration),
"--", "value"});
@@ -192,7 +200,7 @@ public class TracingArgumentsParserTest {
TracingArguments args = new TracingArguments()
.setDevice(device)
.setApplication(application)
- .addFeature(feature);
+ .addFeature(cpu);
String[] result = TracingArgumentsParser.toStringArray(args);
assertNotNull(result);
assertEquals(5, result.length);
@@ -206,7 +214,7 @@ public class TracingArgumentsParserTest {
TracingArguments args = new TracingArguments()
.setDevice(device)
.setApplication(application)
- .addFeature(feature)
+ .addFeature(cpu)
.setDuration(-10);
String[] result = TracingArgumentsParser.toStringArray(args);
assertNull(result);
@@ -217,7 +225,7 @@ public class TracingArgumentsParserTest {
TracingArguments args = new TracingArguments()
.setDevice(device)
.setApplication(application)
- .addFeature(feature)
+ .addFeature(cpu)
.setOutput(output);
String[] result = TracingArgumentsParser.toStringArray(args);
assertNotNull(result);
@@ -236,4 +244,118 @@ public class TracingArgumentsParserTest {
String[] result = TracingArgumentsParser.toStringArray(null);
assertNull(result);
}
+
+ @Test
+ public void parse_AllFeaturesfromGroup() throws Exception {
+ TracingArguments result = TracingArgumentsParser.parse(new String[] {
+ device,
+ applicationOpt, application,
+ outputOpt, output.getPath(),
+ featureOptFILE
+ // TODO duration option is not supported yet
+ // durationOpt, Long.toString(duration)
+ });
+
+ assertNotNull(result);
+ assertTrue(result.isValid());
+ assertEquals(device, result.getDevice());
+ assertEquals(application, result.getApplication());
+ assertEquals(output, result.getOutput());
+ assertEquals(2, result.getFeatures().size());
+ assertTrue(result.getFeatures().contains(file1));
+ assertTrue(result.getFeatures().contains(file2));
+ }
+
+ @Test
+ public void parse_DefaultFeaturesfromGroup() throws Exception {
+ TracingArguments result = TracingArgumentsParser.parse(new String[] {
+ device,
+ applicationOpt, application,
+ outputOpt, output.getPath(),
+ featureOptMEMORY
+ // TODO duration option is not supported yet
+ // durationOpt, Long.toString(duration)
+ });
+
+ assertNotNull(result);
+ assertTrue(result.isValid());
+ assertEquals(device, result.getDevice());
+ assertEquals(application, result.getApplication());
+ assertEquals(output, result.getOutput());
+ assertEquals(2, result.getFeatures().size());
+ assertTrue(result.getFeatures().contains(memory1));
+ assertTrue(result.getFeatures().contains(memory2));
+ }
+
+ @Test
+ public void parse_OneFeaturenotFromGroup() throws Exception {
+ TracingArguments result = TracingArgumentsParser.parse(new String[] {
+ device,
+ applicationOpt, application,
+ outputOpt, output.getPath(),
+ featureOptPOWER
+ // TODO duration option is not supported yet
+ // durationOpt, Long.toString(duration)
+ });
+
+ assertNotNull(result);
+ assertTrue(result.isValid());
+ assertEquals(device, result.getDevice());
+ assertEquals(application, result.getApplication());
+ assertEquals(output, result.getOutput());
+ assertEquals(1, result.getFeatures().size());
+ assertTrue(result.getFeatures().contains(power));
+ }
+
+ @Test
+ public void parse_LotsOfFeatures() throws Exception {
+ TracingArguments result = TracingArgumentsParser.parse(new String[] {
+ device,
+ applicationOpt, application,
+ outputOpt, output.getPath(),
+ featureOptPOWER,
+ featureOptCPU,
+ featureOptFILE,
+ featureOptMEMORY
+ // TODO duration option is not supported yet
+ // durationOpt, Long.toString(duration)
+ });
+
+ assertNotNull(result);
+ assertTrue(result.isValid());
+ assertEquals(device, result.getDevice());
+ assertEquals(application, result.getApplication());
+ assertEquals(output, result.getOutput());
+ assertEquals(6, result.getFeatures().size());
+ }
+
+ @Test
+ public void toStringArray_TwoFeatures() {
+ TracingArguments args = new TracingArguments()
+ .setDevice(device)
+ .setApplication(application)
+ .addFeature(cpu)
+ .addFeature(file2);
+ String[] result = TracingArgumentsParser.toStringArray(args);
+ assertNotNull(result);
+ assertEquals(7, result.length);
+ }
+
+ @Test
+ public void toStringArray_ThreeFeatures() {
+ TracingArguments args = new TracingArguments()
+ .setDevice(device)
+ .setApplication(application)
+ .addFeature(cpu)
+ .addFeature(file1)
+ .addFeature(file2);
+ String[] result = TracingArgumentsParser.toStringArray(args);
+ assertNotNull(result);
+ assertEquals(8, result.length);
+ assertEquals("-C", result[3]);
+ assertEquals("usage", result[4]);
+ assertEquals("-F", result[5]);
+ assertEquals("analysis", result[6]);
+ assertEquals("io", result[7]);
+ }
}
diff --git a/org.tizen.dynamicanalyzer.cli/test/src/org/tizen/dynamicanalyzer/cli/tracing/TracingArgumentsTest.java b/org.tizen.dynamicanalyzer.cli/test/src/org/tizen/dynamicanalyzer/cli/tracing/TracingArgumentsTest.java
index adc05b4..dc05c8c 100644
--- a/org.tizen.dynamicanalyzer.cli/test/src/org/tizen/dynamicanalyzer/cli/tracing/TracingArgumentsTest.java
+++ b/org.tizen.dynamicanalyzer.cli/test/src/org/tizen/dynamicanalyzer/cli/tracing/TracingArgumentsTest.java
@@ -21,6 +21,7 @@ public class TracingArgumentsTest {
private final static String application = "application";
private final static File output = new File("output.out");
private final static PrimitiveFeature feature = PrimitiveFeature.CPU_USAGE;
+ private final static PrimitiveFeature feature2 = PrimitiveFeature.POWER_ESTIMATION;
@Before
public void setUp() {
@@ -84,6 +85,28 @@ public class TracingArgumentsTest {
}
@Test
+ public void isValid_TwoFeatures() {
+ TracingArguments args = new TracingArguments()
+ .setDevice(device)
+ .setApplication(application)
+ .addFeature(feature)
+ .addFeature(feature2);
+ assertTrue(args.isValid());
+ assertTrue(args.getFeatures().size()==2);
+ }
+
+ @Test
+ public void isValid_TwoSameFeatures() {
+ TracingArguments args = new TracingArguments()
+ .setDevice(device)
+ .setApplication(application)
+ .addFeature(feature)
+ .addFeature(feature);
+ assertTrue(args.isValid());
+ assertFalse(args.getFeatures().size() == 2);
+ }
+
+ @Test
public void isValid_NoOpts() {
TracingArguments args = new TracingArguments();
assertFalse(args.isValid());