diff --git a/.gitea/workflows/tag.yaml b/.gitea/workflows/tag.yaml index e6fcc8a..e77bcd2 100644 --- a/.gitea/workflows/tag.yaml +++ b/.gitea/workflows/tag.yaml @@ -11,15 +11,13 @@ env: jobs: build-ppc: name: "🔨 Build for PowerPC" - runs-on: msi-walmart + runs-on: asrock container: image: git.tesses.org/tesses50/linux-ppc:latest steps: - uses: actions/checkout@v4 - run: bash build-for-ppc.sh - uses: akkuman/gitea-release-action@v1 - env: - NODE_OPTIONS: '--experimental-fetch' # if nodejs < 18 with: prerelease: true files: |- @@ -36,8 +34,6 @@ jobs: env -C Packaging/WinToolsIntel bash build.sh - uses: akkuman/gitea-release-action@v1 - env: - NODE_OPTIONS: '--experimental-fetch' # if nodejs < 18 with: prerelease: true files: |- @@ -60,15 +56,15 @@ jobs: build-packages: name: "🔨 Build for everything else" strategy: - fail-fast: true + fail-fast: false matrix: include: - container: "git.tesses.org/tesses50/linux-x64:latest" - puter: "msi-walmart" + puter: "asrock" nfpmName: "amd64" debianName: "x86_64-linux-gnu" - container: "git.tesses.org/tesses50/linux-x86:latest" - puter: "asrock" + puter: "msi-walmart" nfpmName: "386" debianName: "i386-linux-gnu" - container: "git.tesses.org/tesses50/linux-arm:latest" @@ -82,17 +78,14 @@ jobs: - container: "git.tesses.org/tesses50/linux-riscv64:latest" nfpmName: "riscv64" debianName: "riscv64-linux-gnu" - puter: "asrock" + puter: "msi-walmart" runs-on: ${{ matrix.puter }} container: image: ${{ matrix.container }} steps: - uses: actions/checkout@v4 - url: https://git.tesses.org/tesses50/tessesframework.git - run: bash build-for-nfpm.sh ${{ matrix.nfpmName }} ${{ matrix.debianName }} - uses: akkuman/gitea-release-action@v1 - env: - NODE_OPTIONS: '--experimental-fetch' # if nodejs < 18 with: prerelease: true files: |- diff --git a/changelog.md b/changelog.md index 825b39e..4864d3a 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,8 @@ # Changelog +## 0.0.11 +Fix the event loop so it isn't 100% CPU utilization + ## 0.0.10 Fix NX, add constant time compare diff --git a/src/TF_Init.cpp b/src/TF_Init.cpp index 38d225e..493063e 100644 --- a/src/TF_Init.cpp +++ b/src/TF_Init.cpp @@ -98,13 +98,7 @@ static GXRModeObj *rmode = NULL; #endif namespace Tesses::Framework { -#if defined(TESSESFRAMEWORK_ENABLE_THREADING) && \ - (defined(GEKKO) || defined(__SWITCH__)) -namespace Threading { -extern void JoinAllThreads(); -extern void LookForFinishedThreads(); -} // namespace Threading -#endif + volatile static bool isRunningSig = true; volatile static std::atomic isRunning; volatile static std::atomic gaming_console_events = true; @@ -268,10 +262,6 @@ int64_t TF_Timer_Handle::GetIntervalMilliseconds() { } void TF_RunEventLoopItteration() { -#if defined(TESSESFRAMEWORK_ENABLE_THREADING) && (defined(__SWITCH__)) - Tesses::Framework::Threading::LookForFinishedThreads(); - -#endif #if defined(TESSESFRAMEWORK_ENABLE_THREADING) invokings_mtx.Lock(); auto invokes = invokings; @@ -315,13 +305,11 @@ void TF_RunEventLoopItteration() { #endif timer_handler->Update(); + TF_Sleep(1); } void TF_SetIsRunning(bool _isRunning) { isRunning = _isRunning; } void TF_Quit() { isRunning = false; -#if defined(TESSESFRAMEWORK_ENABLE_THREADING) && (defined(__SWITCH__)) - Tesses::Framework::Threading::JoinAllThreads(); -#endif } void TF_InitEventLoop() { signal(SIGINT, _sigInt); diff --git a/src/Threading/Thread.cpp b/src/Threading/Thread.cpp index af80835..187d7fd 100644 --- a/src/Threading/Thread.cpp +++ b/src/Threading/Thread.cpp @@ -40,89 +40,6 @@ namespace Tesses::Framework::Threading { #if defined(TESSESFRAMEWORK_ENABLE_THREADING) -#if defined(__SWITCH__) -Mutex needed_to_be_joined_mtx; -class NeedToBeJoinnedThread { - - static void *cb(void *data) { - - auto ntbjt = static_cast(data); - - ntbjt->hasInvoked = true; - TF_LOG("About to call thread func"); - if (ntbjt->_cb) - ntbjt->_cb(); - TF_LOG("Finished calling thread func"); - ntbjt->hasExited = true; - - return NULL; - } - std::function _cb; - std::atomic hasInvoked = false; - - pthread_t thrd; - - public: - NeedToBeJoinnedThread(std::function cb) { - this->_cb = cb; - joinned = false; - joinning = false; - hasExited = false; - - pthread_create(&thrd, NULL, this->cb, static_cast(this)); - } - std::atomic joinned; - std::atomic joinning; - std::atomic hasExited; - void Join(); - void WaitTillInvoked() { - while (!hasInvoked) - ; - TF_LOG("Invoked!"); - } -}; - -void NeedToBeJoinnedThread::Join() { - if (joinning) { - return; - } - joinning = true; - pthread_join(this->thrd, NULL); - - joinned = true; - // start the joinning process -} - -std::vector> needToBeJoinnedThread; -void JoinAllThreads() { - needed_to_be_joined_mtx.Lock(); - for (auto item : needToBeJoinnedThread) { - item->Join(); - } - needToBeJoinnedThread.clear(); - needed_to_be_joined_mtx.Unlock(); -} -void LookForFinishedThreads() { - - needed_to_be_joined_mtx.Lock(); - for (auto index = needToBeJoinnedThread.begin(); - index < needToBeJoinnedThread.end(); index++) { - auto &idx = *index; - if (idx->hasExited) { - if (idx->joinning) - while (!idx->joinned) - ; - TF_LOG("ABOUT TO JOIN"); - idx->Join(); - TF_LOG("JOINNED"); - needToBeJoinnedThread.erase(index); - index--; - } - } - needed_to_be_joined_mtx.Unlock(); -} - -#endif class ThreadHiddenFieldData : public HiddenFieldData { public: #if defined(_WIN32) @@ -130,8 +47,7 @@ class ThreadHiddenFieldData : public HiddenFieldData { HANDLE thrd; DWORD thrdId; -#elif defined(__SWITCH__) - std::shared_ptr thread; + #else pthread_t thrd; #endif @@ -143,8 +59,6 @@ class ThreadHiddenFieldData : public HiddenFieldData { #if defined(_WIN32) static DWORD __stdcall cb(LPVOID data) -#elif defined(__SWITCH__) -static void cb(void *data) #else static void *cb(void *data) #endif @@ -154,10 +68,8 @@ static void *cb(void *data) auto fn = thrd->fn; thrd->hasInvoked = true; fn(); -#if !defined(_WIN32) && !defined(__SWITCH__) +#if !defined(_WIN32) return NULL; -#elif (__SWITCH__) - #else return 0; #endif @@ -174,9 +86,6 @@ Thread::Thread(std::function fn) { CreateThread(NULL, 0, cb, static_cast(data), 0, &data->thrdId); while (!data->hasInvoked) ; -#elif defined(__SWITCH__) - data->thread = std::make_shared(fn); - data->thread->WaitTillInvoked(); // threadCreate(,cb,static_cast(data),NULL,8000000,0x00,-2); #else pthread_create(&data->thrd, NULL, cb, static_cast(data)); @@ -193,13 +102,6 @@ void Thread::Detach() { #if defined(_WIN32) CloseHandle(data->thrd); -#elif defined(__SWITCH__) - TF_LOG("Detaching"); - needed_to_be_joined_mtx.Lock(); - needToBeJoinnedThread.push_back(data->thread); - needed_to_be_joined_mtx.Unlock(); - - TF_LOG("Detached!"); #else pthread_detach(data->thrd); #endif @@ -212,8 +114,6 @@ void Thread::Join() { auto data = this->data.GetField(); #if defined(_WIN32) WaitForSingleObject(data->thrd, INFINITE); -#elif defined(__SWITCH__) - data->thread->Join(); #else pthread_join(data->thrd, NULL); #endif