diff --git a/capture/build/win32/capture.vcxproj b/capture/build/win32/capture.vcxproj index 097762a1..6f4ea4ba 100644 --- a/capture/build/win32/capture.vcxproj +++ b/capture/build/win32/capture.vcxproj @@ -177,10 +177,8 @@ - - diff --git a/capture/build/win32/capture.vcxproj.filters b/capture/build/win32/capture.vcxproj.filters index c5ce4b4f..30b334b5 100644 --- a/capture/build/win32/capture.vcxproj.filters +++ b/capture/build/win32/capture.vcxproj.filters @@ -185,12 +185,6 @@ common - - common - - - common - common diff --git a/common/TracyMutex.hpp b/common/TracyMutex.hpp index e5899048..57fb01a0 100644 --- a/common/TracyMutex.hpp +++ b/common/TracyMutex.hpp @@ -10,15 +10,6 @@ namespace tracy using TracyMutex = std::shared_mutex; } -#elif defined __CYGWIN__ - -#include "tracy_benaphore.h" - -namespace tracy -{ -using TracyMutex = NonRecursiveBenaphore; -} - #else #include diff --git a/common/tracy_benaphore.h b/common/tracy_benaphore.h deleted file mode 100644 index 6a10dada..00000000 --- a/common/tracy_benaphore.h +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) 2015 Jeff Preshing -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgement in the product documentation would be -// appreciated but is not required. -// 2. Altered source versions must be plainly marked as such, and must not be -// misrepresented as being the original software. -// 3. This notice may not be removed or altered from any source distribution. - -#ifndef __TRACY_CPP11OM_BENAPHORE_H__ -#define __TRACY_CPP11OM_BENAPHORE_H__ - -#include -#include -#include -#include "tracy_sema.h" - -namespace tracy -{ - -class NonRecursiveBenaphore -{ -private: - std::atomic m_contentionCount; - DefaultSemaphoreType m_sema; - -public: - NonRecursiveBenaphore() : m_contentionCount(0) {} - - void lock() - { - if (m_contentionCount.fetch_add(1, std::memory_order_acquire) > 0) - { - m_sema.wait(); - } - } - - bool try_lock() - { - if (m_contentionCount.load(std::memory_order_relaxed) != 0) - return false; - int expected = 0; - return m_contentionCount.compare_exchange_strong(expected, 1, std::memory_order_acquire); - } - - void unlock() - { - int oldCount = m_contentionCount.fetch_sub(1, std::memory_order_release); - assert(oldCount > 0); - if (oldCount > 1) - { - m_sema.signal(); - } - } -}; - -} - -#endif // __CPP11OM_BENAPHORE_H__ diff --git a/common/tracy_sema.h b/common/tracy_sema.h deleted file mode 100644 index d0584987..00000000 --- a/common/tracy_sema.h +++ /dev/null @@ -1,255 +0,0 @@ -// Copyright (c) 2015 Jeff Preshing -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgement in the product documentation would be -// appreciated but is not required. -// 2. Altered source versions must be plainly marked as such, and must not be -// misrepresented as being the original software. -// 3. This notice may not be removed or altered from any source distribution. - -#ifndef __TRACY_CPP11OM_SEMAPHORE_H__ -#define __TRACY_CPP11OM_SEMAPHORE_H__ - -#include -#include - -#if defined(__MACH__) - #include -#elif defined(__unix__) - #include -#endif - -namespace tracy -{ - -#if defined(_WIN32) -//--------------------------------------------------------- -// Semaphore (Windows) -//--------------------------------------------------------- -#ifndef MAXLONG -enum { MAXLONG = 0x7fffffff }; -#endif - -#ifndef INFINITE -enum { INFINITE = 0xFFFFFFFF }; -#endif - -#ifndef _WINDOWS_ -typedef void* HANDLE; - -extern "C" __declspec(dllimport) HANDLE __stdcall CreateSemaphoreA( void*, long, long, const char* ); -extern "C" __declspec(dllimport) int __stdcall CloseHandle( HANDLE ); -extern "C" __declspec(dllimport) unsigned long __stdcall WaitForSingleObject( HANDLE, unsigned long ); -extern "C" __declspec(dllimport) int __stdcall ReleaseSemaphore( HANDLE, long, long* ); -#endif - -class Semaphore -{ -private: - HANDLE m_hSema; - - Semaphore(const Semaphore& other) = delete; - Semaphore& operator=(const Semaphore& other) = delete; - -public: - Semaphore(int initialCount = 0) - { - assert(initialCount >= 0); - m_hSema = CreateSemaphoreA(NULL, initialCount, MAXLONG, NULL); - } - - ~Semaphore() - { - CloseHandle(m_hSema); - } - - void wait() - { - WaitForSingleObject(m_hSema, INFINITE); - } - - void signal(int count = 1) - { - ReleaseSemaphore(m_hSema, count, NULL); - } -}; - - -#elif defined(__MACH__) -//--------------------------------------------------------- -// Semaphore (Apple iOS and OSX) -// Can't use POSIX semaphores due to http://lists.apple.com/archives/darwin-kernel/2009/Apr/msg00010.html -//--------------------------------------------------------- - -class Semaphore -{ -private: - semaphore_t m_sema; - - Semaphore(const Semaphore& other) = delete; - Semaphore& operator=(const Semaphore& other) = delete; - -public: - Semaphore(int initialCount = 0) - { - assert(initialCount >= 0); - semaphore_create(mach_task_self(), &m_sema, SYNC_POLICY_FIFO, initialCount); - } - - ~Semaphore() - { - semaphore_destroy(mach_task_self(), m_sema); - } - - void wait() - { - semaphore_wait(m_sema); - } - - void signal() - { - semaphore_signal(m_sema); - } - - void signal(int count) - { - while (count-- > 0) - { - semaphore_signal(m_sema); - } - } -}; - - -#elif defined(__unix__) -//--------------------------------------------------------- -// Semaphore (POSIX, Linux) -//--------------------------------------------------------- - -class Semaphore -{ -private: - sem_t m_sema; - - Semaphore(const Semaphore& other) = delete; - Semaphore& operator=(const Semaphore& other) = delete; - -public: - Semaphore(int initialCount = 0) - { - assert(initialCount >= 0); - sem_init(&m_sema, 0, initialCount); - } - - ~Semaphore() - { - sem_destroy(&m_sema); - } - - void wait() - { - // http://stackoverflow.com/questions/2013181/gdb-causes-sem-wait-to-fail-with-eintr-error - int rc; - do - { - rc = sem_wait(&m_sema); - } - while (rc == -1 && errno == EINTR); - } - - void signal() - { - sem_post(&m_sema); - } - - void signal(int count) - { - while (count-- > 0) - { - sem_post(&m_sema); - } - } -}; - - -#else - -#error Unsupported platform! - -#endif - - -//--------------------------------------------------------- -// LightweightSemaphore -//--------------------------------------------------------- -class LightweightSemaphore -{ -private: - std::atomic m_count; - Semaphore m_sema; - - void waitWithPartialSpinning() - { - int oldCount; - // Is there a better way to set the initial spin count? - // If we lower it to 1000, testBenaphore becomes 15x slower on my Core i7-5930K Windows PC, - // as threads start hitting the kernel semaphore. - int spin = 10000; - while (spin--) - { - oldCount = m_count.load(std::memory_order_relaxed); - if ((oldCount > 0) && m_count.compare_exchange_strong(oldCount, oldCount - 1, std::memory_order_acquire)) - return; - std::atomic_signal_fence(std::memory_order_acquire); // Prevent the compiler from collapsing the loop. - } - oldCount = m_count.fetch_sub(1, std::memory_order_acquire); - if (oldCount <= 0) - { - m_sema.wait(); - } - } - -public: - LightweightSemaphore(int initialCount = 0) : m_count(initialCount) - { - assert(initialCount >= 0); - } - - bool tryWait() - { - int oldCount = m_count.load(std::memory_order_relaxed); - return (oldCount > 0 && m_count.compare_exchange_strong(oldCount, oldCount - 1, std::memory_order_acquire)); - } - - void wait() - { - if (!tryWait()) - waitWithPartialSpinning(); - } - - void signal(int count = 1) - { - int oldCount = m_count.fetch_add(count, std::memory_order_release); - int toRelease = -oldCount < count ? -oldCount : count; - if (toRelease > 0) - { - m_sema.signal(toRelease); - } - } -}; - - -typedef LightweightSemaphore DefaultSemaphoreType; - -} - -#endif // __CPP11OM_SEMAPHORE_H__ diff --git a/import-chrome/build/win32/import-chrome.vcxproj b/import-chrome/build/win32/import-chrome.vcxproj index 3f266a45..84f66f98 100644 --- a/import-chrome/build/win32/import-chrome.vcxproj +++ b/import-chrome/build/win32/import-chrome.vcxproj @@ -175,10 +175,8 @@ - - diff --git a/import-chrome/build/win32/import-chrome.vcxproj.filters b/import-chrome/build/win32/import-chrome.vcxproj.filters index d50b384e..ab8c88c6 100644 --- a/import-chrome/build/win32/import-chrome.vcxproj.filters +++ b/import-chrome/build/win32/import-chrome.vcxproj.filters @@ -176,12 +176,6 @@ common - - common - - - common - common diff --git a/manual/tracy.tex b/manual/tracy.tex index 153dfe0e..91b91fe0 100644 --- a/manual/tracy.tex +++ b/manual/tracy.tex @@ -2731,7 +2731,6 @@ The following libraries are included with and used by the Tracy Profiler. Entrie \item zlib license \begin{itemize} -\item benaphore \faStar{} -- \url{https://github.com/preshing/cpp11-on-multicore} \item Native File Dialog -- \url{https://github.com/mlabbe/nativefiledialog} \item GLFW -- \url{https://github.com/glfw/glfw} \item IconFontCppHeaders -- \url{https://github.com/juliettef/IconFontCppHeaders} diff --git a/profiler/build/win32/Tracy.vcxproj b/profiler/build/win32/Tracy.vcxproj index 6ac65ca7..7471c987 100644 --- a/profiler/build/win32/Tracy.vcxproj +++ b/profiler/build/win32/Tracy.vcxproj @@ -169,10 +169,8 @@ - - diff --git a/profiler/build/win32/Tracy.vcxproj.filters b/profiler/build/win32/Tracy.vcxproj.filters index a58b9fe3..977fedcb 100644 --- a/profiler/build/win32/Tracy.vcxproj.filters +++ b/profiler/build/win32/Tracy.vcxproj.filters @@ -326,12 +326,6 @@ src - - common - - - common - imgui diff --git a/update/build/win32/update.vcxproj b/update/build/win32/update.vcxproj index dc3ac397..ddb2202f 100644 --- a/update/build/win32/update.vcxproj +++ b/update/build/win32/update.vcxproj @@ -176,10 +176,8 @@ - - diff --git a/update/build/win32/update.vcxproj.filters b/update/build/win32/update.vcxproj.filters index 7d304e99..95dbfec5 100644 --- a/update/build/win32/update.vcxproj.filters +++ b/update/build/win32/update.vcxproj.filters @@ -179,12 +179,6 @@ common - - common - - - common - common