[*] Improve regressed AuWoA time to wake
This commit is contained in:
parent
9805a57647
commit
5b19341186
@ -67,14 +67,6 @@
|
|||||||
#define AUKN_INTERFACE_EXT AUI_INTERFACE_EXT_FWD
|
#define AUKN_INTERFACE_EXT AUI_INTERFACE_EXT_FWD
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(AURORA_COMPILER_MSVC) && !defined(MemoryBarrier)
|
|
||||||
#define AURORA_COMPILER_VOLATILE_BARRIER() __faststorefence()
|
|
||||||
#elif defined(MemoryBarrier)
|
|
||||||
#define AURORA_COMPILER_VOLATILE_BARRIER() MemoryBarrier()
|
|
||||||
#else
|
|
||||||
#define AURORA_COMPILER_VOLATILE_BARRIER() asm volatile ("" : : : "memory")
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "Memory/Memory.hpp"
|
#include "Memory/Memory.hpp"
|
||||||
|
|
||||||
#include "Utility/PrivData.hpp"
|
#include "Utility/PrivData.hpp"
|
||||||
|
@ -261,7 +261,15 @@ namespace Aurora::Threading
|
|||||||
template <EWaitMethod eMethod, bool bFast>
|
template <EWaitMethod eMethod, bool bFast>
|
||||||
bool WaitBuffer::Compare2(const void *pHot, AuUInt8 uSize, const void *pBuf2, AuUInt64 uMask)
|
bool WaitBuffer::Compare2(const void *pHot, AuUInt8 uSize, const void *pBuf2, AuUInt64 uMask)
|
||||||
{
|
{
|
||||||
|
return Compare2<eMethod, bFast>((const volatile void *)pHot, uSize, pBuf2, uMask);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <EWaitMethod eMethod, bool bFast>
|
||||||
|
bool WaitBuffer::Compare2(const volatile void *pHot, AuUInt8 uSize, const void *pBuf2, AuUInt64 uMask)
|
||||||
|
{
|
||||||
|
#if !defined(AURORA_COMPILER_CLANG) && !defined(AURORA_COMPILER_MSVC)
|
||||||
AURORA_COMPILER_VOLATILE_BARRIER();
|
AURORA_COMPILER_VOLATILE_BARRIER();
|
||||||
|
#endif
|
||||||
|
|
||||||
if constexpr (!bFast)
|
if constexpr (!bFast)
|
||||||
{
|
{
|
||||||
@ -279,7 +287,7 @@ namespace Aurora::Threading
|
|||||||
case 8:
|
case 8:
|
||||||
return (AuReadU64(pHot, 0) & uMask) == (AuReadU64(pBuf2, 0) & uMask);
|
return (AuReadU64(pHot, 0) & uMask) == (AuReadU64(pBuf2, 0) & uMask);
|
||||||
default:
|
default:
|
||||||
return (AuMemcmp(pHot, pBuf2, uSize) == 0);
|
return (AuMemcmp((const void *)pHot, pBuf2, uSize) == 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -296,7 +304,7 @@ namespace Aurora::Threading
|
|||||||
case 8:
|
case 8:
|
||||||
return !((AuReadU64(pHot, 0) & uMask) == (AuReadU64(pBuf2, 0) & uMask));
|
return !((AuReadU64(pHot, 0) & uMask) == (AuReadU64(pBuf2, 0) & uMask));
|
||||||
default:
|
default:
|
||||||
return !(AuMemcmp(pHot, pBuf2, uSize) == 0);
|
return !(AuMemcmp((const void *)pHot, pBuf2, uSize) == 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -385,7 +393,7 @@ namespace Aurora::Threading
|
|||||||
case 8:
|
case 8:
|
||||||
return (AuReadU64(pHot, 0)) == (AuReadU64(pBuf2, 0));
|
return (AuReadU64(pHot, 0)) == (AuReadU64(pBuf2, 0));
|
||||||
default:
|
default:
|
||||||
return (AuMemcmp(pHot, pBuf2, uSize) == 0);
|
return (AuMemcmp((const void *)pHot, pBuf2, uSize) == 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -402,7 +410,7 @@ namespace Aurora::Threading
|
|||||||
case 8:
|
case 8:
|
||||||
return !((AuReadU64(pHot, 0)) == (AuReadU64(pBuf2, 0)));
|
return !((AuReadU64(pHot, 0)) == (AuReadU64(pBuf2, 0)));
|
||||||
default:
|
default:
|
||||||
return !(AuMemcmp(pHot, pBuf2, uSize) == 0);
|
return !(AuMemcmp((const void *)pHot, pBuf2, uSize) == 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -600,14 +608,14 @@ namespace Aurora::Threading
|
|||||||
this->waitList.pTail = pEntry->pBefore;
|
this->waitList.pTail = pEntry->pBefore;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pEntry->pBefore)
|
if (auto pBefore = pEntry->pBefore)
|
||||||
{
|
{
|
||||||
pEntry->pBefore->pNext = pEntry->pNext;
|
pBefore->pNext = pEntry->pNext;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pEntry->pNext)
|
if (auto pNext = pEntry->pNext)
|
||||||
{
|
{
|
||||||
pEntry->pNext->pBefore = pEntry->pBefore;
|
pNext->pBefore = pEntry->pBefore;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bAllUnderLock)
|
if (bAllUnderLock)
|
||||||
|
@ -42,6 +42,9 @@ namespace Aurora::Threading
|
|||||||
// returns false when valid
|
// returns false when valid
|
||||||
template <EWaitMethod eMethod, bool bFast = false>
|
template <EWaitMethod eMethod, bool bFast = false>
|
||||||
WOAFAST static bool Compare2(const void *pHotAddress, AuUInt8 uSize, const void *pReference, AuUInt64 uMask = 0xFFFFFFFFFFFFFFFF);
|
WOAFAST static bool Compare2(const void *pHotAddress, AuUInt8 uSize, const void *pReference, AuUInt64 uMask = 0xFFFFFFFFFFFFFFFF);
|
||||||
|
|
||||||
|
template <EWaitMethod eMethod, bool bFast = false>
|
||||||
|
WOAFAST static bool Compare2(const volatile void *pHotAddress, AuUInt8 uSize, const void *pReference, AuUInt64 uMask = 0xFFFFFFFFFFFFFFFF);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct WaitState
|
struct WaitState
|
||||||
@ -60,8 +63,8 @@ namespace Aurora::Threading
|
|||||||
WaitEntry();
|
WaitEntry();
|
||||||
~WaitEntry();
|
~WaitEntry();
|
||||||
|
|
||||||
WaitEntry *pNext {};
|
WaitEntry * volatile pNext {};
|
||||||
WaitEntry *pBefore {};
|
WaitEntry * volatile pBefore {};
|
||||||
|
|
||||||
// synch
|
// synch
|
||||||
#if defined(WOA_SEMAPHORE_MODE)
|
#if defined(WOA_SEMAPHORE_MODE)
|
||||||
|
Loading…
Reference in New Issue
Block a user