diff options
author | Derek Lamberti <derek.lamberti@arm.com> | 2019-08-07 17:01:57 +0100 |
---|---|---|
committer | Derek Lamberti <derek.lamberti@arm.com> | 2019-08-09 12:17:50 +0000 |
commit | 6b4dfc2df9271b2e9e0b9e0e0a78f715ddebf36e (patch) | |
tree | 7fe9cc2e8b023cb138e5e2af07feeec7c3857dc4 /src/armnn/test | |
parent | 3d8a9eda15c7732c689a80ddde916d6e3373542c (diff) | |
download | armnn-6b4dfc2df9271b2e9e0b9e0e0a78f715ddebf36e.tar.gz |
IVGCVSW-3603 *Json printer prints full profiling hierarchy
Change-Id: Ide5acbf993c2bcff5265b72fc979caa6f183bb22
Signed-off-by: Derek Lamberti <derek.lamberti@arm.com>
Diffstat (limited to 'src/armnn/test')
-rw-r--r-- | src/armnn/test/ProfilerTests.cpp | 106 |
1 files changed, 105 insertions, 1 deletions
diff --git a/src/armnn/test/ProfilerTests.cpp b/src/armnn/test/ProfilerTests.cpp index f6688eafc9..90f6d8b133 100644 --- a/src/armnn/test/ProfilerTests.cpp +++ b/src/armnn/test/ProfilerTests.cpp @@ -9,6 +9,7 @@ #include <memory> #include <thread> +#include <ostream> #include <armnn/TypesUtils.hpp> #include <Profiling.hpp> @@ -240,4 +241,107 @@ BOOST_AUTO_TEST_CASE(WriteEventResults) profiler->EnableProfiling(false); } -BOOST_AUTO_TEST_SUITE_END() +BOOST_AUTO_TEST_CASE(ProfilerJsonPrinter) +{ + class TestInstrument : public armnn::Instrument + { + public: + virtual ~TestInstrument() {} + void Start() override {} + void Stop() override {} + + std::vector<armnn::Measurement> GetMeasurements() const override + { + std::vector<armnn::Measurement> measurements; + measurements.emplace_back(armnn::Measurement("Measurement1", + 1.0, + armnn::Measurement::Unit::TIME_MS)); + measurements.emplace_back(armnn::Measurement("Measurement2", + 2.0, + armnn::Measurement::Unit::TIME_US)); + return measurements; + } + + const char* GetName() const override + { + return "TestInstrument"; + } + }; + + // Get a reference to the profiler manager. + armnn::ProfilerManager& profilerManager = armnn::ProfilerManager::GetInstance(); + + // Create and register a profiler for this thread. + std::unique_ptr<armnn::Profiler> profiler = std::make_unique<armnn::Profiler>(); + profilerManager.RegisterProfiler(profiler.get()); + + profiler->EnableProfiling(true); + + { + // Test scoped macro. + ARMNN_SCOPED_PROFILING_EVENT_WITH_INSTRUMENTS(armnn::Compute::CpuAcc, "EnqueueWorkload", TestInstrument()) + ARMNN_SCOPED_PROFILING_EVENT_WITH_INSTRUMENTS(armnn::Compute::CpuAcc, "Level 0", TestInstrument()) + { + { + ARMNN_SCOPED_PROFILING_EVENT_WITH_INSTRUMENTS(armnn::Compute::CpuAcc, "Level 1A", TestInstrument()) + } + + { + ARMNN_SCOPED_PROFILING_EVENT_WITH_INSTRUMENTS(armnn::Compute::CpuAcc, "Level 1B", TestInstrument()) + + { + ARMNN_SCOPED_PROFILING_EVENT_WITH_INSTRUMENTS(armnn::Compute::CpuAcc, "Level 2A", TestInstrument()) + } + } + } + } + + std::stringbuf buffer; + std::ostream json(&buffer); + profiler->Print(json); + + std::string output = buffer.str(); + boost::ignore_unused(output); + + // Disable profiling here to not print out anything on stdout. + profiler->EnableProfiling(false); + + // blessed output validated by a human eyeballing the output to make sure it's ok and then copying it here. + // validation also included running the blessed output through an online json validation site + std::string blessedOutput("{\n\t\"ArmNN\": {\n\t\t\"inference_measurements_#1\": {\n\t\t\t\"type\": \"" + "Event\",\n\t\t\t\"Measurement1_#1\": {\n\t\t\t\t\"type\": \"" + "Measurement\",\n\t\t\t\t\"raw\": [\n\t\t\t\t\t1.000000\n\t\t\t\t],\n\t\t\t\t\"" + "unit\": \"ms\"\n\t\t\t},\n\t\t\t\"Measurement2_#1\": {\n\t\t\t\t\"type\": \"" + "Measurement\",\n\t\t\t\t\"raw\": [\n\t\t\t\t\t2.000000\n\t\t\t\t],\n\t\t\t\t\"" + "unit\": \"us\"\n\t\t\t},\n\t\t\t\"Level 0_#2\": {\n\t\t\t\t\"type\": \"" + "Event\",\n\t\t\t\t\"Measurement1_#2\": {\n\t\t\t\t\t\"type\": \"" + "Measurement\",\n\t\t\t\t\t\"raw\": [\n\t\t\t\t\t\t1.000000\n\t\t\t\t\t],\n\t\t\t\t\t\"" + "unit\": \"ms\"\n\t\t\t\t},\n\t\t\t\t\"Measurement2_#2\": {\n\t\t\t\t\t\"type\": \"" + "Measurement\",\n\t\t\t\t\t\"raw\": [\n\t\t\t\t\t\t2.000000\n\t\t\t\t\t],\n\t\t\t\t\t\"" + "unit\": \"us\"\n\t\t\t\t},\n\t\t\t\t\"Level 1A_#3\": {\n\t\t\t\t\t\"type\": \"" + "Event\",\n\t\t\t\t\t\"Measurement1_#3\": {\n\t\t\t\t\t\t\"type\": \"" + "Measurement\",\n\t\t\t\t\t\t\"raw\": [\n\t\t\t\t\t\t\t" + "1.000000\n\t\t\t\t\t\t],\n\t\t\t\t\t\t\"" + "unit\": \"ms\"\n\t\t\t\t\t},\n\t\t\t\t\t\"Measurement2_#3\": {\n\t\t\t\t\t\t\"type\": \"" + "Measurement\",\n\t\t\t\t\t\t\"raw\": [\n\t\t\t\t\t\t\t" + "2.000000\n\t\t\t\t\t\t],\n\t\t\t\t\t\t\"" + "unit\": \"us\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"Level 1B_#4\": {\n\t\t\t\t\t\"" + "type\": \"Event\",\n\t\t\t\t\t\"Measurement1_#4\": {\n\t\t\t\t\t\t\"type\": \"" + "Measurement\",\n\t\t\t\t\t\t\"raw\": [\n\t\t\t\t\t\t\t" + "1.000000\n\t\t\t\t\t\t],\n\t\t\t\t\t\t\"" + "unit\": \"ms\"\n\t\t\t\t\t},\n\t\t\t\t\t\"Measurement2_#4\": {\n\t\t\t\t\t\t\"" + "type\": \"Measurement\",\n\t\t\t\t\t\t\"raw\": [\n\t\t\t\t\t\t\t" + "2.000000\n\t\t\t\t\t\t],\n\t\t\t\t\t\t\"" + "unit\": \"us\"\n\t\t\t\t\t},\n\t\t\t\t\t\"Level 2A_#5\": {\n\t\t\t\t\t\t\"" + "type\": \"Event\",\n\t\t\t\t\t\t\"Measurement1_#5\": {\n\t\t\t\t\t\t\t\"type\": \"" + "Measurement\",\n\t\t\t\t\t\t\t\"raw\": [\n\t\t\t\t\t\t\t\t" + "1.000000\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\"" + "unit\": \"ms\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"Measurement2_#5\": {\n\t\t\t\t\t\t\t\"" + "type\": \"Measurement\",\n\t\t\t\t\t\t\t\"raw\": [\n\t\t\t\t\t\t\t\t" + "2.000000\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\"" + "unit\": \"us\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"); + + BOOST_CHECK(output == blessedOutput); +} + +BOOST_AUTO_TEST_SUITE_END(); |