mirror of
https://github.com/wolfpld/tracy.git
synced 2024-11-10 10:41:50 +00:00
Remove more debug code.
This commit is contained in:
parent
e9a0145cd5
commit
a03734afa6
@ -39,29 +39,14 @@
|
|||||||
// upon assigning any computed values)
|
// upon assigning any computed values)
|
||||||
#pragma GCC diagnostic push
|
#pragma GCC diagnostic push
|
||||||
#pragma GCC diagnostic ignored "-Wconversion"
|
#pragma GCC diagnostic ignored "-Wconversion"
|
||||||
|
|
||||||
#ifdef MCDBGQ_USE_RELACY
|
|
||||||
#pragma GCC diagnostic ignored "-Wint-to-pointer-cast"
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__APPLE__)
|
#if defined(__APPLE__)
|
||||||
#include "TargetConditionals.h"
|
#include "TargetConditionals.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MCDBGQ_USE_RELACY
|
|
||||||
#include "relacy/relacy_std.hpp"
|
|
||||||
#include "relacy_shims.h"
|
|
||||||
// We only use malloc/free anyway, and the delete macro messes up `= delete` method declarations.
|
|
||||||
// We'll override the default trait malloc ourselves without a macro.
|
|
||||||
#undef new
|
|
||||||
#undef delete
|
|
||||||
#undef malloc
|
|
||||||
#undef free
|
|
||||||
#else
|
|
||||||
#include <atomic> // Requires C++11. Sorry VS2010.
|
#include <atomic> // Requires C++11. Sorry VS2010.
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#endif
|
|
||||||
#include <cstddef> // for max_align_t
|
#include <cstddef> // for max_align_t
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
@ -84,14 +69,7 @@ namespace moodycamel { namespace details {
|
|||||||
static thread_id_hash_t prehash(thread_id_t const& x) { return x; }
|
static thread_id_hash_t prehash(thread_id_t const& x) { return x; }
|
||||||
};
|
};
|
||||||
} }
|
} }
|
||||||
#if defined(MCDBGQ_USE_RELACY)
|
#if defined(_WIN32) || defined(__WINDOWS__) || defined(__WIN32__)
|
||||||
namespace moodycamel { namespace details {
|
|
||||||
typedef std::uint32_t thread_id_t;
|
|
||||||
static const thread_id_t invalid_thread_id = 0xFFFFFFFFU;
|
|
||||||
static const thread_id_t invalid_thread_id2 = 0xFFFFFFFEU;
|
|
||||||
static inline thread_id_t thread_id() { return rl::thread_index(); }
|
|
||||||
} }
|
|
||||||
#elif defined(_WIN32) || defined(__WINDOWS__) || defined(__WIN32__)
|
|
||||||
// No sense pulling in windows.h in a header, we'll manually declare the function
|
// No sense pulling in windows.h in a header, we'll manually declare the function
|
||||||
// we use and rely on backwards-compatibility for this not to break
|
// we use and rely on backwards-compatibility for this not to break
|
||||||
extern "C" __declspec(dllimport) unsigned long __stdcall GetCurrentThreadId(void);
|
extern "C" __declspec(dllimport) unsigned long __stdcall GetCurrentThreadId(void);
|
||||||
@ -197,9 +175,6 @@ namespace moodycamel { namespace details {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef MOODYCAMEL_CPP11_THREAD_LOCAL_SUPPORTED
|
#ifndef MOODYCAMEL_CPP11_THREAD_LOCAL_SUPPORTED
|
||||||
#ifdef MCDBGQ_USE_RELACY
|
|
||||||
#define MOODYCAMEL_CPP11_THREAD_LOCAL_SUPPORTED
|
|
||||||
#else
|
|
||||||
// VS2013 doesn't support `thread_local`, and MinGW-w64 w/ POSIX threading has a crippling bug: http://sourceforge.net/p/mingw-w64/bugs/445
|
// VS2013 doesn't support `thread_local`, and MinGW-w64 w/ POSIX threading has a crippling bug: http://sourceforge.net/p/mingw-w64/bugs/445
|
||||||
// g++ <=4.7 doesn't support thread_local either.
|
// g++ <=4.7 doesn't support thread_local either.
|
||||||
// Finally, iOS/ARM doesn't have support for it either, and g++/ARM allows it to compile but it's unconfirmed to actually work
|
// Finally, iOS/ARM doesn't have support for it either, and g++/ARM allows it to compile but it's unconfirmed to actually work
|
||||||
@ -208,7 +183,6 @@ namespace moodycamel { namespace details {
|
|||||||
//#define MOODYCAMEL_CPP11_THREAD_LOCAL_SUPPORTED // always disabled for now since several users report having problems with it on
|
//#define MOODYCAMEL_CPP11_THREAD_LOCAL_SUPPORTED // always disabled for now since several users report having problems with it on
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
// VS2012 doesn't support deleted functions.
|
// VS2012 doesn't support deleted functions.
|
||||||
// In this case, we declare the function normally but don't define it. A link error will be generated if the function is called.
|
// In this case, we declare the function normally but don't define it. A link error will be generated if the function is called.
|
||||||
@ -336,7 +310,6 @@ struct ConcurrentQueueDefaultTraits
|
|||||||
static const size_t MAX_SUBQUEUE_SIZE = details::const_numeric_max<size_t>::value;
|
static const size_t MAX_SUBQUEUE_SIZE = details::const_numeric_max<size_t>::value;
|
||||||
|
|
||||||
|
|
||||||
#ifndef MCDBGQ_USE_RELACY
|
|
||||||
// Memory allocation can be customized if needed.
|
// Memory allocation can be customized if needed.
|
||||||
// malloc should return nullptr on failure, and handle alignment like std::malloc.
|
// malloc should return nullptr on failure, and handle alignment like std::malloc.
|
||||||
#if defined(malloc) || defined(free)
|
#if defined(malloc) || defined(free)
|
||||||
@ -350,12 +323,6 @@ struct ConcurrentQueueDefaultTraits
|
|||||||
static inline void* malloc(size_t size) { return tracy::tracy_malloc(size); }
|
static inline void* malloc(size_t size) { return tracy::tracy_malloc(size); }
|
||||||
static inline void free(void* ptr) { return tracy::tracy_free(ptr); }
|
static inline void free(void* ptr) { return tracy::tracy_free(ptr); }
|
||||||
#endif
|
#endif
|
||||||
#else
|
|
||||||
// Debug versions when running under the Relacy race detector (ignore
|
|
||||||
// these in user code)
|
|
||||||
static inline void* malloc(size_t size) { return rl::rl_malloc(size, $); }
|
|
||||||
static inline void free(void* ptr) { return rl::rl_free(ptr, $); }
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -507,10 +474,6 @@ namespace details
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MOODYCAMEL_CPP11_THREAD_LOCAL_SUPPORTED
|
#ifdef MOODYCAMEL_CPP11_THREAD_LOCAL_SUPPORTED
|
||||||
#ifdef MCDBGQ_USE_RELACY
|
|
||||||
typedef RelacyThreadExitListener ThreadExitListener;
|
|
||||||
typedef RelacyThreadExitNotifier ThreadExitNotifier;
|
|
||||||
#else
|
|
||||||
struct ThreadExitListener
|
struct ThreadExitListener
|
||||||
{
|
{
|
||||||
typedef void (*callback_t)(void*);
|
typedef void (*callback_t)(void*);
|
||||||
@ -568,7 +531,6 @@ namespace details
|
|||||||
private:
|
private:
|
||||||
ThreadExitListener* tail;
|
ThreadExitListener* tail;
|
||||||
};
|
};
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
template<typename T> struct static_is_lock_free_num { enum { value = 0 }; };
|
template<typename T> struct static_is_lock_free_num { enum { value = 0 }; };
|
||||||
@ -1378,9 +1340,6 @@ private:
|
|||||||
|
|
||||||
inline void add(N* node)
|
inline void add(N* node)
|
||||||
{
|
{
|
||||||
#if MCDBGQ_NOLOCKFREE_FREELIST
|
|
||||||
debug::DebugLock lock(mutex);
|
|
||||||
#endif
|
|
||||||
// We know that the should-be-on-freelist bit is 0 at this point, so it's safe to
|
// We know that the should-be-on-freelist bit is 0 at this point, so it's safe to
|
||||||
// set it using a fetch_add
|
// set it using a fetch_add
|
||||||
if (node->freeListRefs.fetch_add(SHOULD_BE_ON_FREELIST, std::memory_order_acq_rel) == 0) {
|
if (node->freeListRefs.fetch_add(SHOULD_BE_ON_FREELIST, std::memory_order_acq_rel) == 0) {
|
||||||
@ -1392,9 +1351,6 @@ private:
|
|||||||
|
|
||||||
inline N* try_get()
|
inline N* try_get()
|
||||||
{
|
{
|
||||||
#if MCDBGQ_NOLOCKFREE_FREELIST
|
|
||||||
debug::DebugLock lock(mutex);
|
|
||||||
#endif
|
|
||||||
auto head = freeListHead.load(std::memory_order_acquire);
|
auto head = freeListHead.load(std::memory_order_acquire);
|
||||||
while (head != nullptr) {
|
while (head != nullptr) {
|
||||||
auto prevHead = head;
|
auto prevHead = head;
|
||||||
@ -1463,10 +1419,6 @@ private:
|
|||||||
|
|
||||||
static const std::uint32_t REFS_MASK = 0x7FFFFFFF;
|
static const std::uint32_t REFS_MASK = 0x7FFFFFFF;
|
||||||
static const std::uint32_t SHOULD_BE_ON_FREELIST = 0x80000000;
|
static const std::uint32_t SHOULD_BE_ON_FREELIST = 0x80000000;
|
||||||
|
|
||||||
#if MCDBGQ_NOLOCKFREE_FREELIST
|
|
||||||
debug::DebugMutex mutex;
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -2988,9 +2940,6 @@ private:
|
|||||||
|
|
||||||
ProducerBase* recycle_or_create_producer(bool isExplicit, bool& recycled)
|
ProducerBase* recycle_or_create_producer(bool isExplicit, bool& recycled)
|
||||||
{
|
{
|
||||||
#if MCDBGQ_NOLOCKFREE_IMPLICITPRODHASH
|
|
||||||
debug::DebugLock lock(implicitProdMutex);
|
|
||||||
#endif
|
|
||||||
// Try to re-use one first
|
// Try to re-use one first
|
||||||
for (auto ptr = producerListTail.load(std::memory_order_acquire); ptr != nullptr; ptr = ptr->next_prod()) {
|
for (auto ptr = producerListTail.load(std::memory_order_acquire); ptr != nullptr; ptr = ptr->next_prod()) {
|
||||||
if (ptr->inactive.load(std::memory_order_relaxed) && ptr->isExplicit == isExplicit) {
|
if (ptr->inactive.load(std::memory_order_relaxed) && ptr->isExplicit == isExplicit) {
|
||||||
@ -3140,10 +3089,6 @@ private:
|
|||||||
|
|
||||||
// Code and algorithm adapted from http://preshing.com/20130605/the-worlds-simplest-lock-free-hash-table
|
// Code and algorithm adapted from http://preshing.com/20130605/the-worlds-simplest-lock-free-hash-table
|
||||||
|
|
||||||
#if MCDBGQ_NOLOCKFREE_IMPLICITPRODHASH
|
|
||||||
debug::DebugLock lock(implicitProdMutex);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
auto id = details::thread_id();
|
auto id = details::thread_id();
|
||||||
auto hashedId = details::hash_thread_id(id);
|
auto hashedId = details::hash_thread_id(id);
|
||||||
|
|
||||||
@ -3285,9 +3230,6 @@ private:
|
|||||||
details::ThreadExitNotifier::unsubscribe(&producer->threadExitListener);
|
details::ThreadExitNotifier::unsubscribe(&producer->threadExitListener);
|
||||||
|
|
||||||
// Remove from hash
|
// Remove from hash
|
||||||
#if MCDBGQ_NOLOCKFREE_IMPLICITPRODHASH
|
|
||||||
debug::DebugLock lock(implicitProdMutex);
|
|
||||||
#endif
|
|
||||||
auto hash = implicitProducerHash.load(std::memory_order_acquire);
|
auto hash = implicitProducerHash.load(std::memory_order_acquire);
|
||||||
assert(hash != nullptr); // The thread exit listener is only registered if we were added to a hash in the first place
|
assert(hash != nullptr); // The thread exit listener is only registered if we were added to a hash in the first place
|
||||||
auto id = details::thread_id();
|
auto id = details::thread_id();
|
||||||
@ -3373,11 +3315,7 @@ private:
|
|||||||
Block* initialBlockPool;
|
Block* initialBlockPool;
|
||||||
size_t initialBlockPoolSize;
|
size_t initialBlockPoolSize;
|
||||||
|
|
||||||
#if !MCDBGQ_USEDEBUGFREELIST
|
|
||||||
FreeList<Block> freeList;
|
FreeList<Block> freeList;
|
||||||
#else
|
|
||||||
debug::DebugFreeList<Block> freeList;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
std::atomic<ImplicitProducerHash*> implicitProducerHash;
|
std::atomic<ImplicitProducerHash*> implicitProducerHash;
|
||||||
std::atomic<size_t> implicitProducerHashCount; // Number of slots logically used
|
std::atomic<size_t> implicitProducerHashCount; // Number of slots logically used
|
||||||
@ -3387,10 +3325,6 @@ private:
|
|||||||
|
|
||||||
std::atomic<std::uint32_t> nextExplicitConsumerId;
|
std::atomic<std::uint32_t> nextExplicitConsumerId;
|
||||||
std::atomic<std::uint32_t> globalExplicitConsumerOffset;
|
std::atomic<std::uint32_t> globalExplicitConsumerOffset;
|
||||||
|
|
||||||
#if MCDBGQ_NOLOCKFREE_IMPLICITPRODHASH
|
|
||||||
debug::DebugMutex implicitProdMutex;
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user