From 36be459c80ac70fe7f6766fcf8a7fd83886cea70 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Wed, 12 Mar 2025 12:37:33 +0900 Subject: [PATCH] renderer: ++wasm build portability removed the direct thread inclusion when those thread features are disabled --- src/renderer/tvgTaskScheduler.cpp | 30 ++++++++++++++++++------------ src/renderer/tvgTaskScheduler.h | 16 +++++++++++++--- src/savers/gif/tvgGifSaver.cpp | 2 +- 3 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/renderer/tvgTaskScheduler.cpp b/src/renderer/tvgTaskScheduler.cpp index 31f77bf8..276cd7eb 100644 --- a/src/renderer/tvgTaskScheduler.cpp +++ b/src/renderer/tvgTaskScheduler.cpp @@ -20,24 +20,17 @@ * SOFTWARE. */ -#include -#include + #include "tvgArray.h" #include "tvgInlist.h" #include "tvgTaskScheduler.h" - /************************************************************************/ /* Internal Class Implementation */ /************************************************************************/ namespace tvg { -struct TaskSchedulerImpl; -static TaskSchedulerImpl* _inst = nullptr; -static std::thread::id _tid; //dominant thread id - - #ifdef THORVG_THREAD_SUPPORT static thread_local bool _async = true; @@ -196,11 +189,14 @@ struct TaskSchedulerImpl /* External Class Implementation */ /************************************************************************/ +static TaskSchedulerImpl* _inst = nullptr; +static ThreadID _tid; //dominant thread id + void TaskScheduler::init(uint32_t threads) { if (_inst) return; _inst = new TaskSchedulerImpl(threads); - _tid = std::this_thread::get_id(); + _tid = tid(); } @@ -219,8 +215,7 @@ void TaskScheduler::request(Task* task) uint32_t TaskScheduler::threads() { - if (_inst) return _inst->threadCnt(); - return 0; + return _inst ? _inst->threadCnt() : 0; } @@ -230,7 +225,18 @@ void TaskScheduler::async(bool on) _async = on; } + bool TaskScheduler::onthread() { - return _tid != std::this_thread::get_id(); + return _tid != tid(); +} + + +ThreadID TaskScheduler::tid() +{ +#ifdef THORVG_THREAD_SUPPORT + return std::this_thread::get_id(); +#else + return 0; +#endif } \ No newline at end of file diff --git a/src/renderer/tvgTaskScheduler.h b/src/renderer/tvgTaskScheduler.h index 6938bd0a..fd59a2ae 100644 --- a/src/renderer/tvgTaskScheduler.h +++ b/src/renderer/tvgTaskScheduler.h @@ -23,16 +23,23 @@ #ifndef _TVG_TASK_SCHEDULER_H_ #define _TVG_TASK_SCHEDULER_H_ -#include -#include - #include "tvgCommon.h" #include "tvgInlist.h" +#ifdef THORVG_THREAD_SUPPORT + #include + #include + #include + #include +#endif + namespace tvg { + #ifdef THORVG_THREAD_SUPPORT +using ThreadID = std::thread::id; + struct Task { private: @@ -79,6 +86,8 @@ private: #else //THORVG_THREAD_SUPPORT +using ThreadID = uint8_t; + struct Task { public: @@ -105,6 +114,7 @@ struct TaskScheduler static void request(Task* task); static void async(bool on); static bool onthread(); //figure out whether on worker thread or not + static ThreadID tid(); }; } //namespace diff --git a/src/savers/gif/tvgGifSaver.cpp b/src/savers/gif/tvgGifSaver.cpp index 0bf398c2..c157f082 100644 --- a/src/savers/gif/tvgGifSaver.cpp +++ b/src/savers/gif/tvgGifSaver.cpp @@ -21,7 +21,7 @@ */ #include - +#include #include "tvgStr.h" #include "tvgGifEncoder.h" #include "tvgGifSaver.h"