//+------------------------------------------------------------------------ // // 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 #include //+------------------------------------------------------------------- // // 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 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 "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]); }