1 // 2 // Copyright © 2017 Arm Ltd. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 // 5 #pragma once 6 7 #include "NeonTimer.hpp" 8 #include "WallClockTimer.hpp" 9 10 #include <arm_compute/runtime/IScheduler.h> 11 #include <arm_compute/runtime/Scheduler.h> 12 #include <arm_compute/core/CPP/ICPPKernel.h> 13 14 namespace armnn 15 { 16 17 class NeonInterceptorScheduler : public arm_compute::IScheduler 18 { 19 public: 20 NeonInterceptorScheduler(arm_compute::IScheduler &realScheduler); 21 ~NeonInterceptorScheduler() = default; 22 23 void set_num_threads(unsigned int numThreads) override; 24 25 unsigned int num_threads() const override; 26 27 void schedule(arm_compute::ICPPKernel *kernel, const Hints &hints) override; 28 29 void run_workloads(std::vector<Workload> &workloads) override; 30 31 void run_tagged_workloads(std::vector<Workload> &workloads, const char *tag) override; 32 SetKernels(NeonTimer::KernelMeasurements * kernels)33 void SetKernels(NeonTimer::KernelMeasurements* kernels) { m_Kernels = kernels; } GetKernels()34 NeonTimer::KernelMeasurements* GetKernels() { return m_Kernels; } 35 36 void schedule_op(arm_compute::ICPPKernel* kernel, 37 const Hints& hints, 38 const arm_compute::Window& window, 39 arm_compute::ITensorPack& tensors ) override; 40 private: 41 NeonTimer::KernelMeasurements* m_Kernels; 42 arm_compute::IScheduler& m_RealScheduler; 43 }; 44 45 } // namespace armnn 46