aboutsummaryrefslogtreecommitdiff
path: root/tests/framework/instruments/SchedulerTimer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/framework/instruments/SchedulerTimer.cpp')
-rw-r--r--tests/framework/instruments/SchedulerTimer.cpp28
1 files changed, 27 insertions, 1 deletions
diff --git a/tests/framework/instruments/SchedulerTimer.cpp b/tests/framework/instruments/SchedulerTimer.cpp
index c114dfbd9d..98c9b878d9 100644
--- a/tests/framework/instruments/SchedulerTimer.cpp
+++ b/tests/framework/instruments/SchedulerTimer.cpp
@@ -23,6 +23,7 @@
*/
#include "SchedulerTimer.h"
+#include "Instruments.h"
#include "WallClockTimer.h"
#include "arm_compute/core/CPP/ICPPKernel.h"
#include "arm_compute/core/utils/misc/Cast.h"
@@ -114,8 +115,12 @@ private:
template <bool output_timestamps>
SchedulerClock<output_timestamps>::SchedulerClock(ScaleFactor scale_factor)
- : _kernels(), _real_scheduler(nullptr), _real_scheduler_type(), _real_graph_function(nullptr), _scale_factor(scale_factor), _interceptor(nullptr)
+ : _kernels(), _real_scheduler(nullptr), _real_scheduler_type(), _real_graph_function(nullptr), _scale_factor(scale_factor), _interceptor(nullptr), _scheduler_users()
{
+ if(instruments_info != nullptr)
+ {
+ _scheduler_users = instruments_info->_scheduler_users;
+ }
}
template <bool output_timestamps>
@@ -157,6 +162,17 @@ void SchedulerClock<output_timestamps>::test_start()
_interceptor = std::make_shared<Interceptor<output_timestamps>>(_kernels, *_real_scheduler, _scale_factor);
Scheduler::set(std::static_pointer_cast<IScheduler>(_interceptor));
graph::TaskExecutor::get().execute_function = task_interceptor;
+
+ // Create an interceptor for each scheduler
+ // TODO(COMPID-2638) : Allow multiple schedulers, now it assumes the same scheduler is used.
+ std::for_each(std::begin(_scheduler_users), std::end(_scheduler_users),
+ [&](ISchedulerUser * user)
+ {
+ if(user != nullptr && user->scheduler() != nullptr)
+ {
+ user->intercept_scheduler(support::cpp14::make_unique<Interceptor<output_timestamps>>(_kernels, *user->scheduler(), _scale_factor));
+ }
+ });
}
}
@@ -175,6 +191,16 @@ void SchedulerClock<output_timestamps>::test_stop()
_interceptor = nullptr;
graph::TaskExecutor::get().execute_function = _real_graph_function;
_real_graph_function = nullptr;
+
+ // Restore schedulers
+ std::for_each(std::begin(_scheduler_users), std::end(_scheduler_users),
+ [&](ISchedulerUser * user)
+ {
+ if(user != nullptr)
+ {
+ user->restore_scheduler();
+ }
+ });
}
template <bool output_timestamps>