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 _____
Modified: trunk/reactos/regtests/regtests/regtests.c --- 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); +} _____
Modified: trunk/reactos/regtests/regtests/regtests.def --- 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 _____
Modified: trunk/reactos/regtests/shared/regtests.c --- 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); - } } }
_____
Modified: trunk/reactos/regtests/shared/regtests.h --- 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) { _____
Modified: trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp --- 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" ); _____
Modified: trunk/reactos/tools/rbuild/testsupportcode.cpp --- 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" );