summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Wilgus <wilgus.william@gmail.com>2021-09-28 23:42:33 -0400
committerWilliam Wilgus <me.theuser@yahoo.com>2021-09-30 21:13:22 -0400
commit95b10ac74e7a996b9b1ce7ce88c205e39b67502b (patch)
tree111391688167f6dd7abd46610bc05e4e5bc8a6de
parent5883cb4a5254048d59a2d600b5f63b8d1c06d306 (diff)
Add ability to dump cpu boost log to disk, include thread names
0.) B 0 /rockbox/apps/main.c:405 1.) B 1 /rockbox/firmware/kernel/thread.c thread[dircache]:1508 2.) B 2 /rockbox/apps/tagcache.c:4772 3.) U 3 /rockbox/apps/tagcache.c:4793 add logic to show count after log rolls over clean-up Change-Id: Ibda0a56e5d8d89aa8b7649f4f9fa64eb1ff0e08f
-rw-r--r--apps/debug_menu.c48
-rw-r--r--firmware/kernel/thread.c7
-rw-r--r--firmware/system.c6
3 files changed, 58 insertions, 3 deletions
diff --git a/apps/debug_menu.c b/apps/debug_menu.c
index 800e485ce3..33970da581 100644
--- a/apps/debug_menu.c
+++ b/apps/debug_menu.c
@@ -2242,6 +2242,51 @@ static bool cpu_boost_log(void)
lcd_setfont(FONT_UI);
return false;
}
+
+static bool cpu_boost_log_dump(void)
+{
+ int fd;
+#if CONFIG_RTC
+ struct tm *nowtm;
+ char fname[MAX_PATH];
+#endif
+
+ int count = cpu_boost_log_getcount();
+ char *str = cpu_boost_log_getlog_first();
+
+ splashf(HZ, "Boost Log File Dumped");
+
+ /* nothing to print ? */
+ if(count == 0)
+ return false;
+
+#if CONFIG_RTC
+ nowtm = get_time();
+ snprintf(fname, MAX_PATH, "%s/boostlog_%04d%02d%02d%02d%02d%02d.txt", ROCKBOX_DIR,
+ nowtm->tm_year + 1900, nowtm->tm_mon + 1, nowtm->tm_mday,
+ nowtm->tm_hour, nowtm->tm_min, nowtm->tm_sec);
+ fd = open(fname, O_CREAT|O_WRONLY|O_TRUNC);
+#else
+ fd = open(ROCKBOX_DIR "/boostlog.txt", O_CREAT|O_WRONLY|O_TRUNC, 0666);
+#endif
+ if(-1 != fd) {
+ for (int i = 0; i < count; i++)
+ {
+ if (!str)
+ str = cpu_boost_log_getlog_next();
+ if (str)
+ {
+ fdprintf(fd, "%s\n", str);
+ str = NULL;
+ }
+ }
+
+ close(fd);
+ return true;
+ }
+
+ return false;
+}
#endif
#if (defined(HAVE_WHEEL_ACCELERATION) && (CONFIG_KEYPAD==IPOD_4G_PAD) \
@@ -2604,7 +2649,8 @@ static const struct {
#endif
#endif /* HAVE_USBSTACK */
#ifdef CPU_BOOST_LOGGING
- {"cpu_boost log",cpu_boost_log},
+ {"Show cpu_boost log",cpu_boost_log},
+ {"Dump cpu_boost log",cpu_boost_log_dump},
#endif
#if (defined(HAVE_WHEEL_ACCELERATION) && (CONFIG_KEYPAD==IPOD_4G_PAD) \
&& !defined(IPOD_MINI) && !defined(SIMULATOR))
diff --git a/firmware/kernel/thread.c b/firmware/kernel/thread.c
index 307be7116a..a422624df7 100644
--- a/firmware/kernel/thread.c
+++ b/firmware/kernel/thread.c
@@ -1501,7 +1501,14 @@ static inline void boost_thread(struct thread_entry *thread, bool boost)
if ((thread->cpu_boost != 0) != boost)
{
thread->cpu_boost = boost;
+#ifdef CPU_BOOST_LOGGING
+ const char fmt[] = __FILE__" thread[%s]";
+ char pathbuf[sizeof(fmt) + 32]; /* thread name 32 */
+ snprintf(pathbuf, sizeof(pathbuf), fmt, thread->name);
+ cpu_boost_(boost, pathbuf, __LINE__);
+#else
cpu_boost(boost);
+#endif
}
}
diff --git a/firmware/system.c b/firmware/system.c
index 537e901b05..e2fdff0e59 100644
--- a/firmware/system.c
+++ b/firmware/system.c
@@ -89,6 +89,7 @@ char * cpu_boost_log_getlog_next(void)
void cpu_boost_(bool on_off, char* location, int line)
{
+ int item = cpu_boost_calls_count;
if (!cpu_boost_lock())
return;
@@ -98,12 +99,13 @@ void cpu_boost_(bool on_off, char* location, int line)
cpu_boost_calls_count--;
if (cpu_boost_calls_count < 0)
cpu_boost_calls_count = 0;
+ item += cpu_boost_first;
}
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?'B':'U',location,line);
+ snprintf(cpu_boost_calls[message], MAX_PATH,"%d.) %c %d %s:%d",
+ item,on_off?'B':'U',boost_counter,location,line);
cpu_boost_calls_count++;
}
#else