Quoting Wan-Teh Chang (2016-11-30 21:33:37)
> This improves commit 59c70227405c214b29971e6272f3a3ff6fcce3d0.
> 
> In ff_thread_report_progress(), the fast code path can load
> progress[field] with the relaxed memory order, and the slow code path
> can store progress[field] with the release memory order.
> 
> In ff_thread_get_buffer(), initialize progress[0] and progress[1] using
> atomic_init().
> 
> Signed-off-by: Wan-Teh Chang <[email protected]>
> ---
>  libavcodec/pthread_frame.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/libavcodec/pthread_frame.c b/libavcodec/pthread_frame.c
> index 2736a81..142eaa5 100644
> --- a/libavcodec/pthread_frame.c
> +++ b/libavcodec/pthread_frame.c
> @@ -458,7 +458,7 @@ void ff_thread_report_progress(ThreadFrame *f, int n, int 
> field)
>      atomic_int *progress = f->progress ? (atomic_int*)f->progress->data : 
> NULL;
>  
>      if (!progress ||
> -        atomic_load_explicit(&progress[field], memory_order_acquire) >= n)
> +        atomic_load_explicit(&progress[field], memory_order_relaxed) >= n)
>          return;
>  
>      p = f->owner->internal->thread_ctx;
> @@ -468,7 +468,7 @@ void ff_thread_report_progress(ThreadFrame *f, int n, int 
> field)
>  
>      pthread_mutex_lock(&p->progress_mutex);
>  
> -    atomic_store(&progress[field], n);
> +    atomic_store_explicit(&progress[field], n, memory_order_release);
>  
>      pthread_cond_broadcast(&p->progress_cond);
>      pthread_mutex_unlock(&p->progress_mutex);
> @@ -745,8 +745,8 @@ int ff_thread_get_buffer(AVCodecContext *avctx, 
> ThreadFrame *f, int flags)
>          }
>          progress = (atomic_int*)f->progress->data;
>  
> -        atomic_store(&progress[0], -1);
> -        atomic_store(&progress[1], -1);
> +        atomic_init(&progress[0], -1);
> +        atomic_init(&progress[1], -1);
>      }
>  
>      pthread_mutex_lock(&p->parent->buffer_mutex);
> -- 
> 2.8.0.rc3.226.g39d4020

Did you see any measurable change in performance after this patch?

I used to have lot more explicit memory orders in my original version of
the patch, but then I dropped most of them, since I thought they were
unlikely to have any significant effect and just added a chance of hard
to detect racy bugs.

-- 
Anton Khirnov
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to