SpiecsEngine
 
Loading...
Searching...
No Matches
ThreadModel.cpp
Go to the documentation of this file.
1/**
2* @file ThreadModel.cpp
3* @brief The ThreadModel Class Implementation.
4* @author Spices.
5*/
6
7#include "Pchheader.h"
8#include "ThreadModel.h"
9
10namespace Spices {
11
12 std::shared_ptr<ThreadModel> ThreadModel::m_ThreadModel = nullptr;
13
14 ThreadModel::ThreadModel()
15 : m_CustomThreadPool(nullptr)
16 , m_GameThreadPool(nullptr)
17 , m_RHIThreadPool(nullptr)
18 {}
19
20 std::shared_ptr<ThreadModel> ThreadModel::Get()
21 {
23
24 if (!m_ThreadModel)
25 {
26 m_ThreadModel = std::make_shared<ThreadModel>();
27 }
28
29 return m_ThreadModel;
30 }
31
32 void ThreadModel::InitCustomThreadPool()
33 {
35
36 if (!m_CustomThreadPool)
37 {
38 m_CustomThreadPool = std::make_shared<ThreadPool>("CusT");
39 m_CustomThreadPool->SetMode(PoolMode::MODE_CACHED);
40 m_CustomThreadPool->Start(8);
41 }
42 }
43
44 void ThreadModel::InitGameThreadPool()
45 {
47
48 if (!m_GameThreadPool)
49 {
50 m_GameThreadPool = std::make_shared<ThreadPool>("GameT");
51 m_GameThreadPool->SetMode(PoolMode::MODE_FIXED);
52 m_GameThreadPool->Start(4);
53 m_GameThreadPool->Suspend();
54 }
55 }
56
57 void ThreadModel::InitRHIThreadPool(std::function<void(std::shared_ptr<VulkanCmdThreadPool>& ptr)> fn)
58 {
60
61 if (!m_RHIThreadPool)
62 {
63 fn(m_RHIThreadPool);
64 }
65 }
66
67 void ThreadModel::ShutDownCustomThreadPool()
68 {
70
71 m_CustomThreadPool = nullptr;
72 }
73
74 void ThreadModel::ShutDownGameThreadPool()
75 {
77
78 m_GameThreadPool = nullptr;
79 }
80
81 void ThreadModel::ShutDownRHIThreadPool()
82 {
84
85 m_RHIThreadPool = nullptr;
86 }
87
88 void ThreadModel::ClearMainThreadTaskQueue()
89 {
91
92 m_MainThreadTasks.Clear();
93 }
94
95 void ThreadModel::ShutDownThreadModel()
96 {
98
99 ShutDownRHIThreadPool();
100 ShutDownGameThreadPool();
101 ShutDownCustomThreadPool();
102 ClearMainThreadTaskQueue();
103 }
104}
#define SPICES_PROFILE_ZONE
Wrappers of RHI Thread Pool.