mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-13 18:17:39 -04:00
Provide "quick" option for loading database into RAM
The directory cache and the database's Load to RAM feature each result in a much better user experience. But, when both features are enabled at the same time, it can take a very long time on older players - easily several minutes for larger libraries - until all of the database's dircache references have been updated. Include a 'Quick' option that causes the database to ignore dircache references which can *significantly* reduce disk activity after booting. Change-Id: I25ae779c97d03885b06d5a28d8be55c0d05692a5
This commit is contained in:
parent
4a52147122
commit
3ce3b102dd
5 changed files with 45 additions and 6 deletions
|
@ -16669,3 +16669,17 @@
|
||||||
*: "Remove Queued Tracks?"
|
*: "Remove Queued Tracks?"
|
||||||
</voice>
|
</voice>
|
||||||
</phrase>
|
</phrase>
|
||||||
|
<phrase>
|
||||||
|
id: LANG_QUICK_IGNORE_DIRACHE
|
||||||
|
desc: in Settings
|
||||||
|
user: core
|
||||||
|
<source>
|
||||||
|
*: "Quick (Ignore Directory Cache)"
|
||||||
|
</source>
|
||||||
|
<dest>
|
||||||
|
*: "Quick (Ignore Directory Cache)"
|
||||||
|
</dest>
|
||||||
|
<voice>
|
||||||
|
*: "Quick (Ignore Directory Cache)"
|
||||||
|
</voice>
|
||||||
|
</phrase>
|
||||||
|
|
|
@ -136,6 +136,13 @@ enum
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
TAGCACHE_RAM_OFF = 0,
|
||||||
|
TAGCACHE_RAM_ON = 1,
|
||||||
|
TAGCACHE_RAM_QUICK = 2
|
||||||
|
};
|
||||||
|
|
||||||
/* dir filter options */
|
/* dir filter options */
|
||||||
/* Note: Any new filter modes need to be added before NUM_FILTER_MODES.
|
/* Note: Any new filter modes need to be added before NUM_FILTER_MODES.
|
||||||
* Any new rockbox browse filter modes (accessible through the menu)
|
* Any new rockbox browse filter modes (accessible through the menu)
|
||||||
|
@ -576,7 +583,7 @@ struct user_settings
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_TAGCACHE
|
#ifdef HAVE_TAGCACHE
|
||||||
#ifdef HAVE_TC_RAMCACHE
|
#ifdef HAVE_TC_RAMCACHE
|
||||||
bool tagcache_ram; /* load tagcache to ram? */
|
int tagcache_ram; /* load tagcache to ram: 1=on, 2=quick (ignore dircache) */
|
||||||
#endif
|
#endif
|
||||||
bool tagcache_autoupdate; /* automatically keep tagcache in sync? */
|
bool tagcache_autoupdate; /* automatically keep tagcache in sync? */
|
||||||
bool autoresume_enable; /* enable auto-resume feature? */
|
bool autoresume_enable; /* enable auto-resume feature? */
|
||||||
|
|
|
@ -1813,7 +1813,10 @@ const struct settings_list settings[] = {
|
||||||
|
|
||||||
#ifdef HAVE_TAGCACHE
|
#ifdef HAVE_TAGCACHE
|
||||||
#ifdef HAVE_TC_RAMCACHE
|
#ifdef HAVE_TC_RAMCACHE
|
||||||
OFFON_SETTING(F_BANFROMQS,tagcache_ram,LANG_TAGCACHE_RAM,false,"tagcache_ram",NULL),
|
CHOICE_SETTING(F_BANFROMQS, tagcache_ram, LANG_TAGCACHE_RAM,
|
||||||
|
0, "tagcache_ram", "off,on,quick",
|
||||||
|
NULL, 3,
|
||||||
|
ID2P(LANG_OFF), ID2P(LANG_ON), ID2P(LANG_QUICK_IGNORE_DIRACHE)),
|
||||||
#endif
|
#endif
|
||||||
OFFON_SETTING(F_BANFROMQS, tagcache_autoupdate, LANG_TAGCACHE_AUTOUPDATE, false,
|
OFFON_SETTING(F_BANFROMQS, tagcache_autoupdate, LANG_TAGCACHE_AUTOUPDATE, false,
|
||||||
"tagcache_autoupdate", NULL),
|
"tagcache_autoupdate", NULL),
|
||||||
|
|
|
@ -800,7 +800,8 @@ static long find_entry_ram(const char *filename)
|
||||||
struct dircache_fileref dcfref;
|
struct dircache_fileref dcfref;
|
||||||
|
|
||||||
/* Check if tagcache is loaded into ram. */
|
/* Check if tagcache is loaded into ram. */
|
||||||
if (!tc_stat.ramcache)
|
if (!tc_stat.ramcache
|
||||||
|
|| global_settings.tagcache_ram != TAGCACHE_RAM_ON)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (dircache_search(DCS_CACHED_PATH | DCS_UPDATE_FILEREF, &dcfref,
|
if (dircache_search(DCS_CACHED_PATH | DCS_UPDATE_FILEREF, &dcfref,
|
||||||
|
@ -5247,6 +5248,7 @@ static void tagcache_thread(void)
|
||||||
if (!tc_stat.ramcache && global_settings.tagcache_ram)
|
if (!tc_stat.ramcache && global_settings.tagcache_ram)
|
||||||
{
|
{
|
||||||
load_ramcache();
|
load_ramcache();
|
||||||
|
if (global_settings.tagcache_ram == TAGCACHE_RAM_ON)
|
||||||
check_file_refs(global_settings.tagcache_autoupdate);
|
check_file_refs(global_settings.tagcache_autoupdate);
|
||||||
if (tc_stat.ramcache && global_settings.tagcache_autoupdate)
|
if (tc_stat.ramcache && global_settings.tagcache_autoupdate)
|
||||||
tagcache_build();
|
tagcache_build();
|
||||||
|
|
|
@ -52,10 +52,23 @@ with logging
|
||||||
browsing but it does not use extra RAM and saves some battery on boot up.
|
browsing but it does not use extra RAM and saves some battery on boot up.
|
||||||
|
|
||||||
\opt{HAVE_DISK_STORAGE}{
|
\opt{HAVE_DISK_STORAGE}{
|
||||||
\note{If you browse your music frequently using the database, you should
|
If you browse your music frequently using the database, you should
|
||||||
load to RAM, as this will reduce the overall battery consumption because
|
load to RAM, as this will reduce the overall battery consumption because
|
||||||
the disk will not need to spin on each search.}
|
the disk will not need to spin on each search.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
\note{When Load to RAM is turned on, and the directory cache is enabled as well,
|
||||||
|
it may take an unexpectedly long amount of time for disk activity to
|
||||||
|
wind down after booting, depending on your library size and player.
|
||||||
|
|
||||||
|
This can be mitigated by choosing the \setting{Quick} option instead, which causes
|
||||||
|
the database to ignore cached file references. In that case, you may notice brief
|
||||||
|
moments of disk activity once the path for a database entry has to be retrieved.
|
||||||
|
|
||||||
|
Set to \setting{On}, if you plan to take advantage the database's Update function,
|
||||||
|
or use a WPS that displays multiple upcoming tracks from the current playlist.
|
||||||
|
Otherwise, you may notice file names instead of metadata being displayed for those
|
||||||
|
tracks.}
|
||||||
}
|
}
|
||||||
|
|
||||||
\item[Auto Update]
|
\item[Auto Update]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue