Add EthosuProfiler to perform layer-by-layer profiling on Ethos-U.

Change-Id: Idae34fd8ab6b17b0bc21db658fff135a5ddf5461
diff --git a/applications/inference_process/CMakeLists.txt b/applications/inference_process/CMakeLists.txt
index 67caae8..4bd75c4 100644
--- a/applications/inference_process/CMakeLists.txt
+++ b/applications/inference_process/CMakeLists.txt
@@ -22,5 +22,13 @@
 
 target_include_directories(inference_process PUBLIC include
                            PRIVATE ${TENSORFLOW_PATH} ${TENSORFLOW_PATH}/tensorflow/lite/micro/tools/make/downloads/flatbuffers/include)
+
 target_link_libraries(inference_process PRIVATE tflu cmsis_core cmsis_device)
-target_sources(inference_process PRIVATE src/inference_process.cpp)
\ No newline at end of file
+if (TARGET ethosu_profiler)
+    target_link_libraries(inference_process PRIVATE ethosu_profiler)
+endif()
+if (TARGET arm_profiler)
+    target_link_libraries(inference_process PRIVATE arm_profiler)
+endif()
+
+target_sources(inference_process PRIVATE src/inference_process.cpp)
diff --git a/applications/inference_process/src/inference_process.cpp b/applications/inference_process/src/inference_process.cpp
index 743ed64..fa38290 100644
--- a/applications/inference_process/src/inference_process.cpp
+++ b/applications/inference_process/src/inference_process.cpp
@@ -24,6 +24,11 @@
 #include "tensorflow/lite/schema/schema_generated.h"
 #include "tensorflow/lite/version.h"
 
+#include "arm_profiler.hpp"
+#ifdef ETHOSU
+#include "ethosu_profiler.hpp"
+#endif
+
 #include "inference_process.hpp"
 
 #include "cmsis_compiler.h"
@@ -200,15 +205,15 @@
 
     // Create the TFL micro interpreter
     tflite::AllOpsResolver resolver;
-    tflite::MicroProfiler profiler;
-
-#if defined(INFERENCE_PROC_TFLU_PROFILER) && defined(ETHOSU)
+#ifdef ETHOSU
     vector<ethosu_pmu_event_type> pmu_events(ETHOSU_PMU_NCOUNTERS, ETHOSU_PMU_NO_EVENT);
 
     for (size_t i = 0; i < job.pmuEventConfig.size(); i++) {
         pmu_events[i] = ethosu_pmu_event_type(job.pmuEventConfig[i]);
     }
-    profiler.MonitorEthosuPMUEvents(pmu_events[0], pmu_events[1], pmu_events[2], pmu_events[3]);
+    tflite::EthosUProfiler profiler(pmu_events[0], pmu_events[1], pmu_events[2], pmu_events[3]);
+#else
+    tflite::ArmProfiler profiler;
 #endif
     tflite::MicroInterpreter interpreter(model, resolver, tensorArena, tensorArenaSize, reporter, &profiler);