diff --git a/lib/arm_profiler/CMakeLists.txt b/lib/arm_profiler/CMakeLists.txt
new file mode 100644
index 0000000..2452a50
--- /dev/null
+++ b/lib/arm_profiler/CMakeLists.txt
@@ -0,0 +1,23 @@
+#
+# Copyright (c) 2021 Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed under the Apache License, Version 2.0 (the License); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+add_library(arm_profiler INTERFACE)
+
+target_link_libraries(arm_profiler INTERFACE tflu)
+target_include_directories(arm_profiler INTERFACE include)
+target_sources(arm_profiler INTERFACE src/arm_profiler.cpp)
diff --git a/lib/arm_profiler/include/arm_profiler.hpp b/lib/arm_profiler/include/arm_profiler.hpp
new file mode 100644
index 0000000..f5206fe
--- /dev/null
+++ b/lib/arm_profiler/include/arm_profiler.hpp
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2021 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ARM_PROFILER_H
+#define ARM_PROFILER_H
+
+#include "tensorflow/lite/kernels/internal/compatibility.h"
+#include "tensorflow/lite/micro/micro_profiler.h"
+#include <memory>
+
+// TODO: Merge this profiler with EthosUprofiler.
+namespace tflite {
+class ArmProfiler : public MicroProfiler {
+public:
+    ArmProfiler(size_t max_events = 200);
+    uint32_t BeginEvent(const char *tag);
+    void EndEvent(uint32_t event_handle);
+    int32_t GetTotalTicks() const;
+
+private:
+    size_t max_events_;
+    std::unique_ptr<const char *[]> tags_;
+    std::unique_ptr<int32_t[]> start_ticks_;
+    std::unique_ptr<int32_t[]> end_ticks_;
+
+    int num_events_ = 0;
+
+    TF_LITE_REMOVE_VIRTUAL_DELETE;
+};
+
+} // namespace tflite
+
+#endif
diff --git a/lib/arm_profiler/src/arm_profiler.cpp b/lib/arm_profiler/src/arm_profiler.cpp
new file mode 100644
index 0000000..c58037f
--- /dev/null
+++ b/lib/arm_profiler/src/arm_profiler.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2021 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "tensorflow/lite/kernels/internal/compatibility.h"
+#include "tensorflow/lite/micro/micro_error_reporter.h"
+#include "tensorflow/lite/micro/micro_time.h"
+
+#include <string.h>
+
+#include "arm_profiler.hpp"
+#include <inttypes.h>
+#include <stdio.h>
+
+namespace tflite {
+
+ArmProfiler::ArmProfiler(size_t max_events) : max_events_(max_events) {
+    tags_        = std::make_unique<const char *[]>(max_events_);
+    start_ticks_ = std::make_unique<int32_t[]>(max_events_);
+    end_ticks_   = std::make_unique<int32_t[]>(max_events_);
+}
+
+uint32_t ArmProfiler::BeginEvent(const char *tag) {
+    if (num_events_ == max_events_) {
+        tflite::GetMicroErrorReporter()->Report("Profiling event overflow, max: %u events", max_events_);
+        num_events_ = 0;
+    }
+    tags_[num_events_]        = tag;
+    start_ticks_[num_events_] = GetCurrentTimeTicks();
+    end_ticks_[num_events_]   = start_ticks_[num_events_] - 1;
+    return num_events_++;
+}
+
+void ArmProfiler::EndEvent(uint32_t event_handle) {
+    TFLITE_DCHECK(event_handle < max_events_);
+    end_ticks_[event_handle] = GetCurrentTimeTicks();
+    tflite::GetMicroErrorReporter()->Report(
+        "%s : cycle_cnt : %u cycles", tags_[event_handle], end_ticks_[event_handle] - start_ticks_[event_handle]);
+}
+
+int32_t ArmProfiler::GetTotalTicks() const {
+    int32_t ticks = 0;
+    for (int i = 0; i < num_events_; ++i) {
+        ticks += end_ticks_[i] - start_ticks_[i];
+    }
+    return ticks;
+}
+
+} // namespace tflite
