Guiliani  Version 2.6 revision 7293 (documentation build 12)
GUIBenchmark.h
1#ifndef __GUIBENCHMARK_H__
2#define __GUIBENCHMARK_H__
3
4#include "eC_TList_doubleLinked.h"
5
6#include "GUI.h"
7#include "GUIEvent.h"
8#include "GUIInputMedia.h"
9#include "GUIComponentManager.h"
10//#include "GfxWrap.h"
11#include "GUITrace.h"
12
13#include "GUIResourceManager.h"
14#include "GUIImageResource.h"
15
16
32{
33public:
42 const eC_UInt& uiWidth,
43 const eC_UInt& uiHeight,
44 const eC_UInt& uiStride,
45 const eC_UByte& ubBitsPerPixel,
46 eC_UByte* pkFramebuffer);
47
49
52 void Run();
53
57 void AddTestImage(const eC_String& kImageName);
58
62 void AddTestFont(const eC_String& kFontName);
63
67 void SetFontForSummary(const eC_String& kFontName);
68
72 void SetSummaryWaitTime(const eC_UInt& uiWaitTime);
73
77 void SetNumberOfRuns(const eC_UInt& uiNumberOfRuns) { m_uiNumberOfRuns = uiNumberOfRuns; }
78
82 void SetNumberOfPrimitives(const eC_UInt& uiNumberOfPrimitives) { m_uiNumberOfPrimitives = uiNumberOfPrimitives; }
83
87 void SetNumberOfTexts(const eC_UInt& uiNumberOfTexts) { m_uiNumberOfTexts = uiNumberOfTexts; }
88
92 void SetNumberOfBlits(const eC_UInt& uiNumberOfBlits) { m_uiNumberOfBlits = uiNumberOfBlits; }
93
96 void AllOn()
97 {
98 SetFillScreen(true);
99
100 SetPrimitiveLine(true);
101 SetPrimitiveRect(true);
103 SetPrimitiveArc(true);
104 SetPrimitiveRing(true);
105
106 SetTextSingle(true);
107 SetTextMedium(true);
108 SetTextLong(true);
109
110 SetBlitImg(true);
112 SetBlitImgExt(true);
113 SetBlitSubImage(true);
114 SetRotate(true);
115 SetRotateSubImage(true);
116 }
117
120 void AllOff()
121 {
122 SetFillScreen(false);
123
124 SetPrimitiveLine(false);
125 SetPrimitiveRect(false);
126 SetPrimitiveEllipse(false);
127 SetPrimitiveArc(false);
128 SetPrimitiveRing(false);
129
130 SetTextSingle(false);
131 SetTextMedium(false);
132 SetTextLong(false);
133
134 SetBlitImg(false);
135 SetBlitImgNinePatch(false);
136 SetBlitImgExt(false);
137 SetBlitSubImage(false);
138 SetRotate(false);
139 SetRotateSubImage(false);
140 }
141
145 void SetFillScreen(const eC_Bool& bActive) { m_bFillScreenActive = bActive; }
146
150 void SetPrimitiveLine(const eC_Bool& bActive) { m_bPrimitiveLineActive = bActive; }
154 void SetPrimitiveRect(const eC_Bool& bActive) { m_bPrimitiveRectActive = bActive; }
158 void SetPrimitiveEllipse(const eC_Bool& bActive) { m_bPrimitiveEllipseActive = bActive; }
162 void SetPrimitiveArc(const eC_Bool& bActive) { m_bPrimitiveArcActive = bActive; }
166 void SetPrimitiveRing(const eC_Bool& bActive) { m_bPrimitiveRingActive = bActive; }
167
171 void SetTextSingle(const eC_Bool& bActive) { m_bTextSingleActive = bActive; }
175 void SetTextMedium(const eC_Bool& bActive) { m_bTextMediumActive = bActive; }
179 void SetTextLong(const eC_Bool& bActive) { m_bTextLongActive = bActive; }
180
184 void SetBlitImg(const eC_Bool& bActive) { m_bBlitImgActive = bActive; }
188 void SetBlitImgNinePatch(const eC_Bool& bActive) { m_bBlitImgNinePatchActive = bActive; }
192 void SetBlitImgExt(const eC_Bool& bActive) { m_bBlitImgExtActive = bActive; }
196 void SetBlitSubImage(const eC_Bool& bActive) { m_bBlitSubImageActive = bActive; }
200 void SetRotate(const eC_Bool& bActive) { m_bRotateActive = bActive; }
204 void SetRotateSubImage(const eC_Bool& bActive) { m_bRotateSubImageActive = bActive; }
205
206 // helper classes
207private:
211 class InputHelper : public CGUIInputMedia
212 {
213 public:
216 InputHelper();
217
222 virtual void PollEvent();
223 };
224
228 class GUIHelper : public CGUI
229 {
230 public:
235 GUIHelper(const eC_UInt& uiWidth, const eC_UInt& uiHeight);
236
239 void Refresh();
240
244 void SetColor(const eC_UInt& uiColor = 0);
245
252 void SetColor(const eC_UByte& ubRed, const eC_UByte& ubGreen, const eC_UByte& ubBlue, const eC_UByte& ubAlpha);
253
257 void Clear(const eC_UInt& uiColor = 0);
258
265 void Clear(const eC_UByte& ubRed, const eC_UByte& ubGreen, const eC_UByte& ubBlue, const eC_UByte& ubAlpha);
266
267 virtual eC_UInt GetIdleTime() const
268 {
269 return 0;
270 }
271
272 void StartDraw()
273 {
274 m_tDrawTime = eC_GetTicks64();
275 }
276
277 void EndDraw()
278 {
279 m_uiDrawTime += eC_GetMicroSec(eC_GetTicks64() - m_tDrawTime);
280 }
281
282 void ResetTimer()
283 {
284 m_uiDrawTime = 0;
285 m_uiRefreshTime = 0;
286 }
287
288 void GetTime(eC_Value& vDrawTime, eC_Value& vRefreshTime)
289 {
290 vDrawTime = eC_Div(eC_FromInt(m_uiDrawTime), eC_FromInt(1000));
291 vRefreshTime = eC_FromInt(m_uiRefreshTime);
292 }
293
294 private:
295 eC_UInt m_uiWidth;
296 eC_UInt m_uiHeight;
297
298 eC_Time64 m_tDrawTime;
299 eC_UInt m_uiDrawTime;
300 eC_UInt m_uiRefreshTime;
301 };
302
303private:
304 // no copy constructor
306
310 eC_UInt BenchmarkFillScreen();
311
314 eC_UInt BenchmarkLine();
315
319 eC_UInt BenchmarkRect(const eC_Bool& bFilled);
320
324 eC_UInt BenchmarkEllipse(const eC_Bool& bFilled);
325
329 eC_UInt BenchmarkArc(const eC_Bool& bFilled);
330
334 eC_UInt BenchmarkRing(const eC_Bool& bFilled);
335
336 // text
339 eC_UInt BenchmarkText_Single();
340
343 eC_UInt BenchmarkText_Medium();
344
347 eC_UInt BenchmarkText_Long();
348
352 eC_UInt BenchmarkBlitImg_IDXY();
353
357 eC_UInt BenchmarkBlitImgExt_IDXYWHSA(const eC_Value& vFactor, const eC_UByte& ubAlpha);
358
362 eC_UInt BenchmarkBlitImgNinePatch_IDRNA(
363 const eC_Value& vFactorX,
364 const eC_Value& vFactorY,
365 const eC_UByte& ubAlpha);
366
370 eC_UInt BenchmarkBlitImgExt_IDRRA(const eC_Value& vFactor, const eC_UByte& ubAlpha);
371
375 eC_UInt BenchmarkBlitImgExt_IDXYWHXYWHAAN(
376 const eC_UInt uiSrcX,
377 const eC_UInt uiSrcY,
378 const eC_UInt uiSrcWidth,
379 const eC_UInt uiSrcHeight,
380 const eC_Value& vFactor,
381 const eC_UByte& ubAlpha);
382
387 eC_Bool SetTestImage(const eC_String& kImageName);
388
394 eC_Bool SetTestFont(
395 const eC_String& kFontName,
396 const eC_UInt& uiFontSize);
397
402 eC_Bool StartTest();
403
407 eC_UInt EndTest();
408
412 eC_UInt GetTime();
413
414 eC_Value CalcTextScore();
415 eC_Value CalcBlitScore();
416
419 void PrintPrimitivesSummary();
420 void PrintTextSummary();
421 void PrintBlitSummary();
422 void PrintScores();
423
424 void PrintSummaryLine(const eC_String& kText, eC_Value& vNextLine, eC_Value& vNextColumn);
425
426 inline eC_Value GetXPos(const eC_UInt& uiRuns, const eC_UInt& uiActions)
427 {
428 // have -50 to 50 variance
429 if (uiActions % 2)
430 return eC_FromInt(((uiRuns + 10) * uiActions * ((m_uiNumberOfRuns + 5) * 2 - uiActions)) % (m_uiWidth + 100) - eC_FromFloat(50.3f));
431 else
432 return eC_FromInt(((uiRuns + 20) * uiActions * ((m_uiNumberOfRuns + 7) * 2 - uiActions)) % (m_uiWidth + 100) - eC_FromFloat(49.7f));
433 }
434
435 inline eC_Value GetYPos(const eC_UInt& uiRuns, const eC_UInt& uiActions)
436 {
437 // have -50 to 50 variance
438 if (uiActions % 2)
439 return eC_FromInt(((uiRuns + 20) * uiActions * ((m_uiNumberOfRuns + 5) / 2 - uiActions)) % (m_uiHeight + 100) - eC_FromFloat(49.7f));
440 else
441 return eC_FromInt(((uiRuns + 10) * uiActions * ((m_uiNumberOfRuns + 7) / 2 - uiActions)) % (m_uiHeight + 100) - eC_FromFloat(50.3f));
442 }
443
444 inline void GetX2Pos(const eC_UInt& uiRuns, const eC_UInt& uiActions, eC_Value& vX1, eC_Value& vX2)
445 {
446 if (uiActions % 2)
447 vX1 = eC_FromInt(((uiRuns + 10) * uiActions * ((m_uiNumberOfRuns + 5) * 3 - uiActions)) % (m_uiWidth + 100) - eC_FromFloat(50.3f));
448 else
449 vX1 = eC_FromInt(((uiRuns + 20) * uiActions * ((m_uiNumberOfRuns + 7) * 3 - uiActions)) % (m_uiWidth + 100) - eC_FromFloat(49.7f));
450 vX2 = vX1 + eC_Abs(eC_FromInt(((uiRuns + 10) * uiActions * ((m_uiNumberOfRuns + 5) * 3 - uiActions)) % (m_uiWidth + 100)));
451 }
452
453 inline void GetY2Pos(const eC_UInt& uiRuns, const eC_UInt& uiActions, eC_Value& vY1, eC_Value& vY2)
454 {
455 if (uiActions % 2)
456 vY1 = eC_FromInt(((uiRuns + 20) * uiActions * ((m_uiNumberOfRuns + 5) / 3 - uiActions)) % (m_uiHeight + 100) - eC_FromFloat(49.7f));
457 else
458 vY1 = eC_FromInt(((uiRuns + 10) * uiActions * ((m_uiNumberOfRuns + 7) / 3 - uiActions)) % (m_uiHeight + 100) - eC_FromFloat(50.3f));
459 vY2 = vY1 + eC_Abs(eC_FromInt(((uiRuns + 20) * uiActions * ((m_uiNumberOfRuns + 5) / 3 - uiActions)) % (m_uiWidth + 100)));
460 }
461
462private:
463 struct TimeData_t
464 {
465 TimeData_t() :
466 DataPresent(false),
467 Name(""),
468 TimePerRun(eC_FromInt(0)),
469 OperationsPerSecond(0),
470 DrawTime(eC_FromInt(0)),
471 RefreshTime(eC_FromInt(0)),
472 HasAdditionalData(false),
473 FactorX(eC_FromInt(0)),
474 FactorY(eC_FromInt(0)),
475 Alpha(0)
476 {}
477
478 TimeData_t(
479 const eC_String& kName,
480 const eC_Value& vTimePerRun,
481 const eC_UInt& uiOperationsPerSecond,
482 const eC_Value& vDrawTime,
483 const eC_Value& vRefreshTime,
484 const eC_Bool& bHasAdditionalData = false,
485 const eC_Value& vFactorX = eC_FromInt(0),
486 const eC_Value& vFactorY = eC_FromInt(0),
487 const eC_UByte& ubAlpha = 0) :
488 DataPresent(true),
489 Name(kName),
490 TimePerRun(vTimePerRun),
491 OperationsPerSecond(uiOperationsPerSecond),
492 DrawTime(vDrawTime),
493 RefreshTime(vRefreshTime),
494 HasAdditionalData(bHasAdditionalData),
495 FactorX(vFactorX),
496 FactorY(vFactorY),
497 Alpha(ubAlpha)
498 {}
499
500 eC_Bool DataPresent;
501 eC_String Name;
502 eC_Value TimePerRun;
503 eC_UInt OperationsPerSecond;
504 eC_Value DrawTime;
505 eC_Value RefreshTime;
506 eC_Bool HasAdditionalData;
507 eC_Value FactorX;
508 eC_Value FactorY;
509 eC_UByte Alpha;
510 };
511
512private:
513 // sizes and framebuffer access
514 eC_UInt m_uiWidth;
515 eC_UInt m_uiHeight;
516 eC_UInt m_uiStride;
517 eC_UByte m_ubBitsPerPixel;
518 eC_UByte* m_pkFrameBuffer;
519
520 // helpers
521 eC_UInt m_uiNumberOfRuns;
522 eC_UInt m_uiNumberOfPrimitives;
523 eC_UInt m_uiNumberOfTexts;
524 eC_UInt m_uiNumberOfBlits;
525 GUIHelper* m_pkGUI;
526 CGfxWrap* m_pkGfxWrap;
527 InputHelper* m_pkInput;
528
529 // image
531 ImageResource_t m_eImageID;
532 eC_UInt m_uiImageWidth;
533 eC_UInt m_uiImageHeight;
534
535 // font
537 FontResource_t m_eFontID;
538
539 // summary
540 eC_String m_kSummaryFontName;
541 FontResource_t m_eSummaryFontID;
542 eC_UInt m_uiWaitTime;
543
544 // time
545 eC_Time64 m_tTime;
546 eC_UInt m_uiStartMS;
547 eC_UInt m_uiEndMS;
548
549 eC_Value m_vRedrawTime;
550 eC_Value m_vRefreshTime;
551
552 // test-flags
553
554 // fill screen
555 eC_Bool m_bFillScreenActive;
556 TimeData_t m_kFillScreenData;
557
558 // primitives
559 eC_Bool m_bPrimitiveLineActive;
560 TimeData_t m_kLineData;
561 eC_Bool m_bPrimitiveRectActive;
562 TimeData_t m_kRectData[2];
563 eC_Bool m_bPrimitiveEllipseActive;
564 TimeData_t m_kEllipseData[2];
565 eC_Bool m_bPrimitiveArcActive;
566 TimeData_t m_kArcData[2];
567 eC_Bool m_bPrimitiveRingActive;
568 TimeData_t m_kRingData[2];
569
570 // texts
571 eC_Bool m_bTextSingleActive;
572 TimeData_t m_kTextSingleData;
573 eC_Bool m_bTextMediumActive;
574 TimeData_t m_kTextMediumData;
575 eC_Bool m_bTextLongActive;
576 TimeData_t m_kTextLongData;
577 eC_Value m_vTextScore;
578
579 // blits
580 eC_Bool m_bBlitImgActive;
581 TimeData_t m_kBlitImgData;
582 eC_Bool m_bBlitImgNinePatchActive;
583 TimeData_t m_kBlitImgNinePatchData[10];
584 eC_Bool m_bBlitImgExtActive;
585 TimeData_t m_kBlitImgExtData[4];
586 eC_Bool m_bBlitSubImageActive;
587 TimeData_t m_kBlitSubImageData[4];
588 eC_Bool m_bRotateActive;
589 TimeData_t m_kRotateData;
590 eC_Bool m_bRotateSubImageActive;
591 TimeData_t m_kRotateSubImageData;
592 eC_Value m_vBlitScore;
593
594 eC_Value m_vNextLine;
595 eC_Value m_vNextColumn;
596};
597
598#endif
FontResource_t
List of font resource ids.
Definition: GUIFontResource.h:54
Helper Macros in Guiliani
ImageResource_t
Enumeration of image resource ids.
Definition: GUIImageResource.h:126
Definition: GUIBenchmark.h:32
void SetRotateSubImage(const eC_Bool &bActive)
Definition: GUIBenchmark.h:204
void SetRotate(const eC_Bool &bActive)
Definition: GUIBenchmark.h:200
void AddTestFont(const eC_String &kFontName)
void SetBlitImgExt(const eC_Bool &bActive)
Definition: GUIBenchmark.h:192
void SetNumberOfPrimitives(const eC_UInt &uiNumberOfPrimitives)
Definition: GUIBenchmark.h:82
void SetPrimitiveRect(const eC_Bool &bActive)
Definition: GUIBenchmark.h:154
void SetPrimitiveEllipse(const eC_Bool &bActive)
Definition: GUIBenchmark.h:158
void AddTestImage(const eC_String &kImageName)
void AllOff()
Definition: GUIBenchmark.h:120
void SetNumberOfBlits(const eC_UInt &uiNumberOfBlits)
Definition: GUIBenchmark.h:92
void SetPrimitiveRing(const eC_Bool &bActive)
Definition: GUIBenchmark.h:166
void SetPrimitiveArc(const eC_Bool &bActive)
Definition: GUIBenchmark.h:162
void SetTextLong(const eC_Bool &bActive)
Definition: GUIBenchmark.h:179
void SetNumberOfRuns(const eC_UInt &uiNumberOfRuns)
Definition: GUIBenchmark.h:77
void SetTextSingle(const eC_Bool &bActive)
Definition: GUIBenchmark.h:171
void SetFontForSummary(const eC_String &kFontName)
void SetBlitImg(const eC_Bool &bActive)
Definition: GUIBenchmark.h:184
void SetFillScreen(const eC_Bool &bActive)
Definition: GUIBenchmark.h:145
void SetBlitSubImage(const eC_Bool &bActive)
Definition: GUIBenchmark.h:196
CGUIBenchmark(const eC_UInt &uiWidth, const eC_UInt &uiHeight, const eC_UInt &uiStride, const eC_UByte &ubBitsPerPixel, eC_UByte *pkFramebuffer)
void SetBlitImgNinePatch(const eC_Bool &bActive)
Definition: GUIBenchmark.h:188
void SetNumberOfTexts(const eC_UInt &uiNumberOfTexts)
Definition: GUIBenchmark.h:87
void SetTextMedium(const eC_Bool &bActive)
Definition: GUIBenchmark.h:175
void SetPrimitiveLine(const eC_Bool &bActive)
Definition: GUIBenchmark.h:150
void SetSummaryWaitTime(const eC_UInt &uiWaitTime)
void AllOn()
Definition: GUIBenchmark.h:96
GUI base class for any Guiliani application.
Definition: GUI.h:39
Definition: GUIInputMedia.h:30
The graphics wrapper base class.
Definition: GfxWrap.h:88