xref: /haiku/src/tests/servers/app/benchmark/RandomLineTest.cpp (revision 2222d0559df303a9846a2fad53741f8b20b14d7c)
1 /*
2  * Copyright (C) 2008-2009 Stephan Aßmus <superstippi@gmx.de>
3  * All rights reserved. Distributed under the terms of the MIT license.
4  */
5 
6 #include "RandomLineTest.h"
7 
8 #include <stdio.h>
9 
10 #include <View.h>
11 
12 #include "TestSupport.h"
13 
14 
15 RandomLineTest::RandomLineTest()
16 	: Test(),
17 	  fTestDuration(0),
18 	  fTestStart(-1),
19 
20 	  fLinesRendered(0),
21 	  fLinesPerIteration(100),
22 
23 	  fIterations(0),
24 	  fMaxIterations(1500),
25 
26 	  fViewBounds(0, 0, -1, -1)
27 {
28 }
29 
30 
31 RandomLineTest::~RandomLineTest()
32 {
33 }
34 
35 
36 void
37 RandomLineTest::Prepare(BView* view)
38 {
39 	fViewBounds = view->Bounds();
40 
41 	fTestDuration = 0;
42 	fLinesRendered = 0;
43 	fIterations = 0;
44 	fTestStart = system_time();
45 }
46 
47 bool
48 RandomLineTest::RunIteration(BView* view)
49 {
50 	bigtime_t now = system_time();
51 
52 	float vMiddle = (fViewBounds.top + fViewBounds.bottom) / 2;
53 
54 	for (uint32 i = 0; i < fLinesPerIteration; i++) {
55 		view->SetHighColor(rand() % 255, rand() % 255, rand() % 255);
56 
57 		BPoint a;
58 		a.x = random_number_between(fViewBounds.left, fViewBounds.right);
59 		a.y = random_number_between(fViewBounds.top, vMiddle);
60 		BPoint b;
61 		b.x = random_number_between(fViewBounds.left, fViewBounds.right);
62 		b.y = random_number_between(vMiddle, fViewBounds.bottom);
63 
64 		view->StrokeLine(a, b);
65 
66 		fLinesRendered++;
67 	}
68 
69 	view->Sync();
70 
71 	fTestDuration += system_time() - now;
72 	fIterations++;
73 
74 	return fIterations < fMaxIterations;
75 }
76 
77 
78 void
79 RandomLineTest::PrintResults(BView* view)
80 {
81 	if (fTestDuration == 0) {
82 		printf("Test was not run.\n");
83 		return;
84 	}
85 	bigtime_t timeLeak = system_time() - fTestStart - fTestDuration;
86 
87 	Test::PrintResults(view);
88 
89 	printf("Lines per iteration: %lu\n", fLinesPerIteration);
90 	printf("Total lines rendered: %llu\n", fLinesRendered);
91 	printf("Lines per second: %.3f\n",
92 		fLinesRendered * 1000000.0 / fTestDuration);
93 	printf("Average time between iterations: %.4f seconds.\n",
94 		(float)timeLeak / fIterations / 1000000);
95 }
96 
97 
98 Test*
99 RandomLineTest::CreateTest()
100 {
101 	return new RandomLineTest();
102 }
103 
104 
105