2017-09-22 17:32:49 +00:00
|
|
|
#include <chrono>
|
2017-10-03 23:39:43 +00:00
|
|
|
#include <mutex>
|
2017-09-22 17:32:49 +00:00
|
|
|
#include <thread>
|
|
|
|
#include "../client/Tracy.hpp"
|
|
|
|
#include "../common/TracySystem.hpp"
|
|
|
|
|
|
|
|
void TestFunction()
|
|
|
|
{
|
|
|
|
for(;;)
|
|
|
|
{
|
|
|
|
std::this_thread::sleep_for( std::chrono::milliseconds( 1 ) );
|
|
|
|
ZoneScoped;
|
|
|
|
std::this_thread::sleep_for( std::chrono::milliseconds( 1 ) );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void ResolutionCheck()
|
|
|
|
{
|
|
|
|
for(;;)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
ZoneScoped;
|
|
|
|
std::this_thread::sleep_for( std::chrono::milliseconds( 1 ) );
|
|
|
|
}
|
|
|
|
{
|
|
|
|
ZoneScoped;
|
|
|
|
std::this_thread::sleep_for( std::chrono::milliseconds( 1 ) );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2017-09-23 19:37:14 +00:00
|
|
|
void ScopeCheck()
|
|
|
|
{
|
|
|
|
for(;;)
|
|
|
|
{
|
|
|
|
std::this_thread::sleep_for( std::chrono::milliseconds( 1 ) );
|
|
|
|
ZoneScoped;
|
|
|
|
}
|
|
|
|
}
|
2017-09-22 17:32:49 +00:00
|
|
|
|
2017-10-04 13:41:23 +00:00
|
|
|
static TracyLockable( std::mutex, mutex );
|
2017-10-03 23:39:43 +00:00
|
|
|
|
|
|
|
void Lock1()
|
|
|
|
{
|
|
|
|
for(;;)
|
|
|
|
{
|
|
|
|
std::this_thread::sleep_for( std::chrono::milliseconds( 4 ) );
|
2017-10-04 13:41:23 +00:00
|
|
|
std::lock_guard<LockableBase( std::mutex )> lock( mutex );
|
2017-10-06 16:15:00 +00:00
|
|
|
LockMark( mutex );
|
2017-10-03 23:39:43 +00:00
|
|
|
ZoneScoped;
|
|
|
|
std::this_thread::sleep_for( std::chrono::milliseconds( 4 ) );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Lock2()
|
|
|
|
{
|
|
|
|
for(;;)
|
|
|
|
{
|
|
|
|
std::this_thread::sleep_for( std::chrono::milliseconds( 3 ) );
|
2017-10-04 13:41:23 +00:00
|
|
|
std::unique_lock<LockableBase( std::mutex )> lock( mutex );
|
2017-10-06 16:15:00 +00:00
|
|
|
LockMark( mutex );
|
2017-10-03 23:39:43 +00:00
|
|
|
ZoneScoped;
|
|
|
|
std::this_thread::sleep_for( std::chrono::milliseconds( 5 ) );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-10-08 19:01:49 +00:00
|
|
|
void Lock3()
|
|
|
|
{
|
|
|
|
for(;;)
|
|
|
|
{
|
|
|
|
std::this_thread::sleep_for( std::chrono::milliseconds( 1 ) );
|
|
|
|
std::unique_lock<LockableBase( std::mutex )> lock( mutex );
|
|
|
|
LockMark( mutex );
|
|
|
|
ZoneScoped;
|
|
|
|
std::this_thread::sleep_for( std::chrono::milliseconds( 1 ) );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-09-22 17:32:49 +00:00
|
|
|
int main()
|
|
|
|
{
|
|
|
|
auto t1 = std::thread( TestFunction );
|
|
|
|
auto t2 = std::thread( TestFunction );
|
|
|
|
auto t3 = std::thread( ResolutionCheck );
|
2017-09-23 19:37:14 +00:00
|
|
|
auto t4 = std::thread( ScopeCheck );
|
2017-10-03 23:39:43 +00:00
|
|
|
auto t5 = std::thread( Lock1 );
|
|
|
|
auto t6 = std::thread( Lock2 );
|
2017-10-08 19:01:49 +00:00
|
|
|
auto t7 = std::thread( Lock3 );
|
2017-09-22 17:32:49 +00:00
|
|
|
|
|
|
|
tracy::SetThreadName( t1, "First thread" );
|
|
|
|
tracy::SetThreadName( t2, "Second thread" );
|
|
|
|
tracy::SetThreadName( t3, "Resolution check" );
|
2017-09-23 19:37:14 +00:00
|
|
|
tracy::SetThreadName( t4, "Scope check" );
|
2017-10-03 23:39:43 +00:00
|
|
|
tracy::SetThreadName( t5, "Lock 1" );
|
|
|
|
tracy::SetThreadName( t6, "Lock 2" );
|
2017-10-08 19:01:49 +00:00
|
|
|
tracy::SetThreadName( t7, "Lock 3" );
|
2017-09-22 17:32:49 +00:00
|
|
|
|
|
|
|
for(;;)
|
|
|
|
{
|
|
|
|
std::this_thread::sleep_for( std::chrono::milliseconds( 2 ) );
|
|
|
|
{
|
|
|
|
ZoneScoped;
|
|
|
|
std::this_thread::sleep_for( std::chrono::milliseconds( 2 ) );
|
|
|
|
}
|
|
|
|
FrameMark;
|
|
|
|
}
|
|
|
|
}
|