summaryrefslogtreecommitdiff
path: root/tests/common
diff options
context:
space:
mode:
authorIsabella Gottardi <isabella.gottardi@arm.com>2021-04-07 17:15:31 +0100
committerAlexander Efremov <alexander.efremov@arm.com>2021-04-12 14:00:49 +0000
commit8df12f37531d57a10cba2f8b2e8b6a9065202dd5 (patch)
treeba833d15649c3b0f885d57b40d3916970b3fd2c8 /tests/common
parent37ce22ebc9cf3e8529d9914c0eed0f718243d961 (diff)
downloadml-embedded-evaluation-kit-8df12f37531d57a10cba2f8b2e8b6a9065202dd5.tar.gz
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>
Diffstat (limited to 'tests/common')
-rw-r--r--tests/common/ProfilerTests.cc95
1 files changed, 70 insertions, 25 deletions
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 @@ TEST_CASE("Common: Test Profiler")
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());
-
- arm::app::Profiler profilerValid{&platform, "test_valid"};
- REQUIRE(true == profilerValid.StartProfiling());
- REQUIRE(true == profilerValid.StopProfiling());
-
- std::string strProfile = profilerValid.GetResultsAndReset();
- REQUIRE(std::string::npos != strProfile.find("test_valid"));
-
-#if defined(CPU_PROFILE_ENABLED)
- /* We should have milliseconds elapsed. */
- REQUIRE(std::string::npos != strProfile.find("ms"));
-#endif /* defined(CPU_PROFILE_ENABLED) */
-
- /* 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. */
-}
+ /* 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());
+ }
+
+ 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());
+ }
+
+ SECTION("Test multiple profilers") {
+ arm::app::Profiler profilerValid{&platform, "one"};
+ REQUIRE(true == profilerValid.StartProfiling());
+ REQUIRE(true == profilerValid.StopProfiling());
+
+ REQUIRE(true == profilerValid.StartProfiling("two"));
+ REQUIRE(true == profilerValid.StopProfiling());
+ REQUIRE(true == profilerValid.StartProfiling("two"));
+ REQUIRE(true == profilerValid.StopProfiling());
+
+ 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