core/idle: Let tests run without the thread pool

The thread pool is used to fetch album art in the background, but this
can slow down most tests that aren't interested in album art.  Adding a
(testing-only) function for running without the thread pool speeds
things up a bit.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2016-07-28 16:15:29 -04:00
parent bd8f3754e7
commit 779969f28b
10 changed files with 34 additions and 13 deletions

View File

@ -1,4 +1,5 @@
6.4.16:
- Let tests run without fetching album art
- Don't try to read data from nonexistant playlists
- Show hidden folders when selecting new images
- Add preview widget to album art chooser dialog

View File

@ -14,7 +14,11 @@
void core_init(int *argc, char ***argv, struct core_init_data *init)
{
#ifdef CONFIG_TESTING
idle_init_sync();
#else
idle_init();
#endif /* CONFIG_TESTING */
filter_init();
tags_init();
playlist_init(init->playlist_ops);

View File

@ -17,13 +17,17 @@ static unsigned int queued = 0;
static unsigned int serviced = 0;
void __idle_free_task(struct idle_task *task)
{
g_free(task);
g_atomic_int_inc(&serviced);
}
bool __idle_run_task(struct idle_task *task)
{
bool finished = task->idle_func(task->idle_data);
if (finished) {
g_free(task);
g_atomic_int_inc(&serviced);
}
if (finished)
__idle_free_task(task);
return finished;
}
@ -39,6 +43,12 @@ void idle_init()
idle_pool = g_thread_pool_new(__idle_thread, NULL, 1, true, NULL);
}
#ifdef CONFIG_TESTING
void idle_init_sync()
{
}
#endif /* CONFIG_TESTING */
void idle_deinit()
{
struct idle_task *task;
@ -72,9 +82,12 @@ bool idle_run_task()
if (!g_queue_is_empty(&idle_queue)) {
task = g_queue_pop_head(&idle_queue);
if (task->idle_sync == IDLE_ASYNC)
g_thread_pool_push(idle_pool, task, NULL);
else if (!__idle_run_task(task))
if (task->idle_sync == IDLE_ASYNC) {
if (idle_pool)
g_thread_pool_push(idle_pool, task, NULL);
else
__idle_free_task(task);
} else if (!__idle_run_task(task))
g_queue_push_tail(&idle_queue, task);
}

View File

@ -25,6 +25,9 @@ enum idle_sync_t {
/* Called to initialize the idle queue. */
void idle_init();
#ifdef CONFIG_TESTING
void idle_init_sync();
#endif /* CONFIG_TESTING */
/* Called to deinitialize the idle queue. */
void idle_deinit();

View File

@ -14,7 +14,7 @@ static void test_init()
struct queue *q = collection_get_queue();
GSList *list;
idle_init();
idle_init_sync();
filter_init();
tags_init();
playlist_init(NULL);

View File

@ -14,7 +14,7 @@ static void test_init()
{
struct queue *q = history_get_queue();
idle_init();
idle_init_sync();
filter_init();
tags_init();
playlist_init(NULL);

View File

@ -13,7 +13,7 @@ static void test_init()
struct library *library;
GSList *list;
idle_init();
idle_init_sync();
filter_init();
tags_init();
playlist_init(NULL);

View File

@ -53,7 +53,7 @@ static void test_init()
{
struct library *library;
idle_init();
idle_init_sync();
filter_init();
tags_init();
pl_system_init(NULL);

View File

@ -72,7 +72,7 @@ static void test_track()
gchar *date;
setlocale(LC_TIME, "C");
idle_init();
idle_init_sync();
filter_init();
tags_init();
file_init(&f, "track_tag", 0, 0);

View File

@ -13,7 +13,7 @@
static void test_init()
{
idle_init();
idle_init_sync();
filter_init();
tags_init();
playlist_init(NULL);