summaryrefslogtreecommitdiff
path: root/apps/debug_menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/debug_menu.c')
-rw-r--r--apps/debug_menu.c68
1 files changed, 15 insertions, 53 deletions
diff --git a/apps/debug_menu.c b/apps/debug_menu.c
index bc2a73fc9c..a11cff9350 100644
--- a/apps/debug_menu.c
+++ b/apps/debug_menu.c
@@ -133,69 +133,44 @@
133 133
134#include "talk.h" 134#include "talk.h"
135 135
136/*---------------------------------------------------*/
137/* SPECIAL DEBUG STUFF */
138/*---------------------------------------------------*/
139extern struct thread_entry threads[MAXTHREADS];
140
141static char thread_status_char(unsigned status)
142{
143 static const char thread_status_chars[THREAD_NUM_STATES+1] =
144 {
145 [0 ... THREAD_NUM_STATES] = '?',
146 [STATE_RUNNING] = 'R',
147 [STATE_BLOCKED] = 'B',
148 [STATE_SLEEPING] = 'S',
149 [STATE_BLOCKED_W_TMO] = 'T',
150 [STATE_FROZEN] = 'F',
151 [STATE_KILLED] = 'K',
152 };
153
154 if (status > THREAD_NUM_STATES)
155 status = THREAD_NUM_STATES;
156
157 return thread_status_chars[status];
158}
159
160static const char* threads_getname(int selected_item, void *data, 136static const char* threads_getname(int selected_item, void *data,
161 char *buffer, size_t buffer_len) 137 char *buffer, size_t buffer_len)
162{ 138{
163 (void)data; 139 (void)data;
164 struct thread_entry *thread;
165 char name[32];
166 140
167#if NUM_CORES > 1 141#if NUM_CORES > 1
168 if (selected_item < (int)NUM_CORES) 142 if (selected_item < (int)NUM_CORES)
169 { 143 {
144 struct core_debug_info coreinfo;
145 core_get_debug_info(selected_item, &coreinfo);
170 snprintf(buffer, buffer_len, "Idle (%d): %2d%%", selected_item, 146 snprintf(buffer, buffer_len, "Idle (%d): %2d%%", selected_item,
171 idle_stack_usage(selected_item)); 147 coreinfo.idle_stack_usage);
172 return buffer; 148 return buffer;
173 } 149 }
174 150
175 selected_item -= NUM_CORES; 151 selected_item -= NUM_CORES;
176#endif 152#endif
177 153
178 thread = &threads[selected_item]; 154 struct thread_debug_info threadinfo;
179 155 if (thread_get_debug_info(selected_item, &threadinfo) <= 0)
180 if (thread->state == STATE_KILLED)
181 { 156 {
182 snprintf(buffer, buffer_len, "%2d: ---", selected_item); 157 snprintf(buffer, buffer_len, "%2d: ---", selected_item);
183 return buffer; 158 return buffer;
184 } 159 }
185 160
186 thread_get_name(name, 32, thread);
187
188 snprintf(buffer, buffer_len, 161 snprintf(buffer, buffer_len,
189 "%2d: " IF_COP("(%d) ") "%c%c " IF_PRIO("%d %d ") "%2d%% %s", 162 "%2d: " IF_COP("(%d) ") "%s " IF_PRIO("%d %d ") "%2d%% %s",
190 selected_item, 163 selected_item,
191 IF_COP(thread->core,) 164#if NUM_CORES > 1
192#ifdef HAVE_SCHEDULER_BOOSTCTRL 165 threadinfo.core,
193 (thread->cpu_boost) ? '+' : 166#endif
167 threadinfo.statusstr,
168#ifdef HAVE_PRIORITY_SCHEDULING
169 threadinfo.base_priority,
170 threadinfo.current_priority,
194#endif 171#endif
195 ((thread->state == STATE_RUNNING) ? '*' : ' '), 172 threadinfo.stack_usage,
196 thread_status_char(thread->state), 173 threadinfo.name);
197 IF_PRIO(thread->base_priority, thread->priority, )
198 thread_stack_usage(thread), name);
199 174
200 return buffer; 175 return buffer;
201} 176}
@@ -203,19 +178,6 @@ static const char* threads_getname(int selected_item, void *data,
203static int dbg_threads_action_callback(int action, struct gui_synclist *lists) 178static int dbg_threads_action_callback(int action, struct gui_synclist *lists)
204{ 179{
205 (void)lists; 180 (void)lists;
206#ifdef ROCKBOX_HAS_LOGF
207 if (action == ACTION_STD_OK)
208 {
209 int selpos = gui_synclist_get_sel_pos(lists);
210#if NUM_CORES > 1
211 if (selpos >= NUM_CORES)
212 remove_thread(threads[selpos - NUM_CORES].id);
213#else
214 remove_thread(threads[selpos].id);
215#endif
216 return ACTION_REDRAW;
217 }
218#endif /* ROCKBOX_HAS_LOGF */
219 if (action == ACTION_NONE) 181 if (action == ACTION_NONE)
220 action = ACTION_REDRAW; 182 action = ACTION_REDRAW;
221 return action; 183 return action;