arm_compute v18.05
diff --git a/tests/framework/instruments/SchedulerTimer.cpp b/tests/framework/instruments/SchedulerTimer.cpp
index e42cebd..1b37b18 100644
--- a/tests/framework/instruments/SchedulerTimer.cpp
+++ b/tests/framework/instruments/SchedulerTimer.cpp
@@ -25,6 +25,8 @@
 
 #include "WallClockTimer.h"
 #include "arm_compute/core/CPP/ICPPKernel.h"
+#include "arm_compute/core/utils/misc/Cast.h"
+#include "arm_compute/graph/INode.h"
 
 namespace arm_compute
 {
@@ -42,7 +44,7 @@
 public:
     /** Default constructor. */
     Interceptor(std::list<SchedulerTimer::kernel_info> &kernels, IScheduler &real_scheduler, ScaleFactor scale_factor)
-        : _kernels(kernels), _real_scheduler(real_scheduler), _timer(scale_factor)
+        : _kernels(kernels), _real_scheduler(real_scheduler), _timer(scale_factor), _prefix()
     {
     }
 
@@ -56,6 +58,11 @@
         return _real_scheduler.num_threads();
     }
 
+    void set_prefix(std::string prefix)
+    {
+        _prefix = std::move(prefix);
+    }
+
     void schedule(ICPPKernel *kernel, unsigned int split_dimension) override
     {
         _timer.start();
@@ -64,6 +71,7 @@
 
         SchedulerTimer::kernel_info info;
         info.name         = kernel->name();
+        info.prefix       = _prefix;
         info.measurements = _timer.measurements();
         _kernels.push_back(std::move(info));
     }
@@ -72,32 +80,68 @@
     std::list<SchedulerTimer::kernel_info> &_kernels;
     IScheduler                             &_real_scheduler;
     WallClockTimer                          _timer;
+    std::string                             _prefix;
 };
 
 SchedulerTimer::SchedulerTimer(ScaleFactor scale_factor)
-    : _kernels(), _real_scheduler(nullptr), _real_scheduler_type(), _scale_factor(scale_factor)
+    : _kernels(), _real_scheduler(nullptr), _real_scheduler_type(), _real_graph_function(nullptr), _scale_factor(scale_factor), _interceptor(nullptr)
 {
 }
 
-void SchedulerTimer::start()
+void SchedulerTimer::test_start()
 {
+    // Start intercepting tasks:
+    ARM_COMPUTE_ERROR_ON(_real_graph_function != nullptr);
+    _real_graph_function  = graph::TaskExecutor::get().execute_function;
+    auto task_interceptor = [this](graph::ExecutionTask & task)
+    {
+        Interceptor *scheduler = nullptr;
+        if(dynamic_cast<Interceptor *>(this->_interceptor.get()) != nullptr)
+        {
+            scheduler = arm_compute::utils::cast::polymorphic_downcast<Interceptor *>(_interceptor.get());
+            if(task.node != nullptr && !task.node->name().empty())
+            {
+                scheduler->set_prefix(task.node->name() + "/");
+            }
+            else
+            {
+                scheduler->set_prefix("");
+            }
+        }
+
+        this->_real_graph_function(task);
+
+        if(scheduler != nullptr)
+        {
+            scheduler->set_prefix("");
+        }
+    };
+
     ARM_COMPUTE_ERROR_ON(_real_scheduler != nullptr);
     _real_scheduler_type = Scheduler::get_type();
     //Note: We can't currently replace a custom scheduler
     if(_real_scheduler_type != Scheduler::Type::CUSTOM)
     {
-        _real_scheduler  = &Scheduler::get();
-        auto interceptor = std::make_shared<Interceptor>(_kernels, *_real_scheduler, _scale_factor);
-        Scheduler::set(std::static_pointer_cast<IScheduler>(interceptor));
+        _real_scheduler = &Scheduler::get();
+        _interceptor    = std::make_shared<Interceptor>(_kernels, *_real_scheduler, _scale_factor);
+        Scheduler::set(std::static_pointer_cast<IScheduler>(_interceptor));
+        graph::TaskExecutor::get().execute_function = task_interceptor;
     }
+}
+
+void SchedulerTimer::start()
+{
     _kernels.clear();
 }
 
-void SchedulerTimer::stop()
+void SchedulerTimer::test_stop()
 {
     // Restore real scheduler
     Scheduler::set(_real_scheduler_type);
-    _real_scheduler = nullptr;
+    _real_scheduler                             = nullptr;
+    _interceptor                                = nullptr;
+    graph::TaskExecutor::get().execute_function = _real_graph_function;
+    _real_graph_function                        = nullptr;
 }
 
 Instrument::MeasurementsMap SchedulerTimer::measurements() const
@@ -106,7 +150,7 @@
     unsigned int    kernel_number = 0;
     for(auto kernel : _kernels)
     {
-        measurements.emplace(kernel.name + " #" + support::cpp11::to_string(kernel_number++), kernel.measurements.begin()->second);
+        measurements.emplace(kernel.prefix + kernel.name + " #" + support::cpp11::to_string(kernel_number++), kernel.measurements.begin()->second);
     }
 
     return measurements;