[prev in list] [next in list] [prev in thread] [next in thread] 

List:       rockbox-cvs
Subject:    jdgordon: r30599 - in trunk/apps: . gui/skin_engine
From:       mailer () svn ! rockbox ! org
Date:       2011-09-25 12:55:41
Message-ID: 201109251255.p8PCtfP4007505 () giant ! haxx ! se
[Download RAW message or body]

Date: 2011-09-25 14:55:40 +0200 (Sun, 25 Sep 2011)
New Revision: 30599

Log Message:
Check for the magic file "/.rockbox/skin_buffer_size.txt" on bootup which can have a \
number which is the amount of kilobytes to allocate for the skin buffer. This is only \
checked on boot so if you need to change it you must reboot to enable. Currently the \
default size is 80KB on colour targets which can be way too much or not enough for \
users. The format of the /.rockbox/skin_buffer_size.txt file is simply a number (so \
120 if you want 120 kilobytes), NO trainling spaces or text of any kind

Modified:
   trunk/apps/gui/skin_engine/skin_engine.c
   trunk/apps/main.c

Modified: trunk/apps/gui/skin_engine/skin_engine.c
===================================================================
--- trunk/apps/gui/skin_engine/skin_engine.c	2011-09-25 12:19:33 UTC (rev 30598)
+++ trunk/apps/gui/skin_engine/skin_engine.c	2011-09-25 12:55:40 UTC (rev 30599)
@@ -25,6 +25,7 @@
 #include <limits.h>
 #include "inttypes.h"
 #include "config.h"
+#include "core_alloc.h"
 #include "action.h"
 #include "crc32.h"
 #include "settings.h"
@@ -48,9 +49,31 @@
     skins_initialising = false;
 }
 #else
-static char skin_buffer[SKIN_BUFFER_SIZE];
+static size_t skin_buffer_size;
+static char *skin_buffer = NULL;
+static int buflib_move_callback(int handle, void* current, void* new)
+{
+    (void)current;
+    (void)new;
+    return BUFLIB_CB_CANNOT_MOVE;
+}
+static struct buflib_callbacks buflib_ops = {buflib_move_callback, NULL};
+
 void theme_init_buffer(void)
 {
+    int fd;
+    size_t size = SKIN_BUFFER_SIZE;
+    fd = open_utf8(ROCKBOX_DIR "/skin_buffer_size.txt", O_RDONLY);
+    if (fd >= 0)
+    {
+        char buf[32];
+        read(fd, buf, sizeof(buf));
+        if (buf[0] >= '0' && buf[0] <= '9')
+            size = atoi(buf)*1024;
+        close(fd);
+    }
+    skin_buffer = core_get_data(core_alloc_ex("skin buffer", size, &buflib_ops));
+    skin_buffer_size = size;
     skins_initialising = false;
 }
 #endif
@@ -113,7 +136,7 @@
             skin_data_free_buflib_allocs(&skins[j][i].data);
     }
 
-    skin_buffer_init(skin_buffer, SKIN_BUFFER_SIZE);
+    skin_buffer_init(skin_buffer, skin_buffer_size);
     
 #ifdef HAVE_LCD_BITMAP
     skin_backdrop_init();

Modified: trunk/apps/main.c
===================================================================
--- trunk/apps/main.c	2011-09-25 12:19:33 UTC (rev 30598)
+++ trunk/apps/main.c	2011-09-25 12:55:40 UTC (rev 30599)
@@ -350,6 +350,9 @@
 #ifdef HAVE_REMOTE_LCD
     lcd_remote_init();
 #endif
+    /* This init call allocates an *unmovable* block so must be
+     * before any other moveable allocs. */
+    theme_init_buffer();
 #ifdef HAVE_LCD_BITMAP
     FOR_NB_SCREENS(i)
         global_status.font_id[i] = FONT_SYSFIXED;
@@ -390,7 +393,6 @@
     tree_mem_init();
     filetype_init();
     playlist_init();
-    theme_init_buffer();
 
 #if CONFIG_CODEC != SWCODEC
     mp3_init( global_settings.volume,
@@ -439,8 +441,11 @@
 #endif
     cpu_boost(true);
 #endif
-    
 
+    /* This init call allocates an *unmovable* block so must be
+     * before any other moveable allocs. */
+    theme_init_buffer();
+
     settings_reset();
 
     i2c_init();

_______________________________________________
rockbox-cvs mailing list
rockbox-cvs@cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/rockbox-cvs


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic