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