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" );