diff options
author | Isabella Gottardi <isabella.gottardi@arm.com> | 2021-04-07 17:15:31 +0100 |
---|---|---|
committer | Alexander Efremov <alexander.efremov@arm.com> | 2021-04-12 14:00:49 +0000 |
commit | 8df12f37531d57a10cba2f8b2e8b6a9065202dd5 (patch) | |
tree | ba833d15649c3b0f885d57b40d3916970b3fd2c8 /tests/common | |
parent | 37ce22ebc9cf3e8529d9914c0eed0f718243d961 (diff) | |
download | ml-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.cc | 95 |
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 |