summaryrefslogtreecommitdiff
path: root/apps/gui
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2013-02-12 21:00:05 +1100
committerJonathan Gordon <rockbox@jdgordon.info>2013-02-12 21:01:13 +1100
commitaaf30651df27e0eb6fab876502fa1e6c084160bf (patch)
tree57601fbe5e54ed290bc6c966b059af801bd0d1bb /apps/gui
parent69228f92dbddc9940166c0d7af2b4c79d55f85e7 (diff)
downloadrockbox-aaf30651df27e0eb6fab876502fa1e6c084160bf.zip
rockbox-aaf30651df27e0eb6fab876502fa1e6c084160bf.tar.gz
rockbox-aaf30651df27e0eb6fab876502fa1e6c084160bf.tar.bz2
rockbox-aaf30651df27e0eb6fab876502fa1e6c084160bf.tar.xz
skin_engine: Add a debug screen to display skin ram usage
Change-Id: Ida9c33211d9360ac88e30a2cf8df9f191bee8b45
Diffstat (limited to 'apps/gui')
-rw-r--r--apps/gui/bitmap/list.c2
-rw-r--r--apps/gui/skin_engine/skin_backdrops.c19
-rw-r--r--apps/gui/skin_engine/skin_engine.c16
-rw-r--r--apps/gui/skin_engine/skin_engine.h2
-rw-r--r--apps/gui/skin_engine/skin_parser.c12
-rw-r--r--apps/gui/skin_engine/wps_internals.h11
6 files changed, 56 insertions, 6 deletions
diff --git a/apps/gui/bitmap/list.c b/apps/gui/bitmap/list.c
index 191446e..ede0de8 100644
--- a/apps/gui/bitmap/list.c
+++ b/apps/gui/bitmap/list.c
@@ -277,6 +277,7 @@ void list_draw(struct screen *display, struct gui_synclist *list)
list_icons.x += indent;
list_text_vp->x += indent;
}
+ list_icons.width -= indent;
list_text_vp->width -= indent;
}
@@ -392,6 +393,7 @@ void list_draw(struct screen *display, struct gui_synclist *list)
list_icons.x -= indent;
list_text_vp->x -= indent;
}
+ list_icons.width += indent;
list_text_vp->width += indent;
}
}
diff --git a/apps/gui/skin_engine/skin_backdrops.c b/apps/gui/skin_engine/skin_backdrops.c
index 0d3c8b6..4d0345c 100644
--- a/apps/gui/skin_engine/skin_backdrops.c
+++ b/apps/gui/skin_engine/skin_backdrops.c
@@ -44,6 +44,25 @@ static struct skin_backdrop {
static int handle_being_loaded;
static int current_lcd_backdrop[NB_SCREENS];
+bool skin_backdrop_get_debug(int index, char **path, int *ref_count, size_t *size)
+{
+
+ if (index + 1 >= NB_BDROPS)
+ return false;
+
+ *path = backdrops[index].name;
+ *ref_count = backdrops[index].ref_count;
+
+#if defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1)
+ enum screen_type screen = backdrops[index].screen;
+ if (screen == SCREEN_REMOTE)
+ *size = REMOTE_LCD_BACKDROP_BYTES;
+ else
+#endif
+ *size = LCD_BACKDROP_BYTES;
+ return true;
+}
+
static int buflib_move_callback(int handle, void* current, void* new)
{
if (handle == handle_being_loaded)
diff --git a/apps/gui/skin_engine/skin_engine.c b/apps/gui/skin_engine/skin_engine.c
index 3c3f322..4c113e5 100644
--- a/apps/gui/skin_engine/skin_engine.c
+++ b/apps/gui/skin_engine/skin_engine.c
@@ -65,11 +65,21 @@ static struct gui_skin_helper {
static struct gui_skin {
struct gui_wps gui_wps;
struct wps_data data;
+ struct skin_stats stats;
bool failsafe_loaded;
bool needs_full_update;
} skins[SKINNABLE_SCREENS_COUNT][NB_SCREENS];
+int skin_get_num_skins(void)
+{
+ return SKINNABLE_SCREENS_COUNT;
+}
+
+struct skin_stats *skin_get_stats(int number, int screen)
+{
+ return &skins[number][screen].stats;
+}
static void gui_skin_reset(struct gui_skin *skin)
{
@@ -167,12 +177,14 @@ void skin_load(enum skinnable_screens skin, enum screen_type screen,
skin_helpers[skin].preproccess(screen, &skins[skin][screen].data);
if (buf && *buf)
- loaded = skin_data_load(screen, &skins[skin][screen].data, buf, isfile);
+ loaded = skin_data_load(screen, &skins[skin][screen].data, buf, isfile,
+ &skins[skin][screen].stats);
if (!loaded && skin_helpers[skin].default_skin)
{
loaded = skin_data_load(screen, &skins[skin][screen].data,
- skin_helpers[skin].default_skin(screen), false);
+ skin_helpers[skin].default_skin(screen), false,
+ &skins[skin][screen].stats);
skins[skin][screen].failsafe_loaded = loaded;
}
diff --git a/apps/gui/skin_engine/skin_engine.h b/apps/gui/skin_engine/skin_engine.h
index 07fafe6..59e00b5 100644
--- a/apps/gui/skin_engine/skin_engine.h
+++ b/apps/gui/skin_engine/skin_engine.h
@@ -57,7 +57,7 @@ void skin_update(enum skinnable_screens skin, enum screen_type screen,
* or from a skinfile (isfile = true)
*/
bool skin_data_load(enum screen_type screen, struct wps_data *wps_data,
- const char *buf, bool isfile);
+ const char *buf, bool isfile, struct skin_stats *stats);
bool skin_has_sbs(enum screen_type screen, struct wps_data *data);
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c
index adfda54..cb185d8 100644
--- a/apps/gui/skin_engine/skin_parser.c
+++ b/apps/gui/skin_engine/skin_parser.c
@@ -83,6 +83,7 @@ static char* skin_buffer = NULL;
#if (LCD_DEPTH > 1) || (defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1))
static char *backdrop_filename;
#endif
+static struct skin_stats *_stats = NULL;
static bool isdefault(struct skin_tag_parameter *param)
{
@@ -1770,6 +1771,8 @@ static int load_skin_bmp(struct wps_data *wps_data, struct bitmap *bitmap, char*
close(fd);
return handle;
}
+ _stats->buflib_handles++;
+ _stats->images_size += buf_size;
lseek(fd, 0, SEEK_SET);
lock_handle(handle);
bitmap->data = core_get_data(handle);
@@ -2282,7 +2285,7 @@ static int skin_element_callback(struct skin_element* element, void* data)
/* to setup up the wps-data from a format-buffer (isfile = false)
from a (wps-)file (isfile = true)*/
bool skin_data_load(enum screen_type screen, struct wps_data *wps_data,
- const char *buf, bool isfile)
+ const char *buf, bool isfile, struct skin_stats *stats)
{
char *wps_buffer = NULL;
if (!wps_data || !buf)
@@ -2315,8 +2318,9 @@ bool skin_data_load(enum screen_type screen, struct wps_data *wps_data,
}
#endif
-
- /* get buffer space from the plugin buffer */
+ _stats = stats;
+ skin_clear_stats(stats);
+ /* get buffer space from the plugin buffer */
size_t buffersize = 0;
wps_buffer = (char *)plugin_get_buffer(&buffersize);
@@ -2426,6 +2430,8 @@ bool skin_data_load(enum screen_type screen, struct wps_data *wps_data,
wps_data->wps_loaded = true;
memcpy(core_get_data(wps_data->buflib_handle), skin_buffer,
skin_buffer_usage());
+ stats->buflib_handles++;
+ stats->tree_size = skin_buffer_usage();
}
#else
wps_data->wps_loaded = wps_data->tree >= 0;
diff --git a/apps/gui/skin_engine/wps_internals.h b/apps/gui/skin_engine/wps_internals.h
index 72bab9b..c9d5429 100644
--- a/apps/gui/skin_engine/wps_internals.h
+++ b/apps/gui/skin_engine/wps_internals.h
@@ -31,6 +31,17 @@
#include "core_alloc.h"
#endif
+struct skin_stats {
+ size_t buflib_handles;
+ size_t tree_size;
+ size_t images_size;
+};
+
+int skin_get_num_skins(void);
+struct skin_stats *skin_get_stats(int number, int screen);
+#define skin_clear_stats(stats) memset(stats, 0, sizeof(struct skin_stats))
+bool skin_backdrop_get_debug(int index, char **path, int *ref_count, size_t *size);
+
/* Timeout unit expressed in HZ. In WPS, all timeouts are given in seconds
(possibly with a decimal fraction) but stored as integer values.
E.g. 2.5 is stored as 25. This means 25 tenth of a second, i.e. 25 units.