|
|
/**************************************************************************\
* * Copyright (c) 2000 Microsoft Corporation * * Module Name: * * perftext.cpp * * Abstract: * * Contains all the tests for any routines that do text functionality. * \**************************************************************************/
#include "perftest.h"
WCHAR TestStringW[] = L"The quick brown fox jumps over the lazy dog."; CHAR TestStringA[] = "The quick brown fox jumps over the lazy dog."; INT TestString_Count = sizeof(TestStringW) / sizeof(TestStringW[0]) - 1;
float Text_Draw_PerCall_30pt_Aliased(Graphics *g, HDC hdc) { UINT iterations; float seconds;
if (g) { FontFamily fontFamily(L"Arial"); Font font(&fontFamily, 30); StringFormat stringFormat(0); SolidBrush brush(Color::Red); PointF origin(0, 0);
StartTimer(); do { PointF origin(64, 64); g->DrawString(L"A", 1, &font, origin, &stringFormat, &brush); } while (!EndTimer()); g->Flush(FlushIntentionSync); GetTimer(&seconds, &iterations); } else { HFONT font = CreateFont(30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _T("Arial")); HGDIOBJ oldFont = SelectObject(hdc, font);
SetTextColor(hdc, RGB(0xff, 0, 0)); SetBkMode(hdc, TRANSPARENT);
StartTimer();
do { TextOut(hdc, 0, 0, _T("A"), 1);
} while (!EndTimer());
GdiFlush(); GetTimer(&seconds, &iterations); }
return(iterations / seconds / KILO); // Calls per second
}
float Text_Draw_PerGlyph_30pt_Aliased(Graphics *g, HDC hdc) { UINT iterations; float seconds;
if (g) { FontFamily fontFamily(L"Arial"); Font font(&fontFamily, 30); StringFormat stringFormat(0); SolidBrush brush(Color::Red); PointF origin(0, 0);
// Don't count font realization towards per-glyph time:
g->DrawString(TestStringW, TestString_Count, &font, origin, &stringFormat, &brush);
StartTimer(); do { PointF origin(64, 64); g->DrawString(TestStringW, TestString_Count, &font, origin, &stringFormat, &brush); } while (!EndTimer()); g->Flush(FlushIntentionSync); GetTimer(&seconds, &iterations); } else { HFONT font = CreateFont(30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _T("Arial")); HGDIOBJ oldFont = SelectObject(hdc, font);
SetTextColor(hdc, RGB(0xff, 0, 0)); SetBkMode(hdc, TRANSPARENT); TextOutA(hdc, 0, 0, TestStringA, TestString_Count);
StartTimer();
do { TextOutA(hdc, 0, 0, TestStringA, TestString_Count);
} while (!EndTimer());
GdiFlush(); GetTimer(&seconds, &iterations); }
UINT glyphs = TestString_Count * iterations;
return(glyphs / seconds / KILO); // Kglyphs/s
}
float Text_Draw_PerGlyph_30pt_LinearGradient(Graphics *g, HDC hdc) { UINT iterations; float seconds;
if (!g) return(0); // No GDI equivalent
FontFamily fontFamily(L"Arial"); Font font(&fontFamily, 30); StringFormat stringFormat(0); LinearGradientBrush brush(Point(0, 0), Point(512, 512), Color::Red, Color::Blue); PointF origin(0, 0);
// Don't count font realization towards per-glyph time:
g->DrawString(TestStringW, TestString_Count, &font, origin, &stringFormat, &brush);
StartTimer();
do { PointF origin(64, 64); g->DrawString(TestStringW, TestString_Count, &font, origin, &stringFormat, &brush);
} while (!EndTimer());
g->Flush(FlushIntentionSync);
GetTimer(&seconds, &iterations);
UINT glyphs = TestString_Count * iterations;
return(glyphs / seconds / KILO); // Kglyphs/s
}
float Text_Draw_PerCall_30pt_LinearGradient(Graphics *g, HDC hdc) { UINT iterations; float seconds;
if (!g) return(0); // No GDI equivalent
FontFamily fontFamily(L"Arial"); Font font(&fontFamily, 30); StringFormat stringFormat(0); LinearGradientBrush brush(Point(0, 0), Point(512, 512), Color::Red, Color::Blue); PointF origin(0, 0);
StartTimer();
do { PointF origin(64, 64); g->DrawString(L"A", 1, &font, origin, &stringFormat, &brush);
} while (!EndTimer());
g->Flush(FlushIntentionSync);
GetTimer(&seconds, &iterations);
UINT glyphs = TestString_Count * iterations;
return(glyphs / seconds / KILO); // Kglyphs/s
}
float Text_Draw_PerCall_30pt_Antialiased(Graphics *g, HDC hdc) { UINT iterations; float seconds;
if (g) { g->SetTextRenderingHint(TextRenderingHintAntiAlias);
FontFamily fontFamily(L"Arial"); Font font(&fontFamily, 30); StringFormat stringFormat(0); SolidBrush brush(Color::Red); PointF origin(0, 0);
StartTimer(); do { PointF origin(64, 64); g->DrawString(L"A", 1, &font, origin, &stringFormat, &brush); } while (!EndTimer()); g->Flush(FlushIntentionSync); GetTimer(&seconds, &iterations); } else { HFONT font = CreateFont(30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ANTIALIASED_QUALITY, 0, _T("Arial")); HGDIOBJ oldFont = SelectObject(hdc, font);
SetTextColor(hdc, RGB(0xff, 0, 0)); SetBkMode(hdc, TRANSPARENT);
StartTimer();
do { TextOut(hdc, 0, 0, _T("A"), 1);
} while (!EndTimer());
GdiFlush(); GetTimer(&seconds, &iterations); }
return(iterations / seconds / KILO); // Calls per second
}
float Text_Draw_PerGlyph_30pt_Antialiased(Graphics *g, HDC hdc) { UINT iterations; float seconds;
if (g) { g->SetTextRenderingHint(TextRenderingHintAntiAlias);
FontFamily fontFamily(L"Arial"); Font font(&fontFamily, 30); StringFormat stringFormat(0); SolidBrush brush(Color::Red); PointF origin(0, 0);
// Don't count font realization towards per-glyph time:
g->DrawString(TestStringW, TestString_Count, &font, origin, &stringFormat, &brush);
StartTimer(); do { PointF origin(64, 64); g->DrawString(TestStringW, TestString_Count, &font, origin, &stringFormat, &brush); } while (!EndTimer()); g->Flush(FlushIntentionSync); GetTimer(&seconds, &iterations); } else { HFONT font = CreateFont(30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ANTIALIASED_QUALITY, 0, _T("Arial")); HGDIOBJ oldFont = SelectObject(hdc, font);
SetTextColor(hdc, RGB(0xff, 0, 0)); SetBkMode(hdc, TRANSPARENT); TextOutA(hdc, 0, 0, TestStringA, TestString_Count);
StartTimer();
do { TextOutA(hdc, 0, 0, TestStringA, TestString_Count);
} while (!EndTimer());
GdiFlush(); GetTimer(&seconds, &iterations); }
UINT glyphs = TestString_Count * iterations;
return(glyphs / seconds / KILO); // Kglyphs/s
}
float Text_Draw_PerGlyph_30pt_Antialiased_LinearGradient(Graphics *g, HDC hdc) { UINT iterations; float seconds;
if (!g) return(0); // No GDI equivalent
g->SetTextRenderingHint(TextRenderingHintAntiAlias); FontFamily fontFamily(L"Arial"); Font font(&fontFamily, 30); StringFormat stringFormat(0); LinearGradientBrush brush(Point(0, 0), Point(512, 512), Color::Red, Color::Blue); PointF origin(0, 0);
// Don't count font realization towards per-glyph time:
g->DrawString(TestStringW, TestString_Count, &font, origin, &stringFormat, &brush);
StartTimer();
do { PointF origin(64, 64); g->DrawString(TestStringW, TestString_Count, &font, origin, &stringFormat, &brush);
} while (!EndTimer());
g->Flush(FlushIntentionSync);
GetTimer(&seconds, &iterations);
UINT glyphs = TestString_Count * iterations;
return(glyphs / seconds / KILO); // Kglyphs/s
}
float Text_Draw_PerCall_30pt_Antialiased_LinearGradient(Graphics *g, HDC hdc) { UINT iterations; float seconds;
if (!g) return(0); // No GDI equivalent
g->SetTextRenderingHint(TextRenderingHintAntiAlias);
FontFamily fontFamily(L"Arial"); Font font(&fontFamily, 30); StringFormat stringFormat(0); LinearGradientBrush brush(Point(0, 0), Point(512, 512), Color::Red, Color::Blue); PointF origin(0, 0);
StartTimer();
do { PointF origin(64, 64); g->DrawString(L"A", 1, &font, origin, &stringFormat, &brush);
} while (!EndTimer());
g->Flush(FlushIntentionSync);
GetTimer(&seconds, &iterations);
UINT glyphs = TestString_Count * iterations;
return(glyphs / seconds / KILO); // Kglyphs/s
}
float Text_Draw_PerCall_30pt_Cleartype(Graphics *g, HDC hdc) { UINT iterations; float seconds;
if (!g) return(0); // No accessible GDI equivalent
g->SetTextRenderingHint(TextRenderingHintClearTypeGridFit);
FontFamily fontFamily(L"Arial"); Font font(&fontFamily, 30); StringFormat stringFormat(0); SolidBrush brush(Color::Red); PointF origin(0, 0);
StartTimer();
do { PointF origin(64, 64); g->DrawString(L"A", 1, &font, origin, &stringFormat, &brush);
} while (!EndTimer());
g->Flush(FlushIntentionSync);
GetTimer(&seconds, &iterations);
return(iterations / seconds / KILO); // Calls per second
}
float Text_Draw_PerGlyph_30pt_Cleartype(Graphics *g, HDC hdc) { UINT iterations; float seconds;
if (!g) return(0); // No accessible GDI equivalent
g->SetTextRenderingHint(TextRenderingHintClearTypeGridFit);
FontFamily fontFamily(L"Arial"); Font font(&fontFamily, 30); StringFormat stringFormat(0); SolidBrush brush(Color::Red); PointF origin(0, 0);
// Don't count font realization towards per-glyph time:
g->DrawString(TestStringW, TestString_Count, &font, origin, &stringFormat, &brush);
StartTimer();
do { PointF origin(64, 64); g->DrawString(TestStringW, TestString_Count, &font, origin, &stringFormat, &brush);
} while (!EndTimer());
g->Flush(FlushIntentionSync);
GetTimer(&seconds, &iterations);
UINT glyphs = TestString_Count * iterations;
return(glyphs / seconds / KILO); // Kglyphs/s
}
float Text_Draw_PerGlyph_30pt_Cleartype_LinearGradient(Graphics *g, HDC hdc) { UINT iterations; float seconds;
if (!g) return(0); // No GDI equivalent
g->SetTextRenderingHint(TextRenderingHintClearTypeGridFit); FontFamily fontFamily(L"Arial"); Font font(&fontFamily, 30); StringFormat stringFormat(0); LinearGradientBrush brush(Point(0, 0), Point(512, 512), Color::Red, Color::Blue); PointF origin(0, 0);
// Don't count font realization towards per-glyph time:
g->DrawString(TestStringW, TestString_Count, &font, origin, &stringFormat, &brush);
StartTimer();
do { PointF origin(64, 64); g->DrawString(TestStringW, TestString_Count, &font, origin, &stringFormat, &brush);
} while (!EndTimer());
g->Flush(FlushIntentionSync);
GetTimer(&seconds, &iterations);
UINT glyphs = TestString_Count * iterations;
return(glyphs / seconds / KILO); // Kglyphs/s
}
float Text_Draw_PerCall_30pt_Cleartype_LinearGradient(Graphics *g, HDC hdc) { UINT iterations; float seconds;
if (!g) return(0); // No GDI equivalent
g->SetTextRenderingHint(TextRenderingHintClearTypeGridFit);
FontFamily fontFamily(L"Arial"); Font font(&fontFamily, 30); StringFormat stringFormat(0); LinearGradientBrush brush(Point(0, 0), Point(512, 512), Color::Red, Color::Blue); PointF origin(0, 0);
StartTimer();
do { PointF origin(64, 64); g->DrawString(L"A", 1, &font, origin, &stringFormat, &brush);
} while (!EndTimer());
g->Flush(FlushIntentionSync);
GetTimer(&seconds, &iterations);
UINT glyphs = TestString_Count * iterations;
return(glyphs / seconds / KILO); // Kglyphs/s
}
////////////////////////////////////////////////////////////////////////////////
// Add tests for this file here. Always use the 'T' macro for adding entries.
// The parameter meanings are as follows:
//
// Parameter
// ---------
// 1 UniqueIdentifier - Must be a unique number assigned to no other test
// 2 Priority - On a scale of 1 to 5, how important is the test?
// 3 Function - Function name
// 4 Comment - Anything to describe the test
Test TextTests[] = { T(4000, 1, Text_Draw_PerCall_30pt_Aliased, "Kcalls/s"), T(4001, 1, Text_Draw_PerGlyph_30pt_Aliased, "Kglyphs/s"), T(4002, 1, Text_Draw_PerCall_30pt_LinearGradient, "Kcalls/s"), T(4003, 1, Text_Draw_PerGlyph_30pt_LinearGradient, "Kglyphs/s"), T(4004, 1, Text_Draw_PerCall_30pt_Antialiased, "Kcalls/s"), T(4005, 1, Text_Draw_PerGlyph_30pt_Antialiased, "Kglyphs/s"), T(4006, 1, Text_Draw_PerCall_30pt_Antialiased_LinearGradient, "Kcalls/s"), T(4007, 1, Text_Draw_PerGlyph_30pt_Antialiased_LinearGradient, "Kglyphs/s"), T(4008, 1, Text_Draw_PerCall_30pt_Cleartype, "Kcalls/s"), T(4009, 1, Text_Draw_PerGlyph_30pt_Cleartype, "Kglyphs/s"), T(4010, 1, Text_Draw_PerCall_30pt_Cleartype_LinearGradient, "Kcalls/s"), T(4011, 1, Text_Draw_PerGlyph_30pt_Cleartype_LinearGradient, "Kglyphs/s"), };
INT TextTests_Count = sizeof(TextTests) / sizeof(TextTests[0]);
|