From f8c68c7912da50451167fe4bcfd69717f2a30c98 Mon Sep 17 00:00:00 2001 From: Jonathan Gordon Date: Mon, 22 Jan 2007 10:41:25 +0000 Subject: 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 --- firmware/export/system.h | 18 +++++++++++++++++- firmware/system.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 64 insertions(+), 2 deletions(-) (limited to 'firmware') diff --git a/firmware/export/system.h b/firmware/export/system.h index 688cf9bc15..6b53b88639 100644 --- a/firmware/export/system.h +++ b/firmware/export/system.h @@ -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 diff --git a/firmware/system.c b/firmware/system.c index c9ce086f0a..49f01df0cd 100644 --- a/firmware/system.c +++ b/firmware/system.c @@ -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 */ -- cgit v1.2.3