GSoC/Buflib: Enable compaction in buflib.
commitbaa070cca6d459a7c5aed81f29e4cc4f6c7410b3
authorThomas Martitz <kugel@rockbox.org>
Tue, 30 Aug 2011 14:01:45 +0000 (30 14:01 +0000)
committerThomas Martitz <kugel@rockbox.org>
Tue, 30 Aug 2011 14:01:45 +0000 (30 14:01 +0000)
tree5123360aea420b96e4a97a8e88cf51b4277152d9
parentd0b72e25903574acb1cf9184a6052cdd646dbc37
GSoC/Buflib: Enable compaction in buflib.

This enables the ability to allocate (and free) memory dynamically
without fragmentation, through compaction. This means allocations can move
and fragmentation be reduced. Most changes are preparing Rockbox for this,
which many times means adding a move callback which can temporarily disable
movement when the corresponding code is in a critical section.

For now, the audio buffer allocation has a central role, because it's the one
having allocated most. This buffer is able to shrink itself, for which it
needs to stop playback for a very short moment. For this,
audio_buffer_available() returns the size of the audio buffer which can
possibly be used by other allocations because the audio buffer can shrink.

lastfm scrobbling and timestretch can now be toggled at runtime without
requiring a reboot.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30381 a1c6a512-1295-4272-9138-f99709370657
28 files changed:
apps/debug_menu.c
apps/dsp.c
apps/filetree.c
apps/filetypes.c
apps/main.c
apps/menus/playback_menu.c
apps/mpeg.c
apps/playback.c
apps/playlist.c
apps/playlist.h
apps/plugin.c
apps/plugin.h
apps/plugins/imageviewer/imageviewer.c
apps/plugins/mikmod/mikmod.c
apps/plugins/mpegplayer/mpegplayer.c
apps/plugins/rockpaint.c
apps/scrobbler.c
apps/tagcache.c
apps/tagcache.h
apps/tagtree.c
apps/tagtree.h
apps/tdspeed.c
apps/tdspeed.h
apps/tree.c
apps/tree.h
firmware/buflib.c
firmware/common/dircache.c
firmware/core_alloc.c