Show execution time of tests
Modified: trunk/reactos/regtests/regtests/regtests.c Modified: trunk/reactos/regtests/regtests/regtests.def Modified: trunk/reactos/regtests/shared/regtests.c Modified: trunk/reactos/regtests/shared/regtests.h Modified: trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp Modified: trunk/reactos/tools/rbuild/testsupportcode.cpp
--- trunk/reactos/regtests/regtests/regtests.c 2005-06-12 14:09:39 UTC (rev 15875) +++ trunk/reactos/regtests/regtests/regtests.c 2005-06-12 15:33:34 UTC (rev 15876) @@ -54,3 +54,35 @@
return WaitForSingleObject(hHandle, dwMilliseconds); }
+DWORD STDCALL
+_GetLastError()
+{
+ return GetLastError();
+}
+
+VOID STDCALL
+_CloseHandle(HANDLE handle)
+{
+ CloseHandle (handle);
+}
+
+BOOL STDCALL
+_GetThreadTimes(HANDLE hThread, LPFILETIME lpCreationTime,
+ LPFILETIME lpExitTime, LPFILETIME lpKernelTime,
+ LPFILETIME lpUserTime)
+{
+ return GetThreadTimes(hThread, lpCreationTime, lpExitTime,
+ lpKernelTime, lpUserTime);
+}
+
+BOOL STDCALL
+_SetPriorityClass(HANDLE hProcess, DWORD dwPriorityClass)
+{
+ return SetPriorityClass(hProcess, dwPriorityClass);
+}
+
+BOOL STDCALL
+_SetThreadPriority(HANDLE hThread, int nPriority)
+{
+ return SetThreadPriority(hThread, nPriority);
+}
--- trunk/reactos/regtests/regtests/regtests.def 2005-06-12 14:09:39 UTC (rev 15875) +++ trunk/reactos/regtests/regtests/regtests.def 2005-06-12 15:33:34 UTC (rev 15876) @@ -7,3 +7,8 @@
_CreateThread@24 _TerminateThread@8 _WaitForSingleObject@8
+_GetLastError@0 +_CloseHandle@4 +_GetThreadTimes@20 +_SetPriorityClass@8 +_SetThreadPriority@8
--- trunk/reactos/regtests/shared/regtests.c 2005-06-12 14:09:39 UTC (rev 15875) +++ trunk/reactos/regtests/shared/regtests.c 2005-06-12 15:33:34 UTC (rev 15876) @@ -37,6 +37,17 @@
InitializeListHead(&AllTests); }
+char*
+FormatExecutionTime(char *buffer, LPFILETIME time)
+{
+ ULONG milliseconds = time->dwLowDateTime / 10000;
+
+ sprintf(buffer,
+ "%ldms",
+ milliseconds);
+ return buffer;
+}
+
DWORD WINAPI
PerformTest(PVOID _arg)
{
@@ -44,11 +55,18 @@
TestOutputRoutine OutputRoutine = Args->OutputRoutine; PROS_TEST Test = Args->Test; LPSTR TestName = Args->TestName;
+ HANDLE hThread; + FILETIME time; + FILETIME ExecutionTime;
char OutputBuffer[5000]; char Buffer[5000];
+ char Format[100];
+ hThread = GetCurrentThread(); + _SetThreadPriority(hThread, THREAD_PRIORITY_IDLE); +
memset(Buffer, 0, sizeof(Buffer));
-
+
_SEH_TRY {
_Result = TS_OK;
_Buffer = Buffer;
@@ -58,22 +76,30 @@
sprintf(Buffer, "due to exception 0x%lx", _SEH_GetExceptionCode()); } _SEH_END;
- if (_Result != TS_OK)
+ if (_Result == TS_OK)
{
- sprintf(OutputBuffer, "[%s] Failed (%s)\n", TestName, Buffer);
+ if (!_GetThreadTimes(hThread,
+ &time,
+ &time,
+ &time,
+ &ExecutionTime))
+ {
+ ExecutionTime.dwLowDateTime = 10;
+ ExecutionTime.dwHighDateTime = 10;
+ }
+ sprintf(OutputBuffer,
+ "[%s] Success [%s]\n",
+ TestName,
+ FormatExecutionTime(Format,
+ &ExecutionTime));
} else
- {
- sprintf(OutputBuffer, "[%s] Success\n", TestName);
- }
+ sprintf(OutputBuffer, "[%s] Failed (%s)\n", TestName, Buffer);
+
if (OutputRoutine != NULL)
- {
(*OutputRoutine)(OutputBuffer);
- }
else
- {
DbgPrint(OutputBuffer);
- }
return 1; } @@ -108,19 +134,12 @@
if (_Result != TS_OK)
{
if (TestName != NULL)
- {
- continue;
- }
+ continue;
strcpy(Name, "Unnamed"); }
- if (TestName != NULL)
- {
- if (_stricmp(Name, TestName) != 0)
- {
- continue;
- }
- }
+ if ((TestName != NULL) && (_stricmp(Name, TestName) != 0))
+ continue;
/* Get timeout for test */ TimeOut = 0; @@ -128,44 +147,34 @@
_Buffer = (char *)&TimeOut; (Current->Routine)(TESTCMD_TIMEOUT); if (_Result != TS_OK || TimeOut == INFINITE)
- {
TimeOut = 5000;
- }
/* Run test in thread */ hThread = _CreateThread(NULL, 0, PerformTest, (PVOID)&Args, 0, NULL); if (hThread == NULL)
- {
sprintf(OutputBuffer,
- "[%s] Failed (CreateThread failed: 0x%x)\n",
- Name, (unsigned int)GetLastError());
- }
+ "[%s] Failed (CreateThread() failed: %d)\n",
+ Name, (unsigned int)_GetLastError());
else if (_WaitForSingleObject(hThread, TimeOut) == WAIT_TIMEOUT)
{
if (!_TerminateThread(hThread, 0))
- {
sprintf(OutputBuffer,
- "[%s] Failed (Test timed out - %d ms, TerminateThread failed: 0x%x)\n",
- Name, (int)TimeOut, (unsigned int)GetLastError());
- }
+ "[%s] Failed (timed out after %dms; TerminateThread() failed: %d)\n",
+ Name, (int)TimeOut, (unsigned int)_GetLastError());
else
- {
- sprintf(OutputBuffer, "[%s] Failed (Test timed out - %d ms)\n", Name, (int)TimeOut);
- }
+ sprintf(OutputBuffer, "[%s] Failed (timed out after %dms)\n", Name, (int)TimeOut);
+ _CloseHandle(hThread);
}
else
{
+ _CloseHandle(hThread);
continue; } if (OutputRoutine != NULL)
- {
(*OutputRoutine)(OutputBuffer);
- }
else
- {
DbgPrint(OutputBuffer);
- }
} }
--- trunk/reactos/regtests/shared/regtests.h 2005-06-12 14:09:39 UTC (rev 15875) +++ trunk/reactos/regtests/shared/regtests.h 2005-06-12 15:33:34 UTC (rev 15876) @@ -188,7 +188,24 @@
DWORD STDCALL _WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds);
+DWORD STDCALL +_GetLastError();
+VOID STDCALL +_CloseHandle(HANDLE handle); + +BOOL STDCALL +_GetThreadTimes(HANDLE hThread, LPFILETIME lpCreationTime, + LPFILETIME lpExitTime, LPFILETIME lpKernelTime, + LPFILETIME lpUserTime); + +BOOL STDCALL +_SetPriorityClass(HANDLE hProcess, DWORD dwPriorityClass); + +BOOL STDCALL +_SetThreadPriority(HANDLE hThread, int nPriority); + +
static inline PCHAR
FrameworkGetExportedFunctionNameInternal(PAPI_DESCRIPTION ApiDescription)
{
--- trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp 2005-06-12 14:09:39 UTC (rev 15875) +++ trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp 2005-06-12 15:33:34 UTC (rev 15876) @@ -608,7 +608,7 @@
fprintf ( fMakefile, "REGTESTS_RUN_TARGET = regtests.dll\n" ); fprintf ( fMakefile,
- "$(REGTESTS_RUN_TARGET):\n" );
+ "$(REGTESTS_RUN_TARGET): $(REGTESTS_TARGET)\n" );
fprintf ( fMakefile, "\t$(cp) $(REGTESTS_TARGET) $(REGTESTS_RUN_TARGET)\n" ); fprintf ( fMakefile, "\n" );
--- trunk/reactos/tools/rbuild/testsupportcode.cpp 2005-06-12 14:09:39 UTC (rev 15875) +++ trunk/reactos/tools/rbuild/testsupportcode.cpp 2005-06-12 15:33:34 UTC (rev 15876) @@ -333,6 +333,7 @@
s = s + sprintf ( s, " LPSTR lpszCmdParam,\n" );
s = s + sprintf ( s, " int nCmdShow)\n" );
s = s + sprintf ( s, "{\n" );
+ s = s + sprintf ( s, " _SetPriorityClass(GetCurrentProcess(), IDLE_PRIORITY_CLASS);\n" );
s = s + sprintf ( s, " InitializeTests();\n" ); s = s + sprintf ( s, " RegisterTests();\n" ); s = s + sprintf ( s, " SetupOnce();\n" );