Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

474 lines
10 KiB

//+------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1993.
//
// File: bmoutput.cxx
//
// Contents: output class for benchmark results
//
// Classes: CTestOutput
//
// Functions:
//
// History: 30-June-93 t-martig Created
// 15-Aug-94 davidfie Make ASCII/Unicode for chicago
//
//--------------------------------------------------------------------------
#include <benchmrk.hxx>
#include <bmoutput.hxx>
//+-------------------------------------------------------------------
//
// Member: CTestOutput::CTestOutput, public
//
// Synopsis: Generates output file
//
// History: 30-June-93 t-martig Created
//
//--------------------------------------------------------------------
CTestOutput::CTestOutput (LPTSTR lpszFileName)
{
#ifdef UNICODE
char szFileName[80];
wcstombs (szFileName, lpszFileName, wcslen(lpszFileName)+1);
fpOut = fopen (szFileName, "wt");
#else
fpOut = fopen (lpszFileName, "wt");
#endif
}
//+-------------------------------------------------------------------
//
// Member: CTestOutput::~CTestOutput, public
//
// Synopsis: Closes output file
//
// History: 30-June-93 t-martig Created
//
//--------------------------------------------------------------------
CTestOutput::~CTestOutput ()
{
if (fpOut)
fclose (fpOut);
}
//+-------------------------------------------------------------------
//
// Member: CTestOutput::Flush, public
//
// Synopsis: flushes the buffers associated with the output file
//
// History: 30-June-93 t-martig Created
//
//--------------------------------------------------------------------
void CTestOutput::Flush(void)
{
fflush (fpOut);
}
//+-------------------------------------------------------------------
//
// Member: CTestOutput::WriteTextString, public
//
// Synopsis: Writes a TEXT format string to output file
//
// Parameters: [lpswzString] String to be printed
//
// History: 30-June-93 t-martig Created
//
//--------------------------------------------------------------------
void CTestOutput::WriteTextString (LPTSTR lpszString)
{
WriteString(lpszString);
}
//+-------------------------------------------------------------------
//
// Member: CTestOutput::WriteString, public
//
// Synopsis: Writes string to output file
//
// Parameters: [lpszString] String to be printed
//
// History: 30-June-93 t-martig Created
//
//--------------------------------------------------------------------
void CTestOutput::WriteString (LPTSTR lpszString)
{
#ifdef UNICODE
char *fmt = "%ws";
#else
char *fmt = "%s";
#endif
if (!fpOut)
return;
fprintf (fpOut, fmt, lpszString);
}
//+-------------------------------------------------------------------
//
// Member: CTestOutput::WriteLong, public
//
// Synopsis: Writes long to output file
//
// Parameters: [lpswzString] String to be printed
//
// History: 30-June-93 t-martig Created
//
//--------------------------------------------------------------------
void CTestOutput::WriteLong (ULONG l)
{
if (!fpOut)
return;
fprintf (fpOut, "%lu", l);
}
//+-------------------------------------------------------------------
//
// Member: CTestOutput::WriteConfigEntry, public
//
// Synopsis: Writes string from config file to output file
//
// Parameters: [input] Input class (config file)
// [lpszSection] Section name of entry to be printed
// [lpszEntry] Entry name to be printed
// [lpszDefault] Default string in case entry does
// not exist
//
// History: 30-June-93 t-martig Created
//
//--------------------------------------------------------------------
void CTestOutput::WriteConfigEntry (CTestInput &input, LPTSTR lpszSection,
LPTSTR lpszEntry, LPTSTR lpszDefault)
{
TCHAR destName[160];
if (!fpOut)
return;
input.GetConfigString (lpszSection, lpszEntry, lpszDefault,
destName, sizeof(destName)/sizeof(TCHAR));
WriteString (destName);
}
//+-------------------------------------------------------------------
//
// Member: CTestOutput::WriteSectionHeader, public
//
// Synopsis: Writes general test section header to output file
//
// Parameters: [lpszTestName] General test name (from
// [TestClass].Name(),like "OLE")
// [lpszSectionName] Specific test name (like
// "Object Bind Test")
// [input] .ini file class
//
// History: 30-June-93 t-martig Created
//
//--------------------------------------------------------------------
void CTestOutput::WriteSectionHeader (LPTSTR lpszTestName,
LPTSTR lpszSectionName, CTestInput &input)
{
if (!fpOut)
return;
if (!lpszSectionName)
lpszSectionName = TEXT("");
if (g_fFullInfo)
{
#ifdef UNICODE
char *fmt = "\n\n%ws - %ws\n\nComments:\t";
#else
char *fmt = "\n\n%s - %s\n\nComments:\t";
#endif
// we conditionally skip writing the comment to make it
// easier to format for excel.
fprintf (fpOut, fmt, lpszTestName, lpszSectionName);
WriteConfigEntry (input, lpszTestName, TEXT("comment"));
fprintf (fpOut, "\n");
}
else
{
#ifdef UNICODE
char *fmt = "\n\n%ws\n";
#else
char *fmt = "\n\n%s\n";
#endif
fprintf (fpOut, fmt, lpszSectionName);
}
}
//+-------------------------------------------------------------------
//
// Member: CTestOutput::WriteResult, public
//
// Synopsis: Writes test result line to output file, in the form
// "Create moniker <tab> 30800"
//
// Parameters: [lpszMeasurementName] Name of result (like
// "Create moniker"
// [ulTime] Measured time in microseconds
//
// History: 30-June-93 t-martig Created
//
//--------------------------------------------------------------------
void CTestOutput::WriteResult (LPTSTR lpszMeasurementName, ULONG ulTime)
{
if (fpOut)
{
WriteString (lpszMeasurementName);
fprintf (fpOut, "\t");
if (ulTime == NOTAVAIL)
{
fprintf (fpOut, "n/a\n");
}
else if (ulTime == TEST_FAILED)
{
fprintf (fpOut, "F\n");
}
else
{
fprintf (fpOut, "%lu\n", ulTime);
}
}
}
//+-------------------------------------------------------------------
//
// Member: CTestOutput::WriteResult, public
//
// Synopsis: Writes test results over several columns
//
// Parameters: [lpszMeasurementName] Name of result (like
// "Create moniker"
// [iIterations] Number of results
// [paUlTime] Array with measurement times
//
// History: 30-June-93 t-martig Created
//
//--------------------------------------------------------------------
void CTestOutput::WriteResults (LPTSTR lpszMeasurementName, int iIterations,
ULONG *paUlTimes)
{
int i;
if (fpOut)
{
WriteString (lpszMeasurementName);
for (i=0; i<iIterations; i++)
{
if (paUlTimes[i] == NOTAVAIL)
{
fprintf (fpOut, "\tn/a");
}
else if (paUlTimes[i] == TEST_FAILED)
{
fprintf (fpOut, "\tF");
}
else
{
fprintf (fpOut, "\t%lu", paUlTimes[i]);
}
}
fprintf (fpOut, "\n");
}
}
//+-------------------------------------------------------------------
//
// Member: WriteClassCtx, public
//
// Synopsis: Prints the class activation conL as string to
// a specified output class
//
// Parameters: [dwClsCtx] Class conL to be printed
//
// CLSCTX_INPROC_SERVER --> "InProc"
// CLSCTX_LOCAL_SERVER --> "LocaL"
// CLSCTX_INPROC_HANDLER --> "Handler"
// any other --> "Unknown"
//
// History: 12-July-93 t-martig Created
//
//--------------------------------------------------------------------
void CTestOutput::WriteClassCtx (DWORD dwClsCtx)
{
LPTSTR pc = TEXT("Unknown");
int i = 0;
while (saModeNames[i])
{
if (dwaModes[i] == dwClsCtx)
{
pc = saModeNames[i];
break;
}
i++;
}
WriteString (TEXT("ClsCtx\t"));
WriteString (pc);
WriteString (TEXT("\n"));
}
//+-------------------------------------------------------------------
//
// Member: WriteClassID
//
// Synopsis: Prints the class ID as string to
// a specified output class
//
// Parameters: [pClsID] Class ID to be printed
//
// History: 13-July-93 t-martig Created
//
//--------------------------------------------------------------------
void CTestOutput::WriteClassID (CLSID *pClsID)
{
if (g_fFullInfo)
{
TCHAR szGUID[50];
WriteString (TEXT("ClsID\t"));
StringFromGUID(*pClsID, szGUID);
WriteString (szGUID);
WriteString (TEXT("\n"));
}
}
//+-------------------------------------------------------------------
//
// Member: WriteTime
//
// Synopsis: Prints time to a specified output class
//
// Parameters: [pstTime] System time
//
// History: 5-August-93 t-martig Created
//
//--------------------------------------------------------------------
void CTestOutput::WriteTime (_SYSTEMTIME *pstTime)
{
WORD wHour;
char cAmpm;
if (fpOut)
{
cAmpm = 'a';
wHour = pstTime->wHour;
if (wHour >= 12)
{
cAmpm = 'p';
if (wHour > 12)
wHour-=12;
}
if (wHour==0)
wHour=12;
fprintf (fpOut, "%d:%02d%c", wHour, pstTime->wMinute, cAmpm);
}
}
//+-------------------------------------------------------------------
//
// Member: WriteDate
//
// Synopsis: Prints date to a specified output class
//
// Parameters: [pstdate] System date
//
// History: 5-August-93 t-martig Created
//
//--------------------------------------------------------------------
void CTestOutput::WriteDate (_SYSTEMTIME *pstDate)
{
if (fpOut)
{
fprintf (fpOut, "%02d-%02d-%02d",
pstDate->wMonth, pstDate->wDay, pstDate->wYear % 100);
}
}
//+-------------------------------------------------------------------
//
// Member: WriteSCODE
//
// Synopsis: Prints an SCODE to a specified output class
//
// Parameters: [sc] SCODE
//
// History: 5-August-93 t-martig Created
//
//--------------------------------------------------------------------
void CTestOutput::WriteSCODE (SCODE sc)
{
if (fpOut)
fprintf (fpOut, "%xh/%xh", SCODE_FACILITY(sc), SCODE_CODE(sc));
}
//+-------------------------------------------------------------------
//
// Member: StringFromGUID
//
// Synopsis: converts a GUID into a string so that it may be
// printed to a specified output class
//
// Parameters: [pClsID] Class ID to be printed
//
// History: 13-July-93 t-martig Created
//
//--------------------------------------------------------------------
void CTestOutput::StringFromGUID(GUID &rguid, LPTSTR lpsz)
{
wsprintf(lpsz, TEXT("{%08lX-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}"),
rguid.Data1, rguid.Data2, rguid.Data3,
rguid.Data4[0], rguid.Data4[1],
rguid.Data4[2], rguid.Data4[3],
rguid.Data4[4], rguid.Data4[5],
rguid.Data4[6], rguid.Data4[7]);
}