1
0
Fork 0
forked from len0rd/rockbox

Simple cpu boost tracker for LOGF builds. Shows the last 64 cpu_boost() calls from the debug menu

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12087 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jonathan Gordon 2007-01-22 10:41:25 +00:00
parent a3a303e440
commit f8c68c7912
7 changed files with 133 additions and 3 deletions

View file

@ -131,8 +131,12 @@ struct codec_api ci = {
system_memory_guard,
&cpu_frequency,
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
#ifdef CPU_BOOST_LOGGING
cpu_boost_,
#else
cpu_boost,
#endif
#endif
#endif
/* strings and memory */

View file

@ -209,8 +209,12 @@ struct codec_api {
int (*system_memory_guard)(int newmode);
long *cpu_frequency;
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
#ifdef CPU_BOOST_LOGGING
void (*cpu_boost_)(bool on_off,char*location,int line);
#else
void (*cpu_boost)(bool on_off);
#endif
#endif
#endif
/* strings and memory */

View file

@ -2237,7 +2237,55 @@ static bool dbg_write_eeprom(void)
return false;
}
#endif /* defined(HAVE_EEPROM) && !defined(HAVE_EEPROM_SETTINGS) */
#ifdef CPU_BOOST_LOGGING
static bool cpu_boost_log(void)
{
int i = 0,j=0;
int count = cpu_boost_log_getcount();
int lines = LCD_HEIGHT/SYSFONT_HEIGHT;
char *str;
bool done;
lcd_setmargins(0, 0);
lcd_setfont(FONT_SYSFIXED);
str = cpu_boost_log_getlog_first();
while (i < count)
{
lcd_clear_display();
for(j=0; j<lines; j++,i++)
{
if (!str)
str = cpu_boost_log_getlog_next();
if (str)
{
lcd_puts(0, j,str);
}
str = NULL;
}
lcd_update();
done = false;
action_signalscreenchange();
while (!done)
{
switch(get_action(CONTEXT_STD,TIMEOUT_BLOCK))
{
case ACTION_STD_OK:
case ACTION_STD_PREV:
case ACTION_STD_NEXT:
done = true;
break;
case ACTION_STD_CANCEL:
i = count;
done = true;
break;
}
}
}
get_action(CONTEXT_STD,TIMEOUT_BLOCK);
lcd_setfont(FONT_UI);
action_signalscreenchange();
return false;
}
#endif
bool debug_menu(void)
{
int m;
@ -2311,6 +2359,9 @@ bool debug_menu(void)
#ifdef ROCKBOX_HAS_LOGF
{"logf", logfdisplay },
{"logfdump", logfdump },
#endif
#ifdef CPU_BOOST_LOGGING
{"cpu_boost log",cpu_boost_log},
#endif
};

View file

@ -250,8 +250,13 @@ static const struct plugin_api rockbox_api = {
#ifndef SIMULATOR
system_memory_guard,
&cpu_frequency,
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
#ifdef CPU_BOOST_LOGGING
cpu_boost_,
#else
cpu_boost,
#endif
#endif
timer_register,
timer_unregister,

View file

@ -344,7 +344,11 @@ struct plugin_api {
int (*system_memory_guard)(int newmode);
long *cpu_frequency;
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
#ifdef CPU_BOOST_LOGGING
void (*cpu_boost_)(bool on_off,char*location,int line);
#else
void (*cpu_boost)(bool on_off);
#endif
#endif
bool (*timer_register)(int reg_prio, void (*unregister_callback)(void),
long cycles, int int_prio,

View file

@ -56,22 +56,38 @@ bool detect_flashed_romimage(void);
bool detect_flashed_ramimage(void);
bool detect_original_firmware(void);
#if defined(HAVE_ADJUSTABLE_CPU_FREQ) \
&& defined(ROCKBOX_HAS_LOGF)
#define CPU_BOOST_LOGGING
#endif
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
#define FREQ cpu_frequency
void set_cpu_frequency(long frequency);
#ifdef CPU_BOOST_LOGGING
char * cpu_boost_log_getlog_first(void);
char * cpu_boost_log_getlog_next(void);
int cpu_boost_log_getcount(void);
void cpu_boost_(bool on_off, char* location, int line);
#else
void cpu_boost(bool on_off);
#endif
void cpu_idle_mode(bool on_off);
int get_cpu_boost_counter(void);
#else
#define FREQ CPU_FREQ
#define set_cpu_frequency(frequency)
#define cpu_boost(on_off)
#define cpu_boost(on_off,location)
#define cpu_boost_id(on_off, id)
#define cpu_idle_mode(on_off)
#define get_cpu_boost_counter()
#define get_cpu_boost_tracker()
#endif
#ifdef CPU_BOOST_LOGGING
#define cpu_boost(on_off) cpu_boost_(on_off,__FILE__, __LINE__)
#endif
#define BAUDRATE 9600
#ifndef NULL

View file

@ -39,9 +39,55 @@ int get_cpu_boost_counter(void)
{
return boost_counter;
}
#ifdef CPU_BOOST_LOGGING
#define MAX_BOOST_LOG 64
static char cpu_boost_calls[MAX_BOOST_LOG][MAX_PATH];
static int cpu_boost_first = 0;
static int cpu_boost_calls_count = 0;
static int cpu_boost_track_message = 0;
int cpu_boost_log_getcount(void)
{
return cpu_boost_calls_count;
}
char * cpu_boost_log_getlog_first(void)
{
if (cpu_boost_calls_count)
{
cpu_boost_track_message = 1;
return cpu_boost_calls[cpu_boost_first];
}
else return NULL;
}
char * cpu_boost_log_getlog_next(void)
{
int message = (cpu_boost_track_message+cpu_boost_first)%MAX_BOOST_LOG;
if (cpu_boost_track_message < cpu_boost_calls_count)
{
cpu_boost_track_message++;
return cpu_boost_calls[message];
}
else return NULL;
}
void cpu_boost_(bool on_off, char* location, int line)
{
if (cpu_boost_calls_count == MAX_BOOST_LOG)
{
cpu_boost_first = (cpu_boost_first+1)%MAX_BOOST_LOG;
cpu_boost_calls_count--;
if (cpu_boost_calls_count < 0)
cpu_boost_calls_count = 0;
}
if (cpu_boost_calls_count < MAX_BOOST_LOG)
{
int message = (cpu_boost_first+cpu_boost_calls_count)%MAX_BOOST_LOG;
snprintf(cpu_boost_calls[message], MAX_PATH,
"%c %s:%d",on_off==true?'B':'U',location,line);
cpu_boost_calls_count++;
}
#else
void cpu_boost(bool on_off)
{
#endif
if(on_off)
{
/* Boost the frequency if not already boosted */