diff options
-rw-r--r-- | src/til.c | 2 | ||||
-rw-r--r-- | src/til_threads.c | 15 |
2 files changed, 5 insertions, 12 deletions
@@ -188,6 +188,8 @@ static void module_render_fragment(const til_module_t *module, void *context, ti if (module->finish_frame) module->finish_frame(context, ticks, fragment); + + fragment->cleared = 1; } diff --git a/src/til_threads.c b/src/til_threads.c index bb19b05..9f5c191 100644 --- a/src/til_threads.c +++ b/src/til_threads.c @@ -18,8 +18,6 @@ typedef struct til_threads_t { pthread_mutex_t idle_mutex; pthread_cond_t idle_cond; - unsigned idle_n_fragments; - unsigned idle_n_cleared; unsigned n_idle; pthread_mutex_t frame_mutex; @@ -47,7 +45,7 @@ static void * thread_func(void *_thread) pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); for (;;) { - unsigned n_fragments = 0, n_cleared = 0; + unsigned n_fragments = 0; /* wait for a new frame */ pthread_mutex_lock(&threads->frame_mutex); @@ -68,22 +66,15 @@ static void * thread_func(void *_thread) break; threads->render_fragment_func(threads->context, threads->ticks, thread->id, &fragment); - n_cleared += fragment.cleared; n_fragments++; } /* report as idle */ pthread_mutex_lock(&threads->idle_mutex); pthread_cleanup_push((void (*)(void *))pthread_mutex_unlock, &threads->idle_mutex); - threads->idle_n_fragments += n_fragments; - threads->idle_n_cleared += n_cleared; threads->n_idle++; - if (threads->n_idle == threads->n_threads) { /* Frame finished! Notify potential waiter. */ - if (threads->idle_n_cleared == threads->idle_n_fragments) - threads->fragment->cleared = 1; - + if (threads->n_idle == threads->n_threads) /* Frame finished! Notify potential waiter. */ pthread_cond_signal(&threads->idle_cond); - } pthread_cleanup_pop(1); } @@ -115,7 +106,7 @@ void til_threads_frame_submit(til_threads_t *threads, til_fb_fragment_t *fragmen threads->context = context; threads->ticks = ticks; threads->frame_num++; - threads->n_idle = threads->idle_n_cleared = threads->idle_n_fragments = threads->next_fragment = 0; + threads->n_idle = threads->next_fragment = 0; pthread_cond_broadcast(&threads->frame_cond); pthread_cleanup_pop(1); } |