1 // Copyright 2009-2020 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 
4 #include "TaskSys.h"
5 // ospray
6 #include "../../platform.h"
7 // stl
8 #include <thread>
9 
10 namespace rkcommon {
11   namespace tasking {
12     namespace detail {
13 
14       // TaskSys definitions //////////////////////////////////////////////////
15 
16       static std::unique_ptr<enki::TaskScheduler> g_ts;
17 
18       // Interface definitions ////////////////////////////////////////////////
19 
initTaskSystemInternal(int nThreads)20       void initTaskSystemInternal(int nThreads)
21       {
22         g_ts = std::unique_ptr<enki::TaskScheduler>(new enki::TaskScheduler());
23         if (nThreads < 1)
24           nThreads = enki::GetNumHardwareThreads();
25         g_ts->Initialize(nThreads);
26       }
27 
numThreadsTaskSystemInternal()28       int numThreadsTaskSystemInternal()
29       {
30         return g_ts->GetNumTaskThreads();
31       }
32 
scheduleTaskInternal(Task * task)33       void scheduleTaskInternal(Task *task)
34       {
35         if (g_ts.get() == nullptr)
36           initTaskSystemInternal(-1);
37 
38         g_ts->AddTaskSetToPipe(task);
39       }
40 
waitInternal(Task * task)41       void waitInternal(Task *task)
42       {
43         g_ts->WaitforTask(task);
44       }
45 
46     }  // namespace detail
47   }    // namespace tasking
48 }  // namespace rkcommon
49