275 lines
5.9 KiB
C
275 lines
5.9 KiB
C
|
|
/*++
|
|
|
|
Copyright (c) 1995 Microsoft Corporation
|
|
|
|
Module Name
|
|
|
|
gdibench.h
|
|
|
|
Abstract:
|
|
|
|
GDI performance numbers
|
|
|
|
Author:
|
|
|
|
Mark Enstrom (marke) 13-Apr-1995
|
|
|
|
Enviornment:
|
|
|
|
User Mode
|
|
|
|
Revision History:
|
|
|
|
Dan Almosnino (danalm) 20-Sept-1995
|
|
|
|
Added some default values for text string-related tests
|
|
|
|
Dan Almosnino (danalm) 17-Oct-1995
|
|
|
|
Added some default values, globals and new functions for batch mode execution
|
|
|
|
Dan Almosnino (danalm) 20-Nov-1995
|
|
|
|
Included header files for Pentium Cycle Counter and Statistics module.
|
|
Added some variables for statistic processing.
|
|
|
|
--*/
|
|
|
|
#ifdef _WIN32_WINNT
|
|
#include <ntexapi.h>
|
|
#endif
|
|
|
|
int PASCAL
|
|
WinMain(
|
|
HINSTANCE hInst,
|
|
HINSTANCE hPrev,
|
|
LPSTR szCmdLine,
|
|
int cmdShow
|
|
);
|
|
|
|
LRESULT FAR
|
|
PASCAL WndProc(
|
|
HWND hWnd,
|
|
unsigned msg,
|
|
WPARAM wParam,
|
|
LPARAM lParam);
|
|
|
|
|
|
ULONGLONG
|
|
msSetBkColor(
|
|
HDC hdc,
|
|
ULONG iter
|
|
);
|
|
|
|
ULONGLONG
|
|
msGetBkColor(
|
|
HDC hdc,
|
|
ULONG iter
|
|
);
|
|
|
|
ULONGLONG
|
|
msCreateDCW(
|
|
HDC hdc,
|
|
ULONG iter
|
|
);
|
|
|
|
ULONGLONG
|
|
msCreateDCA(
|
|
HDC hdc,
|
|
ULONG iter
|
|
);
|
|
|
|
BOOL
|
|
APIENTRY
|
|
ResultsDlgProc(
|
|
HWND,
|
|
UINT,
|
|
UINT,
|
|
LONG);
|
|
|
|
BOOL
|
|
APIENTRY
|
|
HelpDlgProc(
|
|
HWND,
|
|
UINT,
|
|
UINT,
|
|
LONG);
|
|
|
|
VOID
|
|
SaveResults();
|
|
|
|
char *
|
|
SelectOutFileName(
|
|
HWND hWnd
|
|
);
|
|
|
|
VOID
|
|
WriteBatchResults(
|
|
FILE *fpOut,
|
|
int TestType,
|
|
int cycle
|
|
);
|
|
|
|
int
|
|
SyncMenuChecks(
|
|
HWND hWnd,
|
|
int Last_Checked,
|
|
int New_Checked
|
|
);
|
|
|
|
int
|
|
Std_Parse(
|
|
char *txtbuf,
|
|
int limit,
|
|
int *array);
|
|
|
|
int
|
|
String_Parse(
|
|
char *txtbuf,
|
|
int limit,
|
|
char *array);
|
|
|
|
#ifdef _X86_
|
|
#include "cycle.h"
|
|
#endif
|
|
|
|
#include "stats.h"
|
|
#include "CPUDump.h"
|
|
|
|
typedef ULONG (*PFN_MS)(HDC,ULONG);
|
|
|
|
typedef BOOL (NTAPI *PFNNTAPI)(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
|
|
PFNNTAPI pfnNtQuerySystemInformation;
|
|
|
|
typedef struct _TEST_ENTRY
|
|
{
|
|
PUCHAR Api;
|
|
PFN_MS pfn;
|
|
ULONG Iter;
|
|
ULONG Result;
|
|
|
|
}TEST_ENTRY,*PTEST_ENTRY;
|
|
|
|
#define CMD_IS(x) (NULL != strstr(szCmdLine,x))
|
|
|
|
#define INIT_TIMER ULONGLONG StartTime,StopTime; \
|
|
ULONG ix = Iter
|
|
|
|
#define START_TIMER_NO_INIT StartTime = BeginTimeMeasurement()
|
|
|
|
#define START_TIMER ULONGLONG StartTime,StopTime; \
|
|
ULONG ix = Iter; \
|
|
StartTime = BeginTimeMeasurement()
|
|
|
|
#define END_TIMER StopTime = EndTimeMeasurement(StartTime,Iter); \
|
|
return (StopTime)
|
|
|
|
#define END_TIMER_NO_RETURN StopTime = EndTimeMeasurement(StartTime,Iter)
|
|
#define RETURN_STOP_TIME return (StopTime)
|
|
|
|
// Note that the following works only in Windows NT,
|
|
// so add if( WINNT_PLATFORM ){} tests in attr.c where you want IO measured!
|
|
|
|
#define WINNT_PLATFORM Win32VersionInformation.dwPlatformId == VER_PLATFORM_WIN32_NT
|
|
|
|
#define INIT_IO_COUNT SYSTEM_PERFORMANCE_INFORMATION SysInfo; \
|
|
ULONG InitialPageFaultCount; \
|
|
ULONG InitialPagesReadCount
|
|
|
|
|
|
#define START_IO_COUNT pfnNtQuerySystemInformation(SystemPerformanceInformation, &SysInfo, sizeof(SYSTEM_PERFORMANCE_INFORMATION), NULL); \
|
|
InitialPageFaultCount = SysInfo.PageReadIoCount; \
|
|
InitialPagesReadCount = SysInfo.PageReadCount
|
|
|
|
#define STOP_IO_COUNT pfnNtQuerySystemInformation(SystemPerformanceInformation, &SysInfo, sizeof(SYSTEM_PERFORMANCE_INFORMATION), NULL); \
|
|
PageFaults = SysInfo.PageReadIoCount - InitialPageFaultCount; \
|
|
PagesRead = SysInfo.PageReadCount - InitialPagesReadCount
|
|
|
|
#define START_CPU_DUMP if(gfCPUEventMonitor == TRUE)BeginCPUDump()
|
|
#define STOP_CPU_DUMP if((Per_Test_CPU_Event_Flag = gfCPUEventMonitor)==TRUE)EndCPUDump(Iter)
|
|
|
|
//
|
|
|
|
#define FIRST_TEXT_FUNCTION 9
|
|
#define LAST_TEXT_FUNCTION 18
|
|
|
|
#define DEFAULT_STRING_LENGTH 32
|
|
#define DEFAULT_A_STRING "This is just a silly test string"
|
|
#define DEFAULT_W_STRING L"This is just a silly test string"
|
|
|
|
#define ALL 11
|
|
#define QUICK 12
|
|
#define TEXT_SUITE 13
|
|
#define SELECT 14
|
|
#define POINTS_PER_INCH 72
|
|
|
|
extern ULONG gNumTests;
|
|
extern ULONG gNumQTests;
|
|
extern TEST_ENTRY gTestEntry[];
|
|
|
|
|
|
#define NUM_TESTS gNumTests
|
|
#define NUM_QTESTS gNumQTests
|
|
#define NUM_SAMPLES 100 // Number of test samples to be taken, each performing the test
|
|
// TEST_DEFAULT times
|
|
#define VAR_LIMIT 3 // Desired Variation Coefficient (StdDev/Average) in percents
|
|
|
|
TEST_STATS TestStats[200]; // Sample Array [of size at least as number of test entries]
|
|
static CPU_DUMP CPUDump[200]; // CPU Dump Array [of size at least as number of test entries]
|
|
long Detailed_Data[200][NUM_SAMPLES]; // Storage for detailed sample data
|
|
long PageFaultData[200][NUM_SAMPLES];
|
|
long PagesReadData[200][NUM_SAMPLES];
|
|
|
|
_int64 PerformanceFreq; /* Timer Frequency */
|
|
|
|
OSVERSIONINFO Win32VersionInformation; /* OS Version Info */
|
|
|
|
|
|
// Text String Tests Related
|
|
|
|
size_t StrLen;
|
|
|
|
char SourceString[129];
|
|
wchar_t SourceStringW[129];
|
|
char DestString[256];
|
|
wchar_t DestStringW[256];
|
|
wchar_t WCstrbuf[256];
|
|
|
|
UINT FirstFontChar;
|
|
|
|
static CHOOSEFONT cf;
|
|
static LOGFONT lf; /* logical font structure */
|
|
|
|
// Batch Mode Related
|
|
|
|
BYTE TextSuiteFlag;
|
|
BYTE BatchFlag;
|
|
int BatchCycle;
|
|
BYTE Finish_Message;
|
|
BYTE Dont_Close_App;
|
|
BYTE SelectedFontTransparent;
|
|
BYTE String_Length_Warn;
|
|
BYTE Print_Detailed;
|
|
|
|
FILE *fpIniFile;
|
|
FILE *fpOutFile;
|
|
char IniFileName[80];
|
|
char *OutFileName;
|
|
|
|
ULONG PageFaults;
|
|
ULONG PagesRead;
|
|
|
|
BOOL gfCPUEventMonitor;
|
|
BOOL Per_Test_CPU_Event_Flag;
|
|
|
|
/*
|
|
static ULONG Special_Data1 = 0;
|
|
static ULONG Special_Data2 = 0;
|
|
static ULONG Special_Data3 = 0;
|
|
static ULONG Special_Data4 = 0;
|
|
*/
|
|
ULONG Widths[256];
|
|
|
|
//
|