Move delta calculation up so that only the loop time counts.
[kugel-rb.git] / apps / plugins / test_mem.c
blobb38a454c330584cf2f6118a285e9d81ade2f4b25
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
10 * Copyright (C) 2010 Thomas Martitz
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
22 #include "plugin.h"
24 PLUGIN_HEADER
26 #define BUF_SIZE ((PLUGIN_BUFFER_SIZE-(10<<10)) / (sizeof(int)))
27 #define LOOP_REPEAT 8
28 static volatile int buf[BUF_SIZE];
29 #define KB_PER_SEC(delta) ((BUF_SIZE*sizeof(buf[0])*LOOP_REPEAT/delta) >> 10)
31 enum plugin_status plugin_start(const void* parameter)
33 (void)parameter;
34 bool done = false;
35 bool boost = false;
36 int count = 0;
37 int last_tick = 0;
39 rb->lcd_setfont(FONT_SYSFIXED);
41 while (!done)
43 unsigned i, j;
44 int line = 0;
45 int x;
46 int delta;
47 last_tick = *rb->current_tick;
49 for(i = 0; i < LOOP_REPEAT; i++)
51 for (j = 0; j < BUF_SIZE; j++)
52 buf[j] = j;
54 delta = *rb->current_tick - last_tick;
55 rb->screens[0]->clear_display();
56 rb->screens[0]->putsf(0, line++, "%s", boost?"boosted":"unboosted");
57 rb->screens[0]->putsf(0, line++, "bufsize: %u", BUF_SIZE*sizeof(buf[0]));
58 rb->screens[0]->putsf(0, line++, "loop#: %d", ++count);
59 rb->screens[0]->putsf(0, line++, "write ticks: %d (%d kB/s)", delta,
60 KB_PER_SEC(delta));
61 last_tick = *rb->current_tick;
62 for(i = 0; i < LOOP_REPEAT; i++)
64 for(j = 0; j < BUF_SIZE; j++)
65 x = buf[j];
67 delta = *rb->current_tick - last_tick;
68 rb->screens[0]->putsf(0, line++, "read ticks: %d (%d kB/s)", delta,
69 KB_PER_SEC(delta));
70 rb->screens[0]->update();
72 int button = rb->button_get(false);
73 switch (button)
75 case BUTTON_UP:
76 if (!boost)
78 rb->cpu_boost(true);
79 boost = true;
81 break;
83 case BUTTON_DOWN:
84 if (boost)
86 rb->cpu_boost(false);
87 boost = false;
89 break;
91 case BUTTON_LEFT:
92 done = true;
93 break;
97 return PLUGIN_OK;