summaryrefslogtreecommitdiff
path: root/src/tests/common/fibers.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/common/fibers.cpp')
-rw-r--r--src/tests/common/fibers.cpp39
1 files changed, 18 insertions, 21 deletions
diff --git a/src/tests/common/fibers.cpp b/src/tests/common/fibers.cpp
index d94492fc6..b2ded2065 100644
--- a/src/tests/common/fibers.cpp
+++ b/src/tests/common/fibers.cpp
@@ -67,16 +67,15 @@ void TestControl1::DoWork() {
67 value++; 67 value++;
68 } 68 }
69 results[id] = value; 69 results[id] = value;
70 Fiber::YieldTo(work_fibers[id], thread_fibers[id]); 70 Fiber::YieldTo(work_fibers[id].get(), thread_fibers[id].get());
71} 71}
72 72
73void TestControl1::ExecuteThread(u32 id) { 73void TestControl1::ExecuteThread(u32 id) {
74 thread_ids.Register(id); 74 thread_ids.Register(id);
75 auto thread_fiber = Fiber::ThreadToFiber(); 75 thread_fibers[id] = Fiber::ThreadToFiber();
76 thread_fibers[id] = thread_fiber;
77 work_fibers[id] = std::make_shared<Fiber>(std::function<void(void*)>{WorkControl1}, this); 76 work_fibers[id] = std::make_shared<Fiber>(std::function<void(void*)>{WorkControl1}, this);
78 items[id] = rand() % 256; 77 items[id] = rand() % 256;
79 Fiber::YieldTo(thread_fibers[id], work_fibers[id]); 78 Fiber::YieldTo(thread_fibers[id].get(), work_fibers[id].get());
80 thread_fibers[id]->Exit(); 79 thread_fibers[id]->Exit();
81} 80}
82 81
@@ -117,11 +116,11 @@ public:
117 for (u32 i = 0; i < 12000; i++) { 116 for (u32 i = 0; i < 12000; i++) {
118 value1 += i; 117 value1 += i;
119 } 118 }
120 Fiber::YieldTo(fiber1, fiber3); 119 Fiber::YieldTo(fiber1.get(), fiber3.get());
121 const u32 id = thread_ids.Get(); 120 const u32 id = thread_ids.Get();
122 assert1 = id == 1; 121 assert1 = id == 1;
123 value2 += 5000; 122 value2 += 5000;
124 Fiber::YieldTo(fiber1, thread_fibers[id]); 123 Fiber::YieldTo(fiber1.get(), thread_fibers[id].get());
125 } 124 }
126 125
127 void DoWork2() { 126 void DoWork2() {
@@ -129,7 +128,7 @@ public:
129 ; 128 ;
130 value2 = 2000; 129 value2 = 2000;
131 trap = false; 130 trap = false;
132 Fiber::YieldTo(fiber2, fiber1); 131 Fiber::YieldTo(fiber2.get(), fiber1.get());
133 assert3 = false; 132 assert3 = false;
134 } 133 }
135 134
@@ -137,19 +136,19 @@ public:
137 const u32 id = thread_ids.Get(); 136 const u32 id = thread_ids.Get();
138 assert2 = id == 0; 137 assert2 = id == 0;
139 value1 += 1000; 138 value1 += 1000;
140 Fiber::YieldTo(fiber3, thread_fibers[id]); 139 Fiber::YieldTo(fiber3.get(), thread_fibers[id].get());
141 } 140 }
142 141
143 void ExecuteThread(u32 id); 142 void ExecuteThread(u32 id);
144 143
145 void CallFiber1() { 144 void CallFiber1() {
146 const u32 id = thread_ids.Get(); 145 const u32 id = thread_ids.Get();
147 Fiber::YieldTo(thread_fibers[id], fiber1); 146 Fiber::YieldTo(thread_fibers[id].get(), fiber1.get());
148 } 147 }
149 148
150 void CallFiber2() { 149 void CallFiber2() {
151 const u32 id = thread_ids.Get(); 150 const u32 id = thread_ids.Get();
152 Fiber::YieldTo(thread_fibers[id], fiber2); 151 Fiber::YieldTo(thread_fibers[id].get(), fiber2.get());
153 } 152 }
154 153
155 void Exit(); 154 void Exit();
@@ -185,8 +184,7 @@ static void WorkControl2_3(void* control) {
185 184
186void TestControl2::ExecuteThread(u32 id) { 185void TestControl2::ExecuteThread(u32 id) {
187 thread_ids.Register(id); 186 thread_ids.Register(id);
188 auto thread_fiber = Fiber::ThreadToFiber(); 187 thread_fibers[id] = Fiber::ThreadToFiber();
189 thread_fibers[id] = thread_fiber;
190} 188}
191 189
192void TestControl2::Exit() { 190void TestControl2::Exit() {
@@ -241,23 +239,23 @@ public:
241 239
242 void DoWork1() { 240 void DoWork1() {
243 value1 += 1; 241 value1 += 1;
244 Fiber::YieldTo(fiber1, fiber2); 242 Fiber::YieldTo(fiber1.get(), fiber2.get());
245 const u32 id = thread_ids.Get(); 243 const u32 id = thread_ids.Get();
246 value3 += 1; 244 value3 += 1;
247 Fiber::YieldTo(fiber1, thread_fibers[id]); 245 Fiber::YieldTo(fiber1.get(), thread_fibers[id].get());
248 } 246 }
249 247
250 void DoWork2() { 248 void DoWork2() {
251 value2 += 1; 249 value2 += 1;
252 const u32 id = thread_ids.Get(); 250 const u32 id = thread_ids.Get();
253 Fiber::YieldTo(fiber2, thread_fibers[id]); 251 Fiber::YieldTo(fiber2.get(), thread_fibers[id].get());
254 } 252 }
255 253
256 void ExecuteThread(u32 id); 254 void ExecuteThread(u32 id);
257 255
258 void CallFiber1() { 256 void CallFiber1() {
259 const u32 id = thread_ids.Get(); 257 const u32 id = thread_ids.Get();
260 Fiber::YieldTo(thread_fibers[id], fiber1); 258 Fiber::YieldTo(thread_fibers[id].get(), fiber1.get());
261 } 259 }
262 260
263 void Exit(); 261 void Exit();
@@ -266,7 +264,7 @@ public:
266 u32 value2{}; 264 u32 value2{};
267 u32 value3{}; 265 u32 value3{};
268 ThreadIds thread_ids; 266 ThreadIds thread_ids;
269 std::vector<std::shared_ptr<Common::Fiber>> thread_fibers; 267 std::vector<std::unique_ptr<Common::Fiber>> thread_fibers;
270 std::shared_ptr<Common::Fiber> fiber1; 268 std::shared_ptr<Common::Fiber> fiber1;
271 std::shared_ptr<Common::Fiber> fiber2; 269 std::shared_ptr<Common::Fiber> fiber2;
272}; 270};
@@ -283,8 +281,7 @@ static void WorkControl3_2(void* control) {
283 281
284void TestControl3::ExecuteThread(u32 id) { 282void TestControl3::ExecuteThread(u32 id) {
285 thread_ids.Register(id); 283 thread_ids.Register(id);
286 auto thread_fiber = Fiber::ThreadToFiber(); 284 thread_fibers[id] = Fiber::ThreadToFiber();
287 thread_fibers[id] = thread_fiber;
288} 285}
289 286
290void TestControl3::Exit() { 287void TestControl3::Exit() {
@@ -332,7 +329,7 @@ public:
332 329
333 void Execute() { 330 void Execute() {
334 thread_fiber = Fiber::ThreadToFiber(); 331 thread_fiber = Fiber::ThreadToFiber();
335 Fiber::YieldTo(thread_fiber, fiber1); 332 Fiber::YieldTo(thread_fiber.get(), fiber1.get());
336 thread_fiber->Exit(); 333 thread_fiber->Exit();
337 } 334 }
338 335
@@ -340,7 +337,7 @@ public:
340 fiber1->SetRewindPoint(std::function<void(void*)>{WorkControl4}, this); 337 fiber1->SetRewindPoint(std::function<void(void*)>{WorkControl4}, this);
341 if (rewinded) { 338 if (rewinded) {
342 goal_reached = true; 339 goal_reached = true;
343 Fiber::YieldTo(fiber1, thread_fiber); 340 Fiber::YieldTo(fiber1.get(), thread_fiber.get());
344 } 341 }
345 rewinded = true; 342 rewinded = true;
346 fiber1->Rewind(); 343 fiber1->Rewind();