MLECO-1870: Cherry pick profiling changes from dev to open source repo
* Documentation update

Change-Id: If85e7ebc44498840b291c408f14e66a5a5faa424
Signed-off-by: Isabella Gottardi <isabella.gottardi@arm.com>
diff --git a/tests/common/ProfilerTests.cc b/tests/common/ProfilerTests.cc
index caf492b..1435dde 100644
--- a/tests/common/ProfilerTests.cc
+++ b/tests/common/ProfilerTests.cc
@@ -34,28 +34,73 @@
     hal_init(&platform, &data_acq, &data_psn, &timer);
     hal_platform_init(&platform);
 
-    /* An invalid profiler shouldn't be of much use. */
-    arm::app::Profiler profilerInvalid {nullptr, "test_invalid"};
-    REQUIRE(false == profilerInvalid.StartProfiling());
-    REQUIRE(false == profilerInvalid.StopProfiling());
+    /* An invalid profiler shouldn't be of much use */
+    SECTION("Test invalid profiler") {
+        arm::app::Profiler profilerInvalid{nullptr, "test_invalid"};
+        REQUIRE(false == profilerInvalid.StartProfiling());
+        REQUIRE(false == profilerInvalid.StopProfiling());
+    }
 
-    arm::app::Profiler profilerValid{&platform, "test_valid"};
-    REQUIRE(true == profilerValid.StartProfiling());
-    REQUIRE(true == profilerValid.StopProfiling());
+    SECTION("Test valid profiler") {
+        arm::app::Profiler profilerValid{&platform, "test_valid"};
+        REQUIRE(true == profilerValid.StartProfiling());
+        REQUIRE(true == profilerValid.StopProfiling());
+        std::vector<arm::app::ProfileResult> results;
+        profilerValid.GetAllResultsAndReset(results);
+        REQUIRE(results.size() == 1);
+        REQUIRE(results[0].name == "test_valid");
+        /* Abuse should still fail: */
+        REQUIRE(false == profilerValid.StopProfiling()); /* We need to start it first */
+        REQUIRE(true == profilerValid.StartProfiling()); /* Should be able to start it fine */
+        REQUIRE(false == profilerValid.StartProfiling()); /* Can't restart it without resetting */
+        profilerValid.Reset();
+        REQUIRE(true == profilerValid.StartProfiling()); /* Can start it again now.. */
+        REQUIRE(true == profilerValid.StopProfiling());
+    }
 
-    std::string strProfile = profilerValid.GetResultsAndReset();
-    REQUIRE(std::string::npos != strProfile.find("test_valid"));
+    SECTION("Test multiple profilers") {
+        arm::app::Profiler profilerValid{&platform, "one"};
+        REQUIRE(true == profilerValid.StartProfiling());
+        REQUIRE(true == profilerValid.StopProfiling());
 
-#if defined(CPU_PROFILE_ENABLED)
-    /* We should have milliseconds elapsed. */
-    REQUIRE(std::string::npos != strProfile.find("ms"));
-#endif /* defined(CPU_PROFILE_ENABLED) */
+        REQUIRE(true == profilerValid.StartProfiling("two"));
+        REQUIRE(true == profilerValid.StopProfiling());
+        REQUIRE(true == profilerValid.StartProfiling("two"));
+        REQUIRE(true == profilerValid.StopProfiling());
 
-    /* Abuse should fail: */
-    REQUIRE(false == profilerValid.StopProfiling());  /* We need to start it first. */
-    REQUIRE(true == profilerValid.StartProfiling());  /* Should be able to start it fine. */
-    REQUIRE(false == profilerValid.StartProfiling()); /* Can't restart it without resetting. */
-    profilerValid.Reset();                            /* Reset. */
-    REQUIRE(true == profilerValid.StartProfiling());  /* Can start it again now. */
-    REQUIRE(true == profilerValid.StopProfiling());   /* Can start it again now. */
-}
+        std::vector<arm::app::ProfileResult> results;
+        profilerValid.GetAllResultsAndReset(results);
+        REQUIRE(results.size() == 2);
+        REQUIRE(results[0].name == "one");
+        REQUIRE(results[0].samplesNum == 1);
+        REQUIRE(results[1].name == "two");
+        REQUIRE(results[1].samplesNum == 2);
+    }
+
+#if defined (CPU_PROFILE_ENABLED)
+    SECTION("Test CPU profiler") {
+
+        arm::app::Profiler profilerCPU{&platform, "test cpu"};
+        std::vector<arm::app::ProfileResult> results;
+        profilerCPU.StartProfiling();
+        profilerCPU.StopProfiling();
+        profilerCPU.GetAllResultsAndReset(results);
+        REQUIRE(results.size() == 1);
+        bool foundTime = false;
+        bool foundCPU_ACTIVE = false;
+        for(arm::app::Statistics& stat: results[0].data) {
+
+            if (!foundTime) {
+                foundTime = stat.name == "Time";
+            }
+
+            if (!foundCPU_ACTIVE) {
+                foundCPU_ACTIVE = stat.name == "CPU ACTIVE";
+            }
+
+        }
+        REQUIRE(foundTime);
+        REQUIRE(foundCPU_ACTIVE);
+    }
+#endif /* defined (CPU_PROFILE_ENABLED) */
+}
\ No newline at end of file