diff options
Diffstat (limited to 'public/tier0/testthread.h')
| -rw-r--r-- | public/tier0/testthread.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/public/tier0/testthread.h b/public/tier0/testthread.h new file mode 100644 index 0000000..6ffda65 --- /dev/null +++ b/public/tier0/testthread.h @@ -0,0 +1,60 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: exposes testing thread functions +// +//============================================================================= + +#ifndef TESTTHREAD_H +#define TESTTHREAD_H +#ifdef _WIN32 +#pragma once +#endif + +#include "tier0/dbg.h" + +// test callback +typedef void (STDCALL *TestFunc)(void *pv); + +// runs the test function +DBG_INTERFACE void Test_RunTest(TestFunc func, void *pvArg); + +// call to give the test thread a chance to run +// calling thread will block until the test thread yields +// doesn't do anything if no tests are running +DBG_INTERFACE void Test_RunFrame(); + +// true if any tests are running, or have ran +DBG_INTERFACE bool Test_IsActive(); + +// sets that the test has failed +DBG_INTERFACE void Test_SetFailed(); + +// true if any tests have failed, due to an assert, warning, or explicit fail +DBG_INTERFACE bool Test_HasFailed(); + +// true if any tests have completed +DBG_INTERFACE bool Test_HasFinished(); + +// terminates the test thread +DBG_INTERFACE void Test_TerminateThread(); + +// the following functions should only be called from the test thread + +// yields to the main thread for a single frame +// passing in is a count of the number of frames that have been yielded by this yield macro +// can be used to assert if a test thread is blocked foor +DBG_INTERFACE void TestThread_Yield(); + +// utility functions to pause the test frame until the selected condition is true +#define YIELD_UNTIL(x) { int iYieldCount = 0; while (!(x)) { TestThread_Yield(); iYieldCount++; if ( iYieldCount >= 100 ) { AssertMsg( false, #x ); break; } } } + +// use this like a while(1) loop, with break; to stop yielding +#define YIELD_UNTIL_BREAK() for (; true; TestThread_Yield()) + +// yields for a single frame +#define YIELD_FRAME() { TestThread_Yield(); } +#define YIELD_TWO_FRAMES() { TestThread_Yield(); TestThread_Yield(); } + + + +#endif // TESTTHREAD_H |