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 arm_compute::ITensorPack &tensors ) override; 39 private: 40 NeonTimer::KernelMeasurements* m_Kernels; 41 arm_compute::IScheduler& m_RealScheduler; 42 }; 43 44 } // namespace armnn 45