1
0
mirror of https://github.com/wolfpld/tracy.git synced 2025-03-20 07:40:02 +08:00
tracy/public/client/TracyAwaitable.hpp
2023-08-03 23:17:13 +03:00

38 lines
868 B
C++

#pragma once
#include "TracyAsyncEvents.hpp"
#include <type_traits>
namespace tracy
{
template<class BaseAwaitableType>
class Awaitable : public BaseAwaitableType
{
public:
Awaitable(BaseAwaitableType baseAwaitable);
~Awaitable();
private:
AsyncScopedZone* m_pCurrentZone = nullptr;
};
template<class BaseAwaitableType>
Awaitable<BaseAwaitableType>::Awaitable(BaseAwaitableType baseAwaitable)
: BaseAwaitableType(std::move(baseAwaitable))
{
if (g_pCurrentZone)
{
m_pCurrentZone = g_pCurrentZone;
StopAsyncEvent(g_pCurrentZone);
}
}
template <class BaseAwaitableType>
Awaitable<BaseAwaitableType>::~Awaitable()
{
if (m_pCurrentZone)
StartAsyncEvent(m_pCurrentZone);
}
}