1
0
Fork 0
forked from len0rd/rockbox

get the skin debug output working again, add a line to say how much of the buffer is being used to aid themers... let me know if this gets close to full on any targets

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22420 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jonathan Gordon 2009-08-19 05:07:12 +00:00
parent 061b7ebcc8
commit c552d08573
2 changed files with 44 additions and 68 deletions

View file

@ -99,6 +99,7 @@ static const char *bmp_names[MAX_BITMAPS];
#if defined(DEBUG) || defined(SIMULATOR) #if defined(DEBUG) || defined(SIMULATOR)
/* debugging function */ /* debugging function */
extern void print_debug_info(struct wps_data *data, int fail, int line); extern void print_debug_info(struct wps_data *data, int fail, int line);
extern void debug_skin_usage(void);
#endif #endif
static void wps_reset(struct wps_data *data); static void wps_reset(struct wps_data *data);
@ -1275,7 +1276,7 @@ static int parse_token(const char *wps_bufptr, struct wps_data *wps_data)
It is initialised. It is initialised.
wps_bufptr points to the string containing the WPS tags */ wps_bufptr points to the string containing the WPS tags */
#define TOKEN_BLOCK_SIZE 128 #define TOKEN_BLOCK_SIZE 128
static bool wps_parse(struct wps_data *data, const char *wps_bufptr) static bool wps_parse(struct wps_data *data, const char *wps_bufptr, bool debug)
{ {
if (!data || !wps_bufptr || !*wps_bufptr) if (!data || !wps_bufptr || !*wps_bufptr)
return false; return false;
@ -1515,7 +1516,10 @@ static bool wps_parse(struct wps_data *data, const char *wps_bufptr)
curr_vp->last_line = data->num_lines - 1; curr_vp->last_line = data->num_lines - 1;
#if defined(DEBUG) || defined(SIMULATOR) #if defined(DEBUG) || defined(SIMULATOR)
print_debug_info(data, fail, line); if (debug)
print_debug_info(data, fail, line);
#else
(void)debug;
#endif #endif
return (fail == 0); return (fail == 0);
@ -1683,7 +1687,7 @@ bool skin_data_load(struct wps_data *wps_data,
#endif #endif
if (!isfile) if (!isfile)
{ {
return wps_parse(wps_data, buf); return wps_parse(wps_data, buf, false);
} }
else else
{ {
@ -1744,7 +1748,7 @@ bool skin_data_load(struct wps_data *wps_data,
#endif #endif
/* parse the WPS source */ /* parse the WPS source */
if (!wps_parse(wps_data, wps_buffer)) { if (!wps_parse(wps_data, wps_buffer, true)) {
wps_reset(wps_data); wps_reset(wps_data);
return false; return false;
} }
@ -1778,6 +1782,9 @@ bool skin_data_load(struct wps_data *wps_data,
if (!(status & AUDIO_STATUS_PAUSE)) if (!(status & AUDIO_STATUS_PAUSE))
audio_play(offset); audio_play(offset);
} }
#endif
#if defined(DEBUG) || defined(SIMULATOR)
debug_skin_usage();
#endif #endif
return true; return true;
} }

View file

@ -25,6 +25,7 @@
#include <string.h> #include <string.h>
#include "wps.h" #include "wps.h"
#include "wps_internals.h" #include "wps_internals.h"
#include "skin_buffer.h"
#ifdef __PCTOOL__ #ifdef __PCTOOL__
#ifdef WPSEDITOR #ifdef WPSEDITOR
#include "proxy.h" #include "proxy.h"
@ -44,8 +45,7 @@ static char *next_str(bool next) {
return next ? "next " : ""; return next ? "next " : "";
} }
static char *get_token_desc(struct wps_token *token, struct wps_data *data, static char *get_token_desc(struct wps_token *token, char *buf, int bufsize)
char *buf, int bufsize)
{ {
bool next = token->next; bool next = token->next;
@ -66,7 +66,7 @@ static char *get_token_desc(struct wps_token *token, struct wps_data *data,
case WPS_TOKEN_STRING: case WPS_TOKEN_STRING:
snprintf(buf, bufsize, "String '%s'", snprintf(buf, bufsize, "String '%s'",
data->strings[token->value.i]); (char*)token->value.data);
break; break;
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
@ -452,18 +452,14 @@ static void dump_wps_tokens(struct wps_data *data)
int i, j; int i, j;
int indent = 0; int indent = 0;
char buf[64]; char buf[64];
int num_string_tokens = 0;
/* Dump parsed WPS */ /* Dump parsed WPS */
for (i = 0, token = data->tokens; i < data->num_tokens; i++, token++) for (i = 0, token = data->tokens; i < data->num_tokens; i++, token++)
{ {
get_token_desc(token, data, buf, sizeof(buf)); get_token_desc(token, buf, sizeof(buf));
switch(token->type) switch(token->type)
{ {
case WPS_TOKEN_STRING:
num_string_tokens++;
break;
case WPS_TOKEN_CONDITIONAL_START: case WPS_TOKEN_CONDITIONAL_START:
indent++; indent++;
@ -486,29 +482,24 @@ static void dump_wps_tokens(struct wps_data *data)
DEBUGF("[%3d] = (%2d) %s\n", i, token->type, buf); DEBUGF("[%3d] = (%2d) %s\n", i, token->type, buf);
} }
} }
if (wps_verbose_level > 0)
{
DEBUGF("\n");
DEBUGF("Number of string tokens: %d\n", num_string_tokens);
DEBUGF("\n");
}
} }
#if 0
/* NOTE: this is probaly not even needed anymore */
static void print_line_info(struct wps_data *data) static void print_line_info(struct wps_data *data)
{ {
int i, j, v; int i, j;
struct wps_line *line; struct wps_line *line;
struct wps_subline *subline; struct wps_subline *subline;
if (wps_verbose_level > 0) if (wps_verbose_level > 0)
{ {
DEBUGF("Number of viewports : %d\n", data->num_viewports); struct skin_token_list *viewport_list;
for (v = 0; v < data->num_viewports; v++) for (viewport_list = data->viewports;
viewport_list; viewport_list = viewport_list->next)
{ {
DEBUGF("vp %d: First line: %d\n", v, data->viewports[v].first_line); struct skin_viewport *v =
DEBUGF("vp %d: Last line: %d\n", v, data->viewports[v].last_line); (struct skin_viewport *)viewport_list->token->value.data;
DEBUGF("vp Label:'%c' Hidden flags:%x\n", v->label, v->hidden_flags);
DEBUGF(" First line: %d\n", v->first_line);
DEBUGF(" Last line: %d\n", v->last_line);
} }
DEBUGF("Number of sublines : %d\n", data->num_sublines); DEBUGF("Number of sublines : %d\n", data->num_sublines);
DEBUGF("Number of tokens : %d\n", data->num_tokens); DEBUGF("Number of tokens : %d\n", data->num_tokens);
@ -517,13 +508,15 @@ static void print_line_info(struct wps_data *data)
if (wps_verbose_level > 1) if (wps_verbose_level > 1)
{ {
for (v = 0; v < data->num_viewports; v++) struct skin_token_list *viewport_list;
for (viewport_list = data->viewports;
viewport_list; viewport_list = viewport_list->next)
{ {
DEBUGF("Viewport %d - +%d+%d (%dx%d)\n",v,data->viewports[v].vp.x, struct skin_viewport *v =
data->viewports[v].vp.y, (struct skin_viewport *)viewport_list->token->value.data;
data->viewports[v].vp.width, DEBUGF("Viewport '%c' - +%d+%d (%dx%d)\n",v->label, v->vp.x, v->vp.y,
data->viewports[v].vp.height); v->vp.width, v->vp.height);
for (i = data->viewports[v].first_line, line = &data->lines[data->viewports[v].first_line]; i <= data->viewports[v].last_line; i++,line++) for (i = v->first_line, line = &data->lines[v->first_line]; i <= v->last_line; i++,line++)
{ {
DEBUGF("Line %2d (num_sublines=%d, first_subline=%d)\n", DEBUGF("Line %2d (num_sublines=%d, first_subline=%d)\n",
i, line->num_sublines, line->first_subline_idx); i, line->num_sublines, line->first_subline_idx);
@ -550,34 +543,6 @@ static void print_line_info(struct wps_data *data)
DEBUGF("\n"); DEBUGF("\n");
} }
} }
static void print_wps_strings(struct wps_data *data)
{
int i, len, total_len = 0, buf_used = 0;
if (wps_verbose_level > 1) DEBUGF("Strings:\n");
struct skin_token_list *strings = data->strings;
while (strings)
{
char* str = (char*)strings->token->value.data;
len = strlen(str);
total_len += len;
buf_used += len + 1;
if (wps_verbose_level > 1)
DEBUGF("%2d: (%2d) '%s'\n", i, len, data->strings[i]);
}
if (wps_verbose_level > 1) DEBUGF("\n");
if (wps_verbose_level > 0)
{
DEBUGF("Number of unique strings: %d (max: %d)\n",
data->num_strings, WPS_MAX_STRINGS);
DEBUGF("Total string length: %d\n", total_len);
DEBUGF("String buffer used: %d out of %d bytes\n",
buf_used, STRING_BUFFER_SIZE);
DEBUGF("\n");
}
}
#endif
#endif #endif
void print_debug_info(struct wps_data *data, enum wps_parse_error fail, int line) void print_debug_info(struct wps_data *data, enum wps_parse_error fail, int line)
@ -586,8 +551,7 @@ void print_debug_info(struct wps_data *data, enum wps_parse_error fail, int line
if (debug_wps && wps_verbose_level) if (debug_wps && wps_verbose_level)
{ {
dump_wps_tokens(data); dump_wps_tokens(data);
/* print_wps_strings(data); */ print_line_info(data);
/* print_line_info(data); */
} }
#endif /* SIMULATOR */ #endif /* SIMULATOR */
@ -613,24 +577,21 @@ void print_debug_info(struct wps_data *data, enum wps_parse_error fail, int line
case PARSE_FAIL_INVALID_CHAR: case PARSE_FAIL_INVALID_CHAR:
DEBUGF("ERR: Unexpected conditional char after token %d: \"%s\"", DEBUGF("ERR: Unexpected conditional char after token %d: \"%s\"",
data->num_tokens-1, data->num_tokens-1,
get_token_desc(&data->tokens[data->num_tokens-1], data, get_token_desc(&data->tokens[data->num_tokens-1], buf, sizeof(buf))
buf, sizeof(buf))
); );
break; break;
case PARSE_FAIL_COND_SYNTAX_ERROR: case PARSE_FAIL_COND_SYNTAX_ERROR:
DEBUGF("ERR: Conditional syntax error after token %d: \"%s\"", DEBUGF("ERR: Conditional syntax error after token %d: \"%s\"",
data->num_tokens-1, data->num_tokens-1,
get_token_desc(&data->tokens[data->num_tokens-1], data, get_token_desc(&data->tokens[data->num_tokens-1], buf, sizeof(buf))
buf, sizeof(buf))
); );
break; break;
case PARSE_FAIL_COND_INVALID_PARAM: case PARSE_FAIL_COND_INVALID_PARAM:
DEBUGF("ERR: Invalid parameter list for token %d: \"%s\"", DEBUGF("ERR: Invalid parameter list for token %d: \"%s\"",
data->num_tokens, data->num_tokens,
get_token_desc(&data->tokens[data->num_tokens], data, get_token_desc(&data->tokens[data->num_tokens], buf, sizeof(buf))
buf, sizeof(buf))
); );
break; break;
@ -642,4 +603,12 @@ void print_debug_info(struct wps_data *data, enum wps_parse_error fail, int line
} }
} }
void debug_skin_usage(void)
{
if (wps_verbose_level > 1)
DEBUGF("Skin buffer usage: %ld/%ld\n", skin_buffer_usage(),
skin_buffer_usage() + skin_buffer_freespace());
}
#endif /* DEBUG || SIMULATOR */ #endif /* DEBUG || SIMULATOR */