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:
parent
a3a303e440
commit
f8c68c7912
7 changed files with 133 additions and 3 deletions
|
@ -131,8 +131,12 @@ struct codec_api ci = {
|
||||||
system_memory_guard,
|
system_memory_guard,
|
||||||
&cpu_frequency,
|
&cpu_frequency,
|
||||||
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
|
#ifdef CPU_BOOST_LOGGING
|
||||||
|
cpu_boost_,
|
||||||
|
#else
|
||||||
cpu_boost,
|
cpu_boost,
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* strings and memory */
|
/* strings and memory */
|
||||||
|
|
|
@ -209,8 +209,12 @@ struct codec_api {
|
||||||
int (*system_memory_guard)(int newmode);
|
int (*system_memory_guard)(int newmode);
|
||||||
long *cpu_frequency;
|
long *cpu_frequency;
|
||||||
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
#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);
|
void (*cpu_boost)(bool on_off);
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* strings and memory */
|
/* strings and memory */
|
||||||
|
|
|
@ -2237,7 +2237,55 @@ static bool dbg_write_eeprom(void)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif /* defined(HAVE_EEPROM) && !defined(HAVE_EEPROM_SETTINGS) */
|
#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)
|
bool debug_menu(void)
|
||||||
{
|
{
|
||||||
int m;
|
int m;
|
||||||
|
@ -2311,6 +2359,9 @@ bool debug_menu(void)
|
||||||
#ifdef ROCKBOX_HAS_LOGF
|
#ifdef ROCKBOX_HAS_LOGF
|
||||||
{"logf", logfdisplay },
|
{"logf", logfdisplay },
|
||||||
{"logfdump", logfdump },
|
{"logfdump", logfdump },
|
||||||
|
#endif
|
||||||
|
#ifdef CPU_BOOST_LOGGING
|
||||||
|
{"cpu_boost log",cpu_boost_log},
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -250,8 +250,13 @@ static const struct plugin_api rockbox_api = {
|
||||||
#ifndef SIMULATOR
|
#ifndef SIMULATOR
|
||||||
system_memory_guard,
|
system_memory_guard,
|
||||||
&cpu_frequency,
|
&cpu_frequency,
|
||||||
|
|
||||||
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
|
#ifdef CPU_BOOST_LOGGING
|
||||||
|
cpu_boost_,
|
||||||
|
#else
|
||||||
cpu_boost,
|
cpu_boost,
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
timer_register,
|
timer_register,
|
||||||
timer_unregister,
|
timer_unregister,
|
||||||
|
|
|
@ -344,7 +344,11 @@ struct plugin_api {
|
||||||
int (*system_memory_guard)(int newmode);
|
int (*system_memory_guard)(int newmode);
|
||||||
long *cpu_frequency;
|
long *cpu_frequency;
|
||||||
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
#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);
|
void (*cpu_boost)(bool on_off);
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
bool (*timer_register)(int reg_prio, void (*unregister_callback)(void),
|
bool (*timer_register)(int reg_prio, void (*unregister_callback)(void),
|
||||||
long cycles, int int_prio,
|
long cycles, int int_prio,
|
||||||
|
|
|
@ -56,22 +56,38 @@ bool detect_flashed_romimage(void);
|
||||||
bool detect_flashed_ramimage(void);
|
bool detect_flashed_ramimage(void);
|
||||||
bool detect_original_firmware(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
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
#define FREQ cpu_frequency
|
#define FREQ cpu_frequency
|
||||||
void set_cpu_frequency(long 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);
|
void cpu_boost(bool on_off);
|
||||||
|
#endif
|
||||||
void cpu_idle_mode(bool on_off);
|
void cpu_idle_mode(bool on_off);
|
||||||
int get_cpu_boost_counter(void);
|
int get_cpu_boost_counter(void);
|
||||||
#else
|
#else
|
||||||
#define FREQ CPU_FREQ
|
#define FREQ CPU_FREQ
|
||||||
#define set_cpu_frequency(frequency)
|
#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_boost_id(on_off, id)
|
||||||
#define cpu_idle_mode(on_off)
|
#define cpu_idle_mode(on_off)
|
||||||
#define get_cpu_boost_counter()
|
#define get_cpu_boost_counter()
|
||||||
#define get_cpu_boost_tracker()
|
#define get_cpu_boost_tracker()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CPU_BOOST_LOGGING
|
||||||
|
#define cpu_boost(on_off) cpu_boost_(on_off,__FILE__, __LINE__)
|
||||||
|
#endif
|
||||||
|
|
||||||
#define BAUDRATE 9600
|
#define BAUDRATE 9600
|
||||||
|
|
||||||
#ifndef NULL
|
#ifndef NULL
|
||||||
|
|
|
@ -39,9 +39,55 @@ int get_cpu_boost_counter(void)
|
||||||
{
|
{
|
||||||
return boost_counter;
|
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)
|
void cpu_boost(bool on_off)
|
||||||
{
|
{
|
||||||
|
#endif
|
||||||
if(on_off)
|
if(on_off)
|
||||||
{
|
{
|
||||||
/* Boost the frequency if not already boosted */
|
/* Boost the frequency if not already boosted */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue