1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
--- a/bs_main.c
+++ b/bs_main.c
@@ -11,6 +11,9 @@
#include "bs_profiler.h"
#include "bs_rubberband.h"
+static struct timeval beginTime; /* Time of the benchmark start */
+static int cur_step; /* Current benchmark phase. Used to subsequently increase number of objects each 10 seconds */
+
typedef struct bs_main_data_st
{
bs_cairo_sdl_t *pCairoSdl;
@@ -113,7 +116,9 @@
SDL_Event event;
SDL_UserEvent userevent;
bs_main_data_t *pMainData;
-
+ struct timeval curTime;
+ int hunsec;
+
pMainData = (bs_main_data_t*) pUserData;
userevent.type = SDL_USEREVENT;
@@ -121,6 +126,20 @@
userevent.data1 = NULL;
userevent.data2 = NULL;
+ gettimeofday(&curTime, NULL);
+ hunsec = curTime.tv_sec - beginTime.tv_sec;
+
+ /* increase cur_step each 10 seconds */
+ if (cur_step < hunsec / 10) {
+ printf("%d objects = %.2f fps\n", 1 << (cur_step + 1), pMainData->fps);
+ userevent.code = 2; /* add more objects */
+ cur_step++;
+ }
+
+ /* exit if requested number of objects is reached */
+ if (cur_step == 4)
+ userevent.code = 3;
+
event.type = SDL_USEREVENT;
event.user = userevent;
@@ -152,14 +171,19 @@
pMainData->newTimerInterval = 50;
pMainData->fps = 20.0;
pMainData->running = TRUE;
-
+
+ cur_step = 0;
+
bs_profiler_init();
+ gettimeofday(&beginTime, NULL);
gettimeofday(&startTime, NULL);
pMainData->lastFrameTimeStamp = startTime.tv_sec * 1000 + startTime.tv_usec / 1000;
SDL_AddTimer(50, bs_main_sdl_timer_callback, pMainData);
+ bs_blob_collective_split(pMainData->pCollective);
+
for(;;)
{
SDL_WaitEvent(&event);
@@ -253,8 +277,7 @@
break;
case SDL_USEREVENT:
- if(event.user.code == 1)
- {
+ if (event.user.code == 1) {
gettimeofday(&startTime, NULL);
bs_main_update_simulation(pMainData);
bs_main_redraw(pMainData);
@@ -268,10 +291,15 @@
usedTime = 50;
}
- pMainData->newTimerInterval = usedTime;
- }
- break;
-
+ pMainData->newTimerInterval = usedTime;
+ } else if (event.user.code == 2) {
+ int i;
+ for (i = 0; i < (1 << cur_step); i++)
+ bs_blob_collective_split(pMainData->pCollective);
+ } else if (event.user.code == 3) {
+ exit(0);
+ }
+ break;
case SDL_QUIT:
exit(0);
break;
|