You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-15 13:51:40 +00:00
@@ -48,13 +48,15 @@ namespace embree
|
||||
{
|
||||
Task* prevTask = thread.task;
|
||||
thread.task = this;
|
||||
try {
|
||||
if (thread.scheduler->cancellingException == nullptr)
|
||||
// -- GODOT start --
|
||||
// try {
|
||||
// if (thread.scheduler->cancellingException == nullptr)
|
||||
closure->execute();
|
||||
} catch (...) {
|
||||
if (thread.scheduler->cancellingException == nullptr)
|
||||
thread.scheduler->cancellingException = std::current_exception();
|
||||
}
|
||||
// } catch (...) {
|
||||
// if (thread.scheduler->cancellingException == nullptr)
|
||||
// thread.scheduler->cancellingException = std::current_exception();
|
||||
// }
|
||||
// -- GODOT end --
|
||||
thread.task = prevTask;
|
||||
add_dependencies(-1);
|
||||
}
|
||||
@@ -152,6 +154,12 @@ namespace embree
|
||||
assert(newNumThreads);
|
||||
newNumThreads = min(newNumThreads, (size_t) getNumberOfLogicalThreads());
|
||||
|
||||
// We are observing a few % gain by increasing number threads by 2 on aarch64.
|
||||
#if defined(__aarch64__) && defined(BUILD_IOS)
|
||||
numThreads = newNumThreads*2;
|
||||
#else
|
||||
numThreads = newNumThreads;
|
||||
#endif
|
||||
numThreads = newNumThreads;
|
||||
if (!startThreads && !running) return;
|
||||
running = true;
|
||||
@@ -291,8 +299,11 @@ namespace embree
|
||||
size_t threadIndex = allocThreadIndex();
|
||||
condition.wait(mutex, [&] () { return hasRootTask.load(); });
|
||||
mutex.unlock();
|
||||
std::exception_ptr except = thread_loop(threadIndex);
|
||||
if (except != nullptr) std::rethrow_exception(except);
|
||||
// -- GODOT start --
|
||||
// std::exception_ptr except = thread_loop(threadIndex);
|
||||
// if (except != nullptr) std::rethrow_exception(except);
|
||||
thread_loop(threadIndex);
|
||||
// -- GODOT end --
|
||||
}
|
||||
|
||||
void TaskScheduler::reset() {
|
||||
@@ -324,7 +335,10 @@ namespace embree
|
||||
return thread->scheduler->cancellingException == nullptr;
|
||||
}
|
||||
|
||||
std::exception_ptr TaskScheduler::thread_loop(size_t threadIndex)
|
||||
// -- GODOT start --
|
||||
// std::exception_ptr TaskScheduler::thread_loop(size_t threadIndex)
|
||||
void TaskScheduler::thread_loop(size_t threadIndex)
|
||||
// -- GODOT end --
|
||||
{
|
||||
/* allocate thread structure */
|
||||
std::unique_ptr<Thread> mthread(new Thread(threadIndex,this)); // too large for stack allocation
|
||||
@@ -347,9 +361,10 @@ namespace embree
|
||||
swapThread(oldThread);
|
||||
|
||||
/* remember exception to throw */
|
||||
std::exception_ptr except = nullptr;
|
||||
if (cancellingException != nullptr) except = cancellingException;
|
||||
|
||||
// -- GODOT start --
|
||||
// std::exception_ptr except = nullptr;
|
||||
// if (cancellingException != nullptr) except = cancellingException;
|
||||
// -- GODOT end --
|
||||
/* wait for all threads to terminate */
|
||||
threadCounter--;
|
||||
#if defined(__WIN32__)
|
||||
@@ -367,7 +382,10 @@ namespace embree
|
||||
yield();
|
||||
#endif
|
||||
}
|
||||
return except;
|
||||
// -- GODOT start --
|
||||
// return except;
|
||||
return;
|
||||
// -- GODOT end --
|
||||
}
|
||||
|
||||
bool TaskScheduler::steal_from_other_threads(Thread& thread)
|
||||
|
||||
Reference in New Issue
Block a user