1
0
Fork 0
forked from len0rd/rockbox

Plasma demo: (1) small speed optimisation. (2) Limit speed to 33fps. (3) Boost if running too slow on targets with variable CPU frequency.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23696 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jens Arnold 2009-11-22 13:35:41 +00:00
parent 98755fd493
commit 0c52374a3d

View file

@ -53,6 +53,9 @@ static size_t gbuf_size = 0;
#endif #endif
static unsigned char sp1, sp2, sp3, sp4; /* Speed of plasma */ static unsigned char sp1, sp2, sp3, sp4; /* Speed of plasma */
static int plasma_frequency; static int plasma_frequency;
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
static bool boosted = false;
#endif
/* Key assignement, all bitmapped models */ /* Key assignement, all bitmapped models */
#if (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) || \ #if (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) || \
@ -260,6 +263,10 @@ void cleanup(void *parameter)
{ {
(void)parameter; (void)parameter;
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
if (boosted)
rb->cpu_boost(false);
#endif
#ifndef HAVE_LCD_COLOR #ifndef HAVE_LCD_COLOR
grey_release(); grey_release();
#endif #endif
@ -275,8 +282,12 @@ void cleanup(void *parameter)
int main(void) int main(void)
{ {
plasma_frequency = 1; plasma_frequency = 1;
int button, x, y; int button, delay, x, y;
unsigned char p1,p2,p3,p4,t1,t2,t3,t4, z; unsigned char p1,p2,p3,p4,t1,t2,t3,t4, z,z0;
long last_tick = *rb->current_tick;
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
int cumulated_lag = 0;
#endif
#ifdef HAVE_LCD_COLOR #ifdef HAVE_LCD_COLOR
#if defined(HAVE_LCD_MODES) && (HAVE_LCD_MODES & LCD_MODE_PAL256) #if defined(HAVE_LCD_MODES) && (HAVE_LCD_MODES & LCD_MODE_PAL256)
unsigned char *ptr; unsigned char *ptr;
@ -325,10 +336,10 @@ int main(void)
{ {
t3=p3; t3=p3;
t4=p4; t4=p4;
z0 = wave_array[t1] + wave_array[t2];
for(x = 0; x < LCD_WIDTH; ++x) for(x = 0; x < LCD_WIDTH; ++x)
{ {
z = wave_array[t1] + wave_array[t2] + wave_array[t3] z = z0 + wave_array[t3] + wave_array[t4];
+ wave_array[t4];
#if defined(HAVE_LCD_MODES) && (HAVE_LCD_MODES & LCD_MODE_PAL256) #if defined(HAVE_LCD_MODES) && (HAVE_LCD_MODES & LCD_MODE_PAL256)
*ptr++ = z; *ptr++ = z;
#else #else
@ -356,7 +367,22 @@ int main(void)
grey_ub_gray_bitmap(greybuffer, 0, 0, LCD_WIDTH, LCD_HEIGHT); grey_ub_gray_bitmap(greybuffer, 0, 0, LCD_WIDTH, LCD_HEIGHT);
#endif #endif
button = rb->button_get(false); delay = last_tick - *rb->current_tick + HZ/33;
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
if (!boosted && delay < 0)
{
cumulated_lag -= delay; /* proportional increase */
if (cumulated_lag >= HZ)
rb->cpu_boost(boosted = true);
}
else if (boosted && delay > 1) /* account for jitter */
{
if (--cumulated_lag <= 0) /* slow decrease */
rb->cpu_boost(boosted = false);
}
#endif
button = rb->button_get_w_tmo(MAX(0, delay));
last_tick = *rb->current_tick;
switch(button) switch(button)
{ {