core: Defragment databases on startup
Databases can change either as part of an upgrade or through adding and removing entries. We can save a bit of memory by removing unallocated entries during startup. Implements #47: Automatic database defragment Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
85bfe717dd
commit
d6e5e6c773
11
core/core.c
11
core/core.c
|
@ -9,6 +9,15 @@
|
||||||
#include <core/tags/tags.h>
|
#include <core/tags/tags.h>
|
||||||
|
|
||||||
|
|
||||||
|
static bool core_defragment(void *data)
|
||||||
|
{
|
||||||
|
if (tags_defragment()) {
|
||||||
|
playlist_save();
|
||||||
|
audio_save();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void core_init(int *argc, char ***argv, struct core_init_data *init)
|
void core_init(int *argc, char ***argv, struct core_init_data *init)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_TESTING
|
#ifdef CONFIG_TESTING
|
||||||
|
@ -20,6 +29,8 @@ void core_init(int *argc, char ***argv, struct core_init_data *init)
|
||||||
tags_init();
|
tags_init();
|
||||||
playlist_init(init->playlist_ops);
|
playlist_init(init->playlist_ops);
|
||||||
audio_init(argc, argv, init->audio_ops);
|
audio_init(argc, argv, init->audio_ops);
|
||||||
|
|
||||||
|
idle_schedule(IDLE_SYNC, core_defragment, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void core_deinit()
|
void core_deinit()
|
||||||
|
|
|
@ -300,6 +300,11 @@ void album_db_deinit()
|
||||||
db_deinit(&album_db);
|
db_deinit(&album_db);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool album_db_defrag()
|
||||||
|
{
|
||||||
|
return db_defrag(&album_db);
|
||||||
|
}
|
||||||
|
|
||||||
bool album_db_upgrade_done()
|
bool album_db_upgrade_done()
|
||||||
{
|
{
|
||||||
struct db_entry *dbe, *next;
|
struct db_entry *dbe, *next;
|
||||||
|
|
|
@ -73,6 +73,11 @@ void library_db_deinit()
|
||||||
db_deinit(&library_db);
|
db_deinit(&library_db);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool library_db_defrag()
|
||||||
|
{
|
||||||
|
return db_defrag(&library_db);
|
||||||
|
}
|
||||||
|
|
||||||
const struct database *library_db_get()
|
const struct database *library_db_get()
|
||||||
{
|
{
|
||||||
return &library_db;
|
return &library_db;
|
||||||
|
|
|
@ -35,3 +35,14 @@ void tags_deinit()
|
||||||
album_db_deinit();
|
album_db_deinit();
|
||||||
artist_db_deinit();
|
artist_db_deinit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool tags_defragment(void *data)
|
||||||
|
{
|
||||||
|
bool album = album_db_defrag();
|
||||||
|
bool library = library_db_defrag();
|
||||||
|
bool track = track_db_defrag();
|
||||||
|
|
||||||
|
if (album || library || track)
|
||||||
|
track_db_commit();
|
||||||
|
return track;
|
||||||
|
}
|
||||||
|
|
|
@ -212,6 +212,11 @@ void track_db_commit()
|
||||||
db_save(&track_db);
|
db_save(&track_db);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool track_db_defrag()
|
||||||
|
{
|
||||||
|
return db_defrag(&track_db);
|
||||||
|
}
|
||||||
|
|
||||||
const struct database *track_db_get()
|
const struct database *track_db_get()
|
||||||
{
|
{
|
||||||
return &track_db;
|
return &track_db;
|
||||||
|
|
|
@ -36,6 +36,9 @@ void album_db_init();
|
||||||
/* Called to clean up the album database. */
|
/* Called to clean up the album database. */
|
||||||
void album_db_deinit();
|
void album_db_deinit();
|
||||||
|
|
||||||
|
/* Called to defragment the album database. */
|
||||||
|
bool album_db_defrag();
|
||||||
|
|
||||||
/* Called to clean up the album database after an upgrade. */
|
/* Called to clean up the album database after an upgrade. */
|
||||||
bool album_db_upgrade_done();
|
bool album_db_upgrade_done();
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,9 @@ void library_db_init();
|
||||||
/* Called to clean up the library database. */
|
/* Called to clean up the library database. */
|
||||||
void library_db_deinit();
|
void library_db_deinit();
|
||||||
|
|
||||||
|
/* Called to defragment the library database. */
|
||||||
|
bool library_db_defrag();
|
||||||
|
|
||||||
/* Called to access the library database. */
|
/* Called to access the library database. */
|
||||||
const struct database *library_db_get();
|
const struct database *library_db_get();
|
||||||
|
|
||||||
|
|
|
@ -11,4 +11,7 @@ void tags_init();
|
||||||
/* Called to clean up all databases. */
|
/* Called to clean up all databases. */
|
||||||
void tags_deinit();
|
void tags_deinit();
|
||||||
|
|
||||||
|
/* Called to defragment all databases. */
|
||||||
|
bool tags_defragment();
|
||||||
|
|
||||||
#endif /* OCARINA_CORE_TAGS_TAGS_H */
|
#endif /* OCARINA_CORE_TAGS_TAGS_H */
|
||||||
|
|
|
@ -69,6 +69,9 @@ void track_db_deinit();
|
||||||
/* Called to commit the track database. */
|
/* Called to commit the track database. */
|
||||||
void track_db_commit();
|
void track_db_commit();
|
||||||
|
|
||||||
|
/* Called to defragment the track database. */
|
||||||
|
bool track_db_defrag();
|
||||||
|
|
||||||
/* Called to access the track database. */
|
/* Called to access the track database. */
|
||||||
const struct database *track_db_get();
|
const struct database *track_db_get();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue